1.打开代码后看到很多东西被过滤了;
审计代码
<?php
highlight_file(__FILE__);
// 这行代码调用highlight_file函数,高亮显示当前PHP文件的内容,通常用于调试。
if(isset($_GET['url']))
{
$url=$_GET['url'];
// 检查URL参数是否存在,并将URL值赋给$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.";
}
// 使用preg_match函数检查$url变量中是否包含某些不允许的命令或字符。
// 如果匹配到不允许的内容,输出错误信息。
else
{
echo "Can you see anything?";
exec($url);
}
// 如果没有匹配到不允许的内容,输出提示信息,然后执行$url变量的命令。
}
?>
因为ls 和cat都被过滤了,所以都要绕过。
命令执行无回显rce思路:
1.利用dnslog带外
2.写马
3.反弹shell
4.写文件然后访问文件
因为本题没有过滤竖线|、注释符\,因此可以使用注释符进行过滤绕过,竖线进行命令拼接
?url=l\s / |tee 1.txt
(这里解释一下tee的作用:
tee命令用于读取标准输入的数据,并将其内容输出成文件。
tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。
command | tee output.txt
)
tee将想要执行的命令写入到一个文件里面,然后再去访问这个文件。
cat命令被过滤了,那直接用tac
得到flag:
NSSCTF{eadea66b-79ed-4cf9-b15e-bc179d32b53a}