checksec
一道正常的栈题,只开了NX
反编译
第一次fgets输入长度为32,后面有一次scanf输入v2,结合栈的排布可以发现输入v2的时候可以溢出覆盖s,那么我们只需要控制好第二次输入就可以了
shift+f12看到有cat flag的字符串,找到对应函数:
程序最后对"v3[–v5]"的地址会直接调用,而前面的程序就是通过判断v2[i]的值是否在小写字母范围内对v5进行累加(在v5>=5的情况下),最大到10.
那么我们需要做的就是通过覆盖v3[9]的地址为后门函数
然后需要做的是覆盖v5的初值为5及以上,然后让程序自带的循环将其加至10
需要注意的是不能一开始直接覆盖成0x9或者0xA,因为scanf读入%s的时候输入16进制数会解析成对应的ascii值
而scanf读到0x9和0xA对应的ascii码值就停了,前面的不会,所以不能是直接覆盖成0x9或0xA
小细节,也算是学到东西
exp
1 | from pwn import* |
如果您喜欢此博客或发现它对您有用,则欢迎对此发表评论。 也欢迎您共享此博客,以便更多人可以参与。 如果博客中使用的图像侵犯了您的版权,请与作者联系以将其删除。 谢谢 !