文本文件上傳漏洞[任意.繞過.解析]

  • 2019 年 10 月 3 日
  • 筆記

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

  • 什麼是文件上傳漏洞?

文件上傳漏洞是指由於程式設計師在對用戶文件上傳部分的控制不足或者處理缺陷,而導致的用戶可以越過其本身許可權向伺服器上上傳可執行的動態腳本文件。這裡上傳的文件可以是木馬,病毒,惡意腳本或者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.aspfile.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是不可能的