题目浏览
映入眼帘的是下面这么一副页面
解题过程
- 右键查看源代码,看是否在源码中给出什么提示
在源码中可以看到有一个很可疑的注释
<!-- index.php.txt -->
,猜测可能是这个页面的PHP源码。 - 访问这个文件 http://*******/index.php.txt,可以得到下面的源码
3. 分析源码:
- 该源码首先获取到通过POST提交的num的值,然后这里做了一个判断,这里用到一个函数ereg(),该参数的作用是以区分大小写的方式在字符串中寻找与给定的正则表达式 pattern 所匹配的子串。 具体用法请访问这里。(PHP7已经不再支持该函数)
- 在这里就是在提交的num值中匹配一串数字,并且开头是数字,结尾也是数字,给定的字符串里都是数字,例如:1234。1像23fdsaf123这种的就无法匹配到,如果能够匹配到就执行下一个判断;
- 下一个判断是用的strpos()这个函数,该函数的作用是查找字符串首次出现的位置,支持的版本有PHP 4, PHP 5, PHP 7,在这里的含义是只有num值中存在”#testaasafd“时才会执行该代码块中的内容,也就是输出flag。通过分析发现这里与上面的很明显有冲突。
ereg()函数存在截断漏洞,可以使用%00绕过验证,即%00截断及遇到%00则认为字符串已经结束
所以我们可以这么绕过 :在hackbar中将POST data设置为num=123123%00#testaasafd,,就可以得到Flag