常見的文件上傳繞過漏洞有
1、前段繞過
2、服務端繞過
3、配合解析漏洞突破上傳
4、編輯器漏洞
一、前端繞過
. 客戶端javascript檢測(通常為檢測文件拓展名)
這是文件上傳突破的第一步,也是最容易繞過的一個 ,只要把需要上傳的文件的后綴名改為前端允許通過的就可以;
如 xxx.php -->xxx.jpg;
這時利用抓包軟件如:burpswite之類的代理工具抓取通過上傳的以圖片格式結尾的文件,然后更改其后綴名為對應服務器
可以解析的后綴名。
前端繞過比較簡單,一般的網站不會只在前端對文件后綴名進行驗證,所以不多加解釋。
二、(1)服務端的MIME檢測繞過
服務端MIME類型檢測也就是檢測Content-Type的內容。下面是一段測試模擬代碼:
<?php
if ($filetype =='image/jpg'|| $filetype=='image/gif' || $filename == 'image/jpeg' || $filetype == 'image/png'){
$path = 'uploads';
if (!file_exists($path)){
mkdir($path);
}
if (move_uploaded_file($filetmp, $path.'/'.$filename)){
echo "文件上傳成功".$path.'/'.$filename;
}else{
echo "文件上傳失敗";
}
}else{
echo "文件后綴不合法";
}
?>
繞過的辦法:
更改為Content-Type:image/gif
(2)服務端目錄路徑檢測
一般是檢測保存路徑是否合法,但一般都沒有防御。檢測跟path參數相關的內容。
繞過辦法:00截斷
通過抓包截斷將 xxx.php.jpg 換成 xxx.php_jpg(下划線為0x00)。在上
傳文件時系統文件遇到0x00。會認為文件已經結束。從而將xxx.php.jpg的內
容寫入到xxx.php
還可以使用抓包軟件的 HEX 功能把php后面的 . 對應的2E 手動更改為00
(3)服務端文件名拓展檢測
基於黑名單檢測:
黑名單的安全性比白名單的安全性低很多,攻擊手法自然也比白名單多。一般有個專門的blacklist,里面包含常見的危險腳本文件。
繞過辦法:
1、文件名大小寫繞過(AsP, pHp等等)
2、黑白名單列表繞過(php、php2、php3、php5、phtml、asp、aspx、ascx、
ashx、cer、asa、jsp、jspx)cdx,
3、特殊文件名繞過
修改數據包里的文件名改為 test.php. 或者 test.asp_ (下划線是空格)由於
這種命名格式在windows系統里是不允許的。所以在繞過上傳之后windows系統
會自動去掉 點和空格。Unix/Linux系統沒有這個特性。
4、0x00截斷繞過
5、.htaccess文件攻擊(結合黑名單攻擊)
主要介紹第五種繞過辦法:
.htaccess文件攻擊
.htaccess文件攻擊即結合黑名單攻擊服務器的 .htaccess文件 。
通過move_uploaded_file函數把自己寫的 .htaccess文件覆蓋掉服務
器上的這樣就可以解析定義名單了。
.htaccess文件用處:
通過.htaccess文件調用php解釋器去解析一個文件名中只要包含
“haha”這個字符串的任意文件,無論你文件名是什么樣子,只要包
含”haha”這個字符串,都可以被以php的方式來解析。
.htaccess文件內容:
<FilesMatch “haha”>
SetHandler application/x-httpd-php
</FilesMatch>
(4)服務端文件內容拓展檢測
如果服務器對上傳的文件進行了文件內容檢測就只能上傳圖片了,但是可以利用圖片和腳本文件制作一個圖片馬
如 1.gif 和2.txt 前面的圖片盡量要簡單,不然容易干擾制作后的文件內容解析,后面的文檔是需要執行的腳本文件
利用命令窗口:copy /b 1.gif + 2.txt = new.php
這樣就制作出來了一個圖片馬,再利用上面的方法繞過文件擴展名檢測
三、Apache解析漏洞
test.php.aaa.bbb.ccc任意不屬於黑名單且不屬於Apache解析白名單
之內的后綴名。(當apache和php以module方式結合的時候)
一個文件名為test.php.aaa.bbb.ccc的文件,Apache會從ccc的位置往
php的位置開始嘗試解析 ,如果ccc不屬於Apache能解析的后綴名,那么
Apache就會嘗試去解析bbb,這樣一直往前嘗試,直到遇到一個能解析的
拓展名為止
所以可以對要上傳的文件添加無用擴展名如xxx.php -->xxx.php.gashgas
IIS 解析漏洞
• dir.asp/任意文件名
• test.asp;任意文件名
• 任意文件名/任意文件名.php muma.jpg/111.php
IIS6.0 在解析 asp 格式的時候有兩個解析漏洞.
一個是如果目錄名以"
.asp 、.asa、.cer、.cdx
"字符串結尾,那么這個
目錄下所有的文件都會按照 asp 去解析。eg: “test.asp/1.jpg”
另一個是只要文件名中含有"
.asp;、.asa;、.cer;、.cdx;會優先按 asp
來解析 eg:
“1.asp;.jpg”
IIS7.0/7.5是對php解析時有一個類似於Nginx的解析漏洞, 對任意文件
名只要在URL后面追加上字符串"/任意文件名.php
"
,就會按照 php 的方式
去解析
eg:”http://www.target.com/upload/1.jpg/1adf.php”
總結
路徑/拓展名檢繞過
• 黑名單繞過
• 文件名大小寫繞過
• 名單列表繞過
• 特殊文件名繞過
• 0x00截斷繞過
•
.htaccess文件攻擊
• Apache解析漏洞
• IIS解析漏洞
• Nginx解析漏洞
• 白名單繞過
• 文件名后綴0x00截斷繞過
• PHP文件包含漏洞
• IIS解析漏洞
• Nginx解析漏洞