文字檔案上傳漏洞[任意.繞過.解析]

五木徒羚發表於2019-08-04

首先我們來普及一下幾個知識點,嘿嘿!!

  • 什麼是檔案上傳漏洞?

檔案上傳漏洞是指由於程式設計師在對使用者檔案上傳部分的控制不足或者處理缺陷,而導致的使用者可以越過其本身許可權向伺服器上上傳可執行的動態指令碼檔案。這裡上傳的檔案可以是木馬,病毒,惡意指令碼或者WebShell等。這種攻擊方式是最為直接和有效的,“檔案上傳”本身沒有問題,有問題的是檔案上傳後,伺服器怎麼處理、解釋檔案。如果伺服器的處理邏輯做的不夠安全,則會導致嚴重的後果。

  • webshell

百度百科:

webshell就是以aspphp、jsp或者cgi等網頁檔案形式存在的一種命令執行環境,也可以將其稱做為一種網頁後門。黑客在入侵了一個網站後,通常會將asp或php後門檔案與網站伺服器WEB目錄下正常的網頁檔案混在一起,然後就可以使用瀏覽器來訪問asp或者php後門,得到一個命令執行環境,以達到控制網站伺服器的目的。
顧名思義,“web”的含義是顯然需要伺服器開放web服務,“shell”的含義是取得對伺服器某種程度上操作許可權。webshell常常被稱為入侵者通過網站埠對網站伺服器的某種程度上操作的許可權。由於webshell其大多是以動態指令碼的形式出現,也有人稱之為網站的後門工具。
 
  • 危害:
檔案上傳(File Upload)是大部分web應用都具備的功能,如:使用者上傳的附件、修改頭像、分享圖片/視訊等正常的檔案一般是文件、圖片、視訊等,web應用收集之後放入後臺儲存,需要的時候呼叫出來返回如果惡意的檔案如PHP、ASP等執行檔案繞過web應用,並順利執行,則相當於黑客直接拿到webshell一旦黑客拿到webshell,則可以拿到web應用的資料,刪除web檔案,本地提權,進一步拿下整個伺服器甚至內網SQL隱碼攻擊的物件是資料庫服務,檔案上傳漏洞主要攻擊web服務,實際滲透兩種相結合,達到對目標的深度控制
 
  • 任意檔案上傳

直接上傳木馬 ok

  • 繞過驗證機制檔案上傳

繞過方法:
1.抓包改包(MIME修改繞過)

2.檔案字尾名大小寫繞過

3.檔案內容繞過

4.JavaScript繞過

  • 解析漏洞檔案上傳

1.Nginx解析漏洞
我們有一張圖片:http://ap.test.com:8080/1.jpg
而當我們正常訪問,nginx會把這個當作非指令碼語言直接讀取傳送回客戶端(也就是瀏覽器),但是存在解析漏洞的nginx會把如下連線解析並且執行~:
1. http://ap.test.com:8080/1.jpg/1.php
2. http://ap.test.com:8080/1.jpg%00.php

漏洞影響範圍:nginx 0.7.65以下(0.5.*, 0.6.*, 0.7.* )全版本系列和0.8.37(0.8.*)以下8系列受影響。

 

2.IIS解析漏洞
① 版本:iis5.*/6.0
漏洞資訊:
1.目錄解析
網站目錄有一個名字為1.asp(其他的asp副檔名也可以),目錄裡有一個1.jpg 內容為asp程式碼。
訪問:http://ap.test.com/1.asp/1.jpg 會被當成正常asp檔案執行

2.檔名解析
在IIS6.0下,分號後面的不被解析,也就是說mst.asp;.jpg會被伺服器看成是mst.asp,還有IIS6.0 預設的可執行檔案除了asp還包含這三種:/.asa/.cer/.cdx
② 版本:iis7.0/7.5
漏洞資訊:
畸形解析漏洞,上傳一個名字為mst.jpg,內容為:一句話程式碼的檔案,然後訪問mst.jpg/1.php,就可以連線 。同Nginx解析1

 

