标题: [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。