0x00
Protostar涉及栈溢出、堆溢出、格式化字符串漏洞、网络编程、及综合性漏洞。
本文将介绍stack部分。
关于环境准备,在官网https://exploit-exercises.lains.space/protostar/下载即可。下载后得到iso镜像,使用vmware安装。然后使用user/user即可登录
查看ip

知道ip后可以在kali中ssh连上

输入user即可
机器上所有需要分析的程序都在如下路径

0x0
来看第一关stack0
源码如下

这题很简单,就是在if里判断modified变量是否被修改,而题目可以让我们合法输入的只有buffer的64字节,不过由于使用的是gets,可以通过溢出64字节的缓冲区,比如65字节,这样64个字节在buffer中,1个字节在modified中,只要其值不是0,就可以了。
测试如下
先输入64个字节,可以会try again,输入65字节,则成功修改了modified的初始值0

如果输入更多,可能还会溢出到其他空间如返回地址等,所以容易造成程序崩溃,比如输入200个

0x02
第二关stack1
源码如下

从源码中看出,这一关在上一关基础上,不仅要求modified被修改,而且明确了要修改为0x61626364。这一关虽然使用了strcpy,但是和gets一样,没有校验边界,所以还是可以造成溢出
可以先试试

输入64个a的时候是刚好把buffer填满了,输入65个a时,多出的1个a是填到了modified的空间中
这里注意到第65个a是第一个写到modified空间的(modified为int类型,共四字节)但是从打印的结果中看到这个a却是在最后的位置,这是由于该机器采用的小端序
所以既然从源码中看到它让我们把modified填为0x61626364,即abcd,所以我们在输入时的顺序应该是相反的,即dcba,即如下所示

本文详述Protostar栈溢出挑战的八个关卡,包括如何利用gets和strcpy函数的边界检查缺失来修改变量,如何通过覆写返回地址控制程序流程,以及如何使用ret2libc和ret2text技巧绕过限制直接执行shellcode。
最低0.47元/天 解锁文章
1190





