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