from pwn import *

Pwntools

ELF

# Create an ELF object
>>> elf = ELF("/bin/bash")
[*] '/bin/bash'
    Arch:     amd64-64-little
    RELRO:    Full RELRO
    Stack:    Canary found
    NX:       NX enabled
    PIE:      PIE enabled
    FORTIFY:  Enabled
    
# Find the binary base address
>>> hex(elf.address)
'0x0'

# Find the binary entry point
>>> hex(elf.entry)
'0x30430'

# Search function address in PLT table
>>> hex(elf.plt['write'])
'0x2e044'

# Search function address in GOT table
>>> hex(elf.got['write'])
'0x118938'

# .search() returns a generator
>>> elf.search(b"/bin/sh\x00")
<generator object ELF.search at 0x7f05c79ccac0>

# next() returns the "next" item of the generator
>>> hex(next(elf.search(b"/bin/sh\x00")))
'0x30c42'

# Search a gadget
>>> hex(next(elf.search(asm('jmp esp'))))
'0x949c1'

ROP

# Create a ROP object
>>> rop = ROP(elf)
[*] Loaded 141 cached gadgets for '/bin/bash'

# Find gadgets containing rax
>>> rop.rax
Gadget(0xb03eb, ['pop rax', 'ret'], ['rax'], 0x8)

# Get the gadget address
>>> hex(rop.rax.address)
'0xb03eb'

Reference

Last updated