少女祈祷中...

1z_php(简单代码阅读)

解题步骤:

1.正确输入get请求(这个坑可真的是重量级)

1
2
3
4
5
6
7
8
9
10
$emp=$_GET['e_m.p'];
$try=$_POST['try'];
if($emp!="114514"&&intval($emp,0)===114514)
{
for ($i=0;$i<strlen($emp);$i++){
if (ctype_alpha($emp[$i])){
die("你不是hacker?那请去外场等候!");
}
}
echo "只有真正的hacker才能拿到flag!"."<br>";

我们需要输入的不是?e_m.p=...而是:?e[m.p=….

解释原因:

1
2
3
PHP 在解析数组参数时,键名中的点号不会被自动转换为下划线(与普通变量名不同)。例如:
?e_m.p=value 会被转换为 $_GET['e_m_p']。
?e[m.p=value 会被解析为 $_GET['e']['m.p'],键名保留点号。

2.检测114514:

仔细解释代码:

1
$emp!="114514"&&intval($emp,0)===114514

判断字符串emp!=114514,且强制转化为整数后=114514

直接构造:

1
http://gz.imxbt.cn:20897/?e%5Bm.p=114514.00001