右键查看源码,发现有提示source.txt,打开链接
<?php
if ("POST" == $_SERVER['REQUEST_METHOD'])
{
$password = $_POST['password'];
if (0 >= preg_match('/^[[:graph:]]{12,}$/', $password))
{
echo 'Wrong Format';
exit;
}
while (TRUE)
{
$reg = '/([[:punct:]]+|[[:digit:]]+|[[:upper:]]+|[[:lower:]]+)/';
if (6 > preg_match_all($reg, $password, $arr))
break;
$c = 0;
$ps = array('punct', 'digit', 'upper', 'lower');
foreach ($ps as $pt)
{
if (preg_match("/[[:$pt:]]+/", $password))
$c += 1;
}
if ($c < 3) break;
if ("42" == $password)
require 'flag鏂囦欢';
else echo 'Wrong password';
exit;
}
}
将用户输入的密码进行3次正则判断,符合 "42" == $password 才会给出flag
三个正则分别是
- 可见字符超过12个
- 字符串中,把连续的大写,小写,数字,符号作为一段,至少分六段,例如
a12SD+io8
可以分成a
12
SD
+
io
8
六段 - 大写,小写,数字,符号这四种类型至少要出现三种
PHP在判断相等时做出的变化
var_dump("1" == "01"); // 1 == 1 -> true
var_dump("10" == "1e1"); // 10 == 10 -> true
var_dump(100 == "1e2"); // 100 == 100 -> true
根据这个就可以构造出来password: 42.00e+0000000000
<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">