[OGeek2019]babyrop
使用checksec查看:

只开启了站RELRO和栈不可执行。
放进IDA中分析:

sub_80486BB();:初始化的,没啥用。fd = open("/dev/urandom", 0); if ( fd > 0 ) read(fd, &buf, 4u);:获取一个随机数给到buf
sub_804871F():

v6 = read(0, buf, 0x20u);:从键盘读入数据赋值给buf。v1 = strlen(buf):获取buf的长赋值给v1。if ( strncmp(buf, &s, v1) ) exit(0);:比较buf和s是否相同,比较位数是v1,不同则结束运行。return v5;:返回一个v5。
sub_80487D0(char a1):

- 传入参数是
sub_804871F()的返回值。 if ( a1 == 0x7F ):判断a1,做出不同长度的输入。
题目思路
-
返回值
v5可以通过覆盖的方式可控。 -
在
sub_80487D0(char a1)中,if判断正确可写入0xC8u大小的数据,但无法溢出,buf的大小未为0xE7。 -
所以需要走else过,控制
a1即可。 -
a1是sub_804871F()的返回值v5。 -
v5可在读取buf的时候进行覆盖,覆盖成\xFF。 -
用
\x00绕过strlen()对buf的判断 -
控制
a1之后就能实现栈溢出。 -
接着可通过ret2libc实现get
利用babyrop漏洞实现栈溢出与getshell:深度解析与实战教程

本文详细剖析了babyrop程序中的安全漏洞,通过覆盖和控制返回值实现栈溢出,进而利用ret2libc技术获取shell。步骤包括绕过strlen检查、控制输入长度、定位puts地址和系统调用地址,最终成功getshell。
最低0.47元/天 解锁文章
5638

被折叠的 条评论
为什么被折叠?



