南邮CTF:WEB 起名字真难

条件:

<?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进制字串

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值