条件:
<?php
function noother_says_correct($number)
{
$one = ord('1');
$nine = ord('9');
for ($i = 0; $i < strlen($number); $i++)
{
$digit = ord($number{$i});
if ( ($digit >= $one) && ($digit <= $nine) )
{
return false;
}
}
return $number == '54975581388';
}
$flag='*******';
if(noother_says_correct($_GET['key']))
echo $flag;
else
echo 'access denied';
?>
过程
- 一开始理解错误,函数的返回值看成了
return $number = ‘54975581388’; - 不明所以,结果去看writerup,说是换一种表达形式,成功了
- 然后,我自己跟着敲了一边条件代码,发现了错误,理解了题意
题意
题目要求不能输入数字,但是输入的字符串必须和54975581388相同
用和54975581388等值的16进制表示,很巧,全不是数字,就成功了
利用了php的弱类型的特性
总结
当遇到 与数字字符串对比校验的时候,可以尝试转换为等值的16进制字串