一进来就是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 这种。。。
|