检查一下,32 位程序,开启 NX 保护
ida 反编译看伪代码
首先清空了 s、v5、s1
读取用户名到 v5
在 v5 中找 \n,找到则将其设置为 \0
在 v5 后面追加 \nInput your Password.
接下来打开 password.txt 读到 s
打印出 v5 即用户名
继续从标准输入读取内容到 s1
将 v5 的第一个元素设置为 0
比较 s1 和 s 是否相等,相等则执行 flag 函数
跟进 flag 函数看看:
flag 函数就是读取并打印 flag
那么漏洞点在哪儿,虽然我们 fgets 能输入的长度最大就是数组的大小
但是这个 puts 有问题,puts 需要遇到 \x00 才