天天看點

檔案上傳漏洞繞過姿勢檔案上傳漏洞0x001 針對前端檢測繞過0x002 針對後端檢測繞過

檔案上傳漏洞

檔案上傳漏洞是指由于程式員在對使用者檔案上傳部分的控制不足或者處理缺陷,而導緻的使用者可以越過其本身權限向伺服器上上傳可執行的動态腳本檔案。這裡上傳的檔案可以是木馬,病毒,惡意腳本或者WebShell等。這種攻擊方式是最為直接和有效的,“檔案上傳”本身沒有問題,有問題的是檔案上傳後,伺服器怎麼處理、解釋檔案。如果伺服器的處理邏輯做的不夠安全,則會導緻嚴重的後果。 檔案上傳漏洞本身就是一個危害巨大的漏洞,WebShell更是将這種漏洞的利用無限擴大。大多數的上傳漏洞被利用後攻擊者都會留下WebShell以友善後續進入系統。攻擊者在受影響系統放置或者插入WebShell後,可通過該WebShell更輕松,更隐蔽的在服務中為所欲為。

一般找到網站的上傳點後,都可以給他傳個大馬或小馬啥的。但多半是有防護措施的。是以,姿勢就有了。

0x001 針對前端檢測繞過

1.一般前端js會對上傳的字尾進行判斷,這時請求包還未到伺服器,僅是前端的用戶端進行檢驗。是以利用burpsuite 直接抓包修改檔案的字尾,如:上傳一個shell.jpg 然後修改為shell.php。即可繞過

2.既然時js檢測,那麼直接禁用js即可,使用火狐浏覽器的NoScript插件、IE中禁用掉JS等方式實作。

0x002 針對後端檢測繞過

檔案在被上傳到伺服器後,後端腳本也會對檔案類型進行校驗,如果上傳的檔案擴充名不符合黑白名單的限制,則不予上傳,否則上傳成功。

1.檢查HTTP Header中的Content-Type:

HTTP協定規定了上傳資源的時候在Header中加上一項檔案的MIMETYPE,來識别檔案類型,這個動作是由浏覽器完成的,服務端可以檢查此類型不過這仍然是不安全的,因為HTTP header可以被發出者或者中間人任意的修改,不過加上一層防護也是可以有一定效果的

MIME:多用途網際網路郵件擴充類型,浏覽器通常使用MIME類型(而不是檔案擴充名)來确定如何處理文檔,每個MIME類型由兩部分組成,前面是資料的大類别,例如聲音audio、圖象image等,後面定義具體的種類。也就是通過MIME可以确認檔案的類型。

常見的MIME類型:

普通文本 .txt:text/plain

超文本标記語言文本 .html:text/html

GIF圖形 .gif:image/gif

JPEG圖形 .jpeg,.jpg:image/jpeg

如果,檔案上傳接口後端是通過校檢檔案的MIME類型,也可以通過抓包修改檔案的MIME類型進行繞過即可。

檔案上傳漏洞繞過姿勢檔案上傳漏洞0x001 針對前端檢測繞過0x002 針對後端檢測繞過

2.針對擴充名進行檢驗

