标题: [wargames] Natas 24 解答 分类: 安全测试 创建: 2022-12-05 20:14 修改: 链接: http://0x2531.tech/testing/202212052014.txt -------------------------------------------------------------------------------- OverTheWire 设计了一系列 wargames,Natas 是其中之一,主要关注基本的服务端 Web 安全问题。 最近抽空玩了下,还挺有趣。 Natas 项目地址:https://overthewire.org/wargames/natas/ Natas 24 主要考察代码审计方面的能力,具体知识点是利用 strcmp 函数特性绕过相等比较。 主要的后端代码如下: ========== Password:
")){ echo "
The credentials for the next level are:
"; echo "
Username: natas25 Password: 
"; } else{ echo "
Wrong!
"; } } // morla / 10111 ?> ========== strcmp 函数用于比较两个字符串 string1 和 string2 的大小,如果 string1 小于 string2 返 回 -1;如果 string1 大于 string2 返回 1;如果两者相等,返回 0。 看代码可知,正常情况下,只有当 passwd 值和另一个未知值相等时,才会打印下一关的密码。很显然,通 过现有信息无法获取到该未知值。那么只能考虑去 bypass 了。 strcmp 函数有个特性,当比较数组和字符串时,会报 warning。同时,返回 NULL。 一般情况下,warning 不会导致程序中断,对 NULL 取反正好是 true,成功的进入 if 分支。 请求 /?passwd[]=aaa 即可获取 natas25 的密码:O9QD9DZBDq1YpswiTM5oqMDaOtuZtAcx。