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