本人也是在自学过程,主要目的也是记录学习过程,有些地方做的不太好,都是按照自己理解进行讲解的(不专业),欢迎大家指出问题
此处我将文件命名为pwn
checksec pwn 查看一下保护机制

可以看到这是一个32-bit的文件,NX保护开启
将文件拖入ida,按F5将汇编代码转换成c语言代码,得到

可以看到明显的printf(&format)格式化字符串漏洞,且只有一次机会,有内置system函数,无“/bin/sh”字符串。我们可以通过改写finif_arrary为main函数地址,从而获得第二次printf的机会,输入"/bin/sh"
思路:第一次改写fini_array为main函数,改写printf@got里的内容为system@plt;第二次输入'/bin/sh'字符串
在ida里收集main,system@plt的地址
![]()
![]()
得到main_addr = 0x8048534,system_plt=0x80483d0
返回虚拟机
收集fini_array,printf@got的地址

得到fini_arry=0x804979c
gdb pwn
start
got

得到printf@got=0x804989c
./pwn
aaaa.%p.%p.%p.%p.%p

可以看到0x61616161在我们输入aaaa后的第4个参数处
nano exp.py

保存退出
python3 exp.py
ls
cat flag

此题完
网硕互联帮助中心






评论前必须登录!
注册