挑战
乍一看,登录页面似乎相当简单。
在页面的源代码中并没有那么隐藏是我可以找到表单源的地方。
<!-- source.txt 中的源代码 -->
source.txt 文件很简单,在我们的 GET 请求和 $PASSWORD 变量之间执行了一个简单的 strcmp。
身份验证绕过
从这里开始,我实际上花了很长时间尝试在我的 get 请求中传递对 $FLAGWEB6 的引用,因为这两个变量是相同的。不幸的是,我永远无法让它工作(如果我在这里错过了一些愚蠢的事情,请联系我!)。
无法在这方面取得任何进展,然后我回顾了挑战提供的提示。
一些比较字符串的方法是非常不安全的
经过更多研究,似乎strcmp在将字符串与其他内容进行比较时存在一些问题。
如果我设置 $_GET['password'] 等于一个空数组,那么 strcmp 将返回一个 NULL。由于 PHP 比较中的一些固有弱点,NULL == 0 将返回 true(更多信息)。
考虑到这一点,我向登录页面发送了以下请求。
http://yrmyzscnvh.abctf.xyz/web6/?password[]=%22%22
发送请求后,我收到了标志和随后的 70 分。
PHP strcmp 绕过 – 结论
虽然这不是一个困难的挑战,但我在绕过这个过程中获得了很多乐趣。