CG CTF-Web-起名字真难

这题是一道代码审计和PHP弱类型比较的题目,不算太难,但是我被坑了。
首先进行代码审计:

<?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';

不要看成

return $number = '54975581388';

这个代码的思路就是判断key这个字符串的的每一位都不能是1到9的数字,但是它还要和’54975581388’弱类型相等。因此我们可以把54975581388转化为十六进制。这里我就被坑了。54975581388转化为正确的16进制应该是ccccccccc,恰好没有数字,但是我在谷歌浏览器上的harkbar进行16进制encode,结果是错的,导致我这题无法下手了。以后长个记性,以后编码解码都在burp上,没有的再上网查,而且多找几个。我还记得我以前上网找rot13解码,最后解出来的是不区分大小写的,又把我那题卡死了。真的气死我了。
这题直接提交?key=0xccccccccc就可以获得flag了。以后一定要长心眼,别让工具把自己拖累了。

猜你喜欢

转载自blog.csdn.net/rfrder/article/details/108456094