常見的文件上傳繞過和文件解析漏洞

常見的文件上傳繞過漏洞有
    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解析漏洞

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章