3.Apache解析漏洞:
Apache 是從右到左開始判斷解析,如果為不可識別解析,就再往左判斷。
比如 mst.php.owf.rar “.owf”和”.rar” 這兩種字尾是apache不可識別解析,apache就會把mst.php.owf.rar解析成php。
如何判斷是不是合法的字尾就是這個漏洞的利用關鍵
測試時可以嘗試上傳一個mst.php.rara.jpg.png…(把你知道的常見字尾都寫上…)去測試是否是合法字尾

 

4.其他解析漏洞:
在windows環境下,xx.jpg[空格] 或xx.jpg. 這兩類檔案都是不允許存在的,若這樣命名,windows會預設除去空格或點,黑客可以通過抓包,在檔名後加一個空格或者點繞過黑名單.若上傳成功,空格和點都會被windows自動消除,這樣也可以getshell。如果在Apache中.htaccess可被執行,且可被上傳,那可以嘗試在.htaccess中寫入:
<FilesMatch "mst.jpg"> SetHandler application/x-httpd-php
</FilesMatch>
然後再上傳mst.jpg的木馬, 這樣mst.jpg就可解析為php檔案

檔案上傳黑名單旁路技術

Windows IIS伺服器黑名單檔案上載旁路:

1.在黑名單副檔名後上傳帶有分號的檔案,例如: shell.asp;.jpg
2.上傳副檔名為.asp的目錄,然後使用允許的副檔名命名目錄中的指令碼,例如: folder.asp\file.txt
3.通過IIS提供PHP時< > and .轉換回來? * .
4.使用可替換檔案的字元,示例>>可以替換web.config
5.嘗試在字元後使用空格或點,例如: foo.asp..... .. . . .
6.file.asax:.jpg
7.通過在檔名中上載帶有禁用字元的檔案來嘗試在錯誤訊息中披露資訊,例如: | %< * ? "

Apache Windows黑名單旁路:

1.Windows 8.3功能允許短名稱替換現有檔案,例如:web.config可以替換為web~config.con或.htaccess可以替換為HTACCE~1
2.嘗試上傳。檔案,如果上傳函式root是/www/uploads/它將在上面的目錄中建立一個名為uploads的檔案。

 

一般黑名單旁路:

1.確定要過濾的字元 - 使用burp intruder評估帶有元字元列表的插入點
2.確保您的列表中包含常見的檔案型別的副檔名,例如.php5,.php3,.phtml
3.測試保護機制中的缺陷,如果剝離檔名可能會被濫用嗎?示例:shell.p.phpp如果應用程式剝離.php,它可以將副檔名重新命名為.php
4.%00在檔名中的不同位置嘗試一個空位元組,例如:shell.php%00.jpg,shell.php%0delete0.jpg- 觀察應用程式的響應方式
5.雙重擴充套件:如果應用程式正在剝離或重新命名副檔名 - 如果你給它兩個副檔名怎麼辦?示例:shell.php.php或4shell.txt.jpg.png.asp
6.嘗試使用長檔名,例如supermassivelongfileeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeename.php應用與長檔名一起使用的其他過濾器旁路技術
7.試試吧test.asp\,test.asp.\
8.你可以上傳flash XSS有效載荷,命名為.jpg
9.嘗試使用以前的技術,但請使用PDF或Silverlight
10.同樣但嘗試濫用crossdomain.xml或clientaccesspolicy.xml檔案
11.嘗試使用編碼繞過黑名單過濾器,嘗試URL,HTML,Unicode和雙重編碼
12.結合所有上述旁路技術
13.嘗試使用替代HTTP Verb,嘗試使用POST而不是PUT或GET(反之亦然),您可以使用Burp Intruder和HTTP Verbs有效負載列表列舉選項
14.此外,確保所有輸入點都針對各種輸入驗證失敗進行模糊測試,例如XSS,命令注入,XPath,SQLi,LDAPi,SSJI

 


繞過檔案上傳白名單

1.列舉白名單並測試任何可能被濫用的允許副檔名
2.正在驗證測試檔案內容
3.測試擴充套件重新命名技術shell.php.png是不可能的

 

 

相關文章