攻防世界PWN
int_overflow的WP
基本三步
checksec,file,执行文件
可以看出是个32位文件,且开了NX和RELRO。
之后扔到32位IDA pro 中查看
main函数看不到flag和溢出点,就每一个函数都看一下,
在下面这个函数看到了flag,
点击 what_is_this函数,得到函数地址0X804868B
在函数check—passwd,看起来好像有个溢出点,但不知道是什么溢出
看了一下其他大佬的WP,发现是整数溢出,有兴趣的,可以去这个博客看一下(https://blog.csdn.net/xzli8_geo/article/details/83794268)
V3是用一个一字节,8bit 的变量存储 password 的长度。
而8bit最大数字是2^8-1 = 255=二进制(11111111)。
passwd的要求是长度为4~8位。
257转换16进制是0x101,8bit位,变成了0x01,就是1,
又因为4~8位通过,最后得出257+3,257+7可通过检测
可以利用整数溢出变为260~264
后面存在一个字符串拷贝函数,点击一下。
发现leave指令(leave 指令相当于于 mov esp,ebp
和 pop ebp 两条指令的组合)相当于有个出栈操作,就多出来了
4位字节,这四个字节也要覆盖,才能转指向 what_is_this 函数
就在0x14,所以0X14 + 4 = 0X18。
看一下这个check—passwd函数是怎么调用的,打开login函数
发现login中可以接受最大为0x199就是409长度的passwd,远远大于
256,可以使用整数溢出,我选择263位数,263-0x18-4=235
则exp为