天天看點

檔案上傳漏洞原理和繞過方式

一.檔案上傳漏洞原理

網站Web應用都有一些檔案上傳功能,比如文檔、圖檔、頭像、視訊上傳,當上傳功能的實作代碼沒有嚴格校驗上傳檔案的字尾和檔案類型,此時攻擊者就可以上傳一個webshell到一個Web可通路的目錄上,并将惡意檔案傳遞給如PHP解釋器去執行,之後就可以在伺服器上執行惡意代碼,進行資料庫執行、伺服器檔案管理,伺服器指令執行等惡意操作。還有一部分是攻擊者通過Web伺服器的解析漏洞來突破Web應用程式的防護。

二.檔案上傳繞過方式

1.用戶端JavaScript檢查

用戶端檢測一般隻是在JavaScript代碼中加入了對擴充名的黑白名單檢查,這種方式隻能防止一些普通使用者上傳錯誤,隻要用Burpsuite在檔案上傳時進行截斷改檔案字尾名就可繞過。

2.服務端檢測

A.MIME類型的檢查

就是檢查Content-Type的值,MIME類型決定了某種擴充名用什麼應用程式打開,GIF的MIME值為image/gif。

B.檔案擴充名檢查

與前端js字尾名檢測類似,隻不過是在後端進行檢查,有時候還可以配合解析漏洞結合目錄路徑攻擊,例如test.asp/test.jpg。後端字尾名檢查也分兩種,黑名單與白名單。

黑名單檢查繞過:

  • 檔案名大小寫繞過,例代碼中有php規則,那麼可以使用PHP或pHP繞過。
  • 黑名單清單繞過,對黑名單清單中沒有的擴充名進行攻擊,比如asa、cer等。
  • 利用windows和Linux系統的特性進行特殊檔案名繞過,a.asp. a.asp_等。
  • htaccess 檔案攻擊。
  • 配合解析漏洞(IIS、Apache等)。

白名單繞過:

  • 截斷攻擊,比如a.asp%00.gif等。
  • 配合解析漏洞。

C.目錄路徑的檢查

對目錄路徑可進行0x00截斷繞過;以及可以控制目錄位址,上傳檔案夾的參數可控)

D.檢測檔案内容是否包含惡意代碼

這種方式主要檢查圖檔檔案的幻數,比如GIF的值為GIF89a,後端代碼會檢測改值判斷是否為GIF圖檔檔案,想要繞過隻要在幻數後面加上一句話木馬就行。

F.解析漏洞

F-1 IIS解析漏洞

IIS6.0在解析檔案時存在以下兩個解析漏洞:

  • 當建立*.asa、*.asp格式的檔案夾時,其目錄下的任意檔案都将被IIS伺服器當作asp檔案來解析。
  • 在IIS6.0下,分号後面的擴充名不會被解析,也就是說當檔案名為 *.asp;.jpg時,IIS6.0同樣會以ASP腳本來執行。

F-2 Apache解析漏洞

在Apache 1.x和Apache 2.x中存在解析漏洞,但他們與IIS解析漏洞不同。

Apache在解析檔案時有一個規則:當碰到不認識的擴充名時,将會從後向前解析,直到碰到認識的擴充名位置,如果都不認識,則會暴露其源碼,比如檔案名為php.rar.xx.aa時Apache首先會解析aa擴充名,如果不認識則接着解析xx擴充名,這樣一直周遊到認識的擴充名為止,然後再将其進行解析。

F-3 PHP CGI解析漏洞

在PHP的配置檔案中有一個關鍵的選項:cgi.fi: x_pathinfo,這個選項在某些版本是預設開啟的,在開啟時通路url,比如:http://www.xxx.com/x.txt/x.php,其中x.php是不存在的檔案,是以php将會向前遞歸解析,于是就造成了解析漏洞。由于這種漏洞常見于IIS7.0、IIS7.5、Nginx等Web伺服器,是以經常會被誤認為是這些Web伺服器的解析漏洞。

F-4 Nginx<8.03空位元組代碼執行漏洞

影響版本 :0.5,0.6,0.7<=0.7.65 0.8<=0.8.37

Nginx在圖檔中嵌入PHP代碼,然後通過通路xxx.jpg%00.php可以執行其中的代碼。

F-5 其他

在Windows環境下,xx.jpg[空格]或xx.jpg.這兩類檔案都是不允許存在的,若這樣命名Windows會預設除去空格或點,攻擊者可以通過抓包在檔案名後加一個空格或者點繞過黑名單。若上傳成功,空格和點都會被Windows自動消除,這樣也可以getshell。

如果在Apache中配置檔案.htaccess可被執行且可被上傳,那可以嘗試在.htaccess中寫入:SetHandlerapplication/x-httpd-php,然後再上傳名稱為shell.jpg的webshell,這樣shell.jpg就可解析為php檔案。

繼續閱讀