题目链接:
pass check 300
核心源码
<?php
$pass=@$_POST['pass'];
$pass1=***********;//被隐藏起来的密码
if (isset($pass)) {
if (@!strcmp($pass,$pass1)) {
echo "flag:nctf{*}";
} else {
echo "the pass is wrong!";
}
} else {
echo "please input pass!";
}
?>
题目链接:tip:strcmp(array,string)=null=0
分析:
打开网址如下 :
题目中提供了题目PHP的源码 , 对PHP的源码进行分析 :
<?php
$pass=@$_POST['pass']; // 获取POST参数pass
$pass1=***********;//被隐藏起来的密码
if (isset($pass)) {
if (@!strcmp($pass,$pass1)) { // 利用strcmp函数对post参数和php中设置的pass1这个字符串进行比对
echo "flag:nctf{*}";
} else {
echo "the pass is wrong!";
}
} else {
echo "please input pass!";
}
?>
所以我们要做的就是 : 需要让 @!strcmp($pass,$pass1 这个条件成立 .
想到使用php的弱类型漏洞 : (查询php的strcmp函数的API)
又通过百度得到了一篇关于php弱类型漏洞的文章 , 其中详细地测试了strcmp这个函数在不同类型的参数的情况下的返回值 :
因此尝试通过POST一个数组类型的变量pass来绕过检查 : (使用到了Chrome的Postman插件)
干货 :
答案:
nctf{strcmp_is_n0t_3afe}
知识点: