分享

CTF PHP代码审计 正则表达式 弱类型比较

 新用户88342ytu 2020-10-13

一进来就是PHP正则表达式
在这里插入图片描述
这个比较难的地方在于正则表达式里面的符号代表什么含义,网上去找了下资料。
在这里插入图片描述
在有了上面那个的基础后就比较容易了,分段来说明。

if  ("POST" == $_SERVER['REQUEST_METHOD'])

需要用POST方式提交。

if (0 >= preg_match('/^[[:graph:]]{12,}$/', $password))
    {
        echo 'Wrong Format';
        exit;
    }

这里只需要有连续12个以上的非控制字符就可以,比如空格tab等。

$reg = '/([[:punct:]]+|[[:digit:]]+|[[:upper:]]+|[[:lower:]]+)/';
     if (6 > preg_match_all($reg, $password, $arr))
            break;

这里有点难理解,这里指的是将$password分成连续的符号punct或者数字digit或者大写upper或者小写lower能分成6段以上即可。
在这里插入图片描述
这个函数也能分割出数组,只是有点小奇怪的是$arr这个变量没看到,可能是在flag.php里面有吧。。。
接着看下一段。

$ps = array('punct', 'digit', 'upper', 'lower');
        foreach ($ps as $pt)
        {
            if (preg_match("/[[:$pt:]]+/", $password))
                $c += 1;
        }
        if ($c < 3) break;

在密码里面至少要看到符号数字大写小写至少出现三种。

       if ("42"==intval($password)&&"42"!=$password) echo $flag;
        else echo 'Wrong password';
        exit;

这里就是典型的弱类型比较了,只要满足上面的要求即可,随便测试了下42.Hell0World!就可以了。
在这里插入图片描述
在这里插入图片描述
成功拿到flag,这里多说一下,不是非得用科学计数法才行,我看所有的writeup里面都写的42.0000000e+1这种。。。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多