cgctf when_did_you_born 栈溢出简单利用

拿到题目,先checksec下,看下防护措施:
cgctf when_did_you_born 栈溢出简单利用_第1张图片
没有开启PIE。
直接放到IDA里看下:
cgctf when_did_you_born 栈溢出简单利用_第2张图片
有些变量名为了方便看,我已经修改过了。图中箭头处即是溢出点。
分析下
第一次输入overflowme,如果等于1926就会退出,但是想要拿到flag,就需要overflowme的值为1926,那就很明显了,第一次输入的时候随便输个数只要不是1926就行,第二次输入v4 这个数组的时候,利用缓冲区溢出,将overflowme这个变量的值给覆盖成1926就行了,将1926转化为16进制为0x786。
通过IDA看下数组和overflow这个变量之间的距离:
cgctf when_did_you_born 栈溢出简单利用_第3张图片
0x20-0x18,得到距离是8个字节。只要填充8个字节的垃圾数据,再将其后4个字节的空间覆盖为0x00000786就可以了。此时栈空间如下图:(注意little-endian)
在这里插入图片描述
写下exp:
cgctf when_did_you_born 栈溢出简单利用_第4张图片
运行该脚本即可拿到shell。

你可能感兴趣的:(pwn,pwn,writeup)