条件:
源码:
<?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!";
}
?>
思路:
- 题意要求通过post提交pass,使pass和后台的字串$pass1相同。
- 看到这个,想到两个方向:暴力,strcmp也许存在漏洞
百度一下,果不其然:
实际上,当这个函数接受到了不符合的类型,这个函数将发生错误,
但是在5.3之前的php中,显示了报错的警告信息后,将 return 0所以提交数组或者对象
- pass[]=qwer
总结:
php5.3之前的strcmp的漏洞
当参数中的一个字符串是对象或者数组时,函数会返回0