攻防世界int_overflow

首先惯例checksec一下
攻防世界int_overflow
从上图可以看出,这是一个32位的程序,并且只开了堆栈不可执行的保护。
我们使用IDA查看一下源码:
攻防世界int_overflow点进login
攻防世界int_overflow进入这个check_passwd函数:
攻防世界int_overflow
当v3>3u且v3<8u进入else。else中把s的值复制到dest,如果s的值够长,就能造出栈溢出。
但是3<v3<8限制了s的长度了,怎么办呢?我们可以看一下汇编代码:会发现程序把s放到一个al寄存器中,al是一个八位寄存器,八位寄存器对于无符号整数来说是有0~255的范围的。v3为无符号整型,表示s(即你输入的passwd)的长度,可能存在整数溢出。
接着看看有什么代码是可以利用的:那么跳转到这个地址就可以得到我们想要的flag了!
攻防世界int_overflow
攻防世界int_overflow