优质CTF题careful
这是全国大学生信息安全竞赛中的一道题,当初没有做出来,现在学习pwn拿出来练习一下。
漏洞分析
首先我们用IDA打开后直接审计存在漏洞函数的伪C语言代码。
这里的算法比较简单,就是读入index和value,把value存入相应的位置。
先读入index和value,然后存入s数组,但是由于没有下标判断,所以造成任意位置写。
我们发现位于0x08048615处有一个add函数,没有使用到,而且输出一个字符串后使用system调用date。即system(“date”)。所以我们可以向system函数传递sh字符串参数来拿到shell。
我们还发现了system的plt地址
漏洞利用
在这里我们通过输入的数字改变栈上的内容,也就是修改返回地址为system的地址和system函数的参数地址。
- 找到sh字符串,gdb-peda有这个功能,我们选用第一个”sh”。
esp地址处是函数调用的参数的地址,所以需要把sh的地址写到调用system时的esp处。不过我们还需要把他放到esp的地址处作为system调用的参数。
- 可以计算出,返回地址的位置是 s[44]所对应的一个 int 空间。我们把它改为system的地址0x080483E0
exp如下:
|
|
利用结果