Exploit-Exercise之Protostar-stack

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

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,即如下所示

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值