int_overflow的WP(整数溢出)

攻防世界PWN

int_overflow的WP

基本三步

checksec,file,执行文件int_overflow的WP(整数溢出)
可以看出是个32位文件,且开了NX和RELRO。
之后扔到32位IDA pro 中查看
int_overflow的WP(整数溢出)
main函数看不到flag和溢出点,就每一个函数都看一下,
在下面这个函数看到了flag,
int_overflow的WP(整数溢出)
点击 what_is_this函数,得到函数地址0X804868B
int_overflow的WP(整数溢出)
在函数check—passwd,看起来好像有个溢出点,但不知道是什么溢出
看了一下其他大佬的WP,发现是整数溢出,有兴趣的,可以去这个博客看一下(https://blog.csdn.net/xzli8_geo/article/details/83794268)
V3是用一个一字节,8bit 的变量存储 password 的长度。
而8bit最大数字是2^8-1 = 255=二进制(11111111)。
passwd的要求是长度为4~8位。
可以利用整数溢出变为259~263 (255+4=259,255+8=263)
后面存在一个字符串拷贝函数,点击一下。

int_overflow的WP(整数溢出)
int_overflow的WP(整数溢出)
发现leave指令(leave 指令相当于于 mov esp,ebp
和 pop ebp 两条指令的组合)相当于有个出栈操作,就多出来了
4位字节,这四个字节也要覆盖,才能转指向 what_is_this 函数

就在0x14,所以0X14 + 4 = 0X18
int_overflow的WP(整数溢出)

看一下这个check—passwd函数是怎么调用的,打开login函数
int_overflow的WP(整数溢出)
发现login中可以接受最大为0x199就是409长度的passwd,远远大于
256,可以使用整数溢出,我选择263位数,263-0x18-4=235
则exp为
int_overflow的WP(整数溢出)

上一篇:mysql 完全备份+二进制日志备份


下一篇:攻防世界pwn新手题wp(通俗易懂)