一般都是采取黑或白名單的方式進行過濾,通常白名單的方式要比黑名單相對安全,黑名單的話我們可以通過各種騷辦法和思路繞過。一般都利用伺服器的解析漏洞來上傳

  • ①.老版本的IIS6中的目錄解析漏洞,如果網站目錄中有一個 /.asp/目錄,那麼此目錄下面的一切内容都會被當作asp腳本來解析
  • ②.老闆本的IIS6中的分号漏洞:IIS在解析檔案名的時候可能将分号後面的内容丢棄,那麼我們可以在上傳的時候給後面加入分号内容來避免黑名單過濾,如

    a.asp;jpg

  • ③.舊版Windows Server中存在空格和dot漏洞類似于 a.php. 和 a.php[空格]

    這樣的檔案名存儲後會被windows去掉點和空格,進而使得加上這兩個東西可以突破過濾,成功上傳,并且被當作php代碼來執行

  • ④.nginx(0.5.x, 0.6.x, 0.7 <= 0.7.65, 0.8 <= 0.8.37)空位元組漏洞

    xxx.jpg%00.php

    這樣的檔案名會被解析為php代碼運作(fastcgi會把這個檔案當php看,不受空位元組影響,但是檢查檔案字尾的那個功能會把空位元組後面的東西抛棄,是以識别為jpg)

    注:php版本要小于5.3.4,5.3.4及以上已經修複該問題

  • ⑤.apache1.x,2.x的解析漏洞,上傳如a.php.rar a.php.gif

    類型的檔案名,可以避免對于php檔案的過濾機制,但是由于apache在解析檔案名的時候是從右向左讀,如果遇到不能識别的擴充名則跳過,rar等擴充名是apache不能識别的,是以就會直接将類型識别為php,進而達到了注入php代碼的目的

  • ⑥.如果開發者忘記對檔案字尾名進行小寫轉換,那麼可通過大寫來進行繞過,如PhP。 字尾名中加入空格繞過黑名單限制,如1.php

    利用windows特性,會自動去掉字尾名中最後的”.”,那麼可在字尾名中加”.”進行繞過。

    如果開發者忘記對上傳檔案字尾名進行:: D A T A 處 理 , 利 用 w i n d o w s 的 N T F S 文 件 流 特 性 , 可 在 後 綴 名 中 加 ” : : DATA處理,利用windows的NTFS檔案流特性,可在字尾名中加” :: DATA處理,利用windows的NTFS檔案流特性,可在字尾名中加”::DATA”進行繞過。

3.分析檔案頭内容來檢查檔案類型

與方法2不同,還有一種檢查類型的方式是使用對于檔案内容的驗證機制,這種方法利用的是每一個特定類型的檔案都會有不太一樣的開頭或者标志位。

圖檔檔案通常有稱作幻數的頭位元組,我們來看一下幾種圖檔檔案的幻數:

(注意!下面是二進制而不是文本格式的資料)

JPG

FF D8 FF E0 00 10 4A 46 49 46

GIF

47 49 46 38 39 61

(相當于文本的GIF89a)

PNG

89 50 4E 47

一般圖檔馬就是利用伺服器檔案頭的檢驗來生成的

copy  /b  1.jpg+1.php  2.jpg
           

或者檔案幻術頭繞過

圖像相關的資訊檢測常用getimagesize( )函數。每種類型的圖檔内容最開頭會有一個标志性 的頭部,這個頭部被稱為檔案幻術。常用圖檔類型有以下幾類:

繞過jpg檔案幻術檢測要在檔案開頭寫上下圖的值

檔案上傳漏洞繞過姿勢檔案上傳漏洞0x001 針對前端檢測繞過0x002 針對後端檢測繞過

Value = FF D8 FF E0 00 10 4A 46 49 46

繞過png檔案幻術檢測要在檔案開頭寫上下圖的值:

檔案上傳漏洞繞過姿勢檔案上傳漏洞0x001 針對前端檢測繞過0x002 針對後端檢測繞過

Value = 89 50 4E 47

繞過gif檔案幻術檢測要在檔案開頭寫上下圖的值:

檔案上傳漏洞繞過姿勢檔案上傳漏洞0x001 針對前端檢測繞過0x002 針對後端檢測繞過

Value = 47 49 46 38 39 61

然後在利用伺服器的解析漏洞,讓伺服器把我們的jpg檔案解析成相應的後端腳本檔案如php,即可。

4.利用編輯器或者cms的上傳漏洞進行操作

編輯器:fck、Eeditor

cms: 明确了cms後,通過google搜尋cms漏洞 來進行操作

5.利用.htacess檔案

上傳目前目錄的.htaccess 檔案

例如内容為: AddType application/x-http-php .jpg (上傳的jpg 均以php執行)

把.htaccess 上傳後,且上傳成功後,再上傳内容為一句話的jpg檔案

6.針對上傳檔案大小

有對檔案大小進行了限制,如果不達到檔案大小的要求,則不能上傳,這種破解也很簡單,在上傳資料裡不斷填充垃圾資料或制作圖檔木馬進行繞過。

7.針對伺服器解析漏洞

檔案解析漏洞總結

繼續閱讀