文件上傳漏洞詳解


介紹

文件上傳漏洞是指由於開發人員未對上傳的文件進行嚴格的驗證和過濾,而導致的用戶可以越過其本身權限向服務器上傳可執行的動態腳本文件。這里上傳的文件可以是木馬,病毒,惡意腳本或者WebShell等。這種攻擊方式是最為直接和有效的,“文件上傳”本身沒有問題,有問題的是文件上傳后,服務器怎么處理文件。如果服務器的處理邏輯做的不夠安全,則會導致嚴重的后果。

漏洞產生的原因

  • 對於上傳文件的后綴名(擴展名)沒有做較為嚴格的限制
  • 對於上傳文件的MIMETYPE(用於描述文件的類型的一種表述方法) 沒有做檢查
  • 權限上沒有對於上傳的文件目錄設置不可執行權限,(尤其是對於shebang類型的文件)
  • 對於web server,對於上傳文件或者指定目錄的行為沒有做限制

漏洞需要的前提條件

  • 能上傳木馬
  • 上傳的木馬能夠被執行
  • 清楚上傳之后的路徑

上傳漏洞點基本流程

  1. 圖片是否能正常上傳
  2. 圖片上傳內容是否被感染(內容替換)
  3. 上傳的域名是否是目標服務器(如果不是,判斷圖片服務器是否解析 php、asp、aspx、jsp、cfm、shtml等)
  4. 上傳的目錄是否支持解析php、asp、aspx、jsp、pht、phtml等
  5. 判斷黑白名單驗證

文件上傳利用方式

1、准備一句話木馬

2、上傳至服務器

3、使用蟻劍鏈接webshell

4、成功拿到服務器shell

文件上傳校驗姿勢

客戶端

  • JavaScript校驗(一般只校驗后綴名)

服務端

  • 文件頭content-type字段(image/gif)
  • 文件內容頭校驗(GIF89a)
  • 后綴名黑名單校驗
  • 后綴名白名單校驗
  • 自定義正則校驗
  • WAF設備校驗(根據不同的WAF產品而定)

文件上傳繞過姿勢

客戶端繞過

可以利用burp抓包改包,先上傳一個jpg類型的木馬,然后通過burp將其改為asp/php/jsp后綴名即可。

1、jpg文件內容寫入一句話木馬

2、更改后綴名,改為php

3、上傳成功之后,使用蟻劍鏈接webshell

服務端繞過

文件類型繞過

通過抓包,將content-type字段改為image/gif

文件頭繞過

在木馬內容基礎上再加一些文件信息

文件后綴名繞過

前提:黑名單校驗

黑名單檢測:一般有個專門的blacklist文件,里面會包含常見的危險腳本文件

配合文件包含漏洞

前提:校驗規則只校驗當文件后綴名為asp/php/jsp的文件內容是否為木馬

繞過方式:

先上傳一個內容為木馬的txt后綴文件,因為后綴名的關系沒有檢驗內容

然后再上傳一個.php的文件,內容為<?php Include("上傳的txt文件路徑");?>,此時,這個php文件就會去引用txt文件的內容,從而繞過校驗

配合操作系統文件命名規則

上傳不符合Windows文件命名規則的文件名

a.asp.

a.asp(空格)

a.php:1.jpg

a.php::$DATA

a.php::$DATA

會被Windows系統自動去掉不符合規則符號后面的內容

CMS、編輯器漏洞

CMS漏洞:比如說JCMS等存在的漏洞,可以針對不同CMS存在的上傳漏洞進行繞過

編輯器漏洞:比如說FCK,ewebeditor等,可以針對編輯器的漏洞進行繞過

配合其他規則

1、0x00截斷:基於一個組合邏輯漏洞造成的,通常存在於構造上傳文件路徑的時候,路徑/uploads/1.php(0x00),文件名1.jpg,結合/uploads/1.php(0x00)/1.jpg

2、.htaccess

上傳當前目錄的.htceecss文件,內容為:AddType application/x-http-php.jpg(上傳的jpg均以php執行)

另一種寫法

<FileMatch "shell.jpg">

 SetHandler application/x-http-php

</FileMatch>

把.htaccess上傳后,且上傳成功后,再上傳內容為一句話的jpg文件,會把jpg文件解析成php文件

其余配置問題導致漏洞

1、如果在Apache的conf里有這樣一行配置AddHandlerphp5-script.php這時只要文件名包含.php,即使文件名是a.php.jpg也會以php來執行

2、如果在Apache的conf里有這樣一行配置AddType application/x-http-php.jpg即使擴展名是jpg,一樣能以php來執行。

服務器解析漏洞

IIS解析漏洞

使用iis5.x-6.x版本的服務器,大多為Windows server 2003,網站比較古老,開發語言一般為asp;該解析漏洞也只解析asp文件,而不能解析aspx文件。

形式:www.abc.com/xx.asp/xx.jpg

原理:服務器默認把xx.asp目錄下的文件都解析成asp文件

文件解析

形式:www.abc.com/xx.asp;.jpg

原理:服務器默認不解析;號后面的內容,因此xx.asp;.jpg便被解析成asp文件

解析文件類型

IIS6.0默認的可以執行文件除了asp還包括這三種:

/test.asa

/test.cer

/test.cdx

Apache解析漏洞

Apache解析文件的規則是從右向左以此判斷解析,如果后綴名為不可識別文件,就再往左判斷。比如:test.php.owf.rar,“.owf”和“.rar”這兩種后綴是Apache不可識別的,Apache就會解析成test.php

文件上傳漏洞的防御方式

1.文件上傳的目錄設置為不可執行

只要web容器無法解析該目錄下面的文件,即使攻擊者上傳了腳本文件,服務器本身也不會受到影響,因此這一點至關重要。

2.判斷文件類型

在判斷文件類型時,可以結合使用MIME Type、后綴檢查等方式。在文件類型檢查中,強烈推薦白名單方式,黑名單的方式已經無數次被證明是不可靠的。此外,對於圖片的處理,可以使用壓縮函數或者resize函數,在處理圖片的同時破壞圖片中可能包含的HTML代碼。

3.使用隨機數改寫文件名和文件路徑

文件上傳如果要執行代碼,則需要用戶能夠訪問到這個文件。在某些環境中,用戶能上傳,但不能訪問。如果應用了隨機數改寫了文件名和路徑,將極大地增加攻擊的成本。再來就是像shell.php.rar.rar和crossdomain.xml這種文件,都將因為重命名而無法攻擊。

4.單獨設置文件服務器的域名

由於瀏覽器同源策略的關系,一系列客戶端攻擊將失效,比如上傳crossdomain.xml、上傳包含Javascript的XSS利用等問題將得到解決。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM