WEB安全:文件上傳漏洞

文件上傳漏洞過程javascript

  用戶上傳了一個可執行的腳本文件,並經過此腳本文件得到了執行服務器端命令的能力。php

通常的狀況有:html

  1. 上傳文件WEB腳本語言,服務器的WEB容器解釋並執行了用戶上傳的腳本,致使代碼執行;
  2. 上傳文件FLASH策略文件crossdomain.xml,以此來控制Flash在該域下的行爲;
  3. 上傳文件是病毒、木馬文件,攻擊者用以誘騙用戶或管理員下載執行;
  4. 上傳文件是釣魚圖片或爲包含了腳本的圖片,某些瀏覽器會做爲腳本執行,實施釣魚或欺詐;

上傳漏洞須要具有如下幾個條件:
java

  1. 上傳的文件具有可執行性或可以影響服務器行爲,因此文件後所在的目錄必須在WEB容器覆蓋的路徑以內;
  2. 用戶能夠從WEB上訪問這個文件,從而使得WEB容器解釋執行該文件;
  3. 上傳後的文件必須通過安全檢查,不會被格式化、壓縮等處理改變其內容;

常見,繞過文件上傳檢查功能web

    常見的文件上傳檢查針對文件類型進行,攻擊者可使用手動修改POST包而後添加%00字節用於截斷某些函數對文件名的判斷。如xxx.php[\0].JPG,對於一個只容許上傳JPG格式的服務器,此文件能夠繞過文件上傳檢查,可是對於服務器端解釋來講,函數會被[\0]截斷,致使成爲xxx.php代碼。除了修改文件名來繞過類型檢查外,還能夠修改文件頭來僞造文件頭,欺騙文件上傳檢查。sql

如何安全上傳文件shell


   
  針對文件上傳漏洞的特色和必須具有的三個條件,咱們阻斷任何一個條件就能夠達到組織文件上傳攻擊的目的:
  1. 最有效的,將文件上傳目錄直接設置爲不可執行,對於Linux而言,撤銷其目錄的'x'權限;實際中不少大型網站的上傳應用都會放置在獨立的存儲上做爲靜態文件處理,一是方便使用緩存加速下降能耗,二是杜絕了腳本執行的可能性;
  2. 文件類型檢查:強烈推薦白名單方式,結合MIME Type、後綴檢查等方式;此外對於圖片的處理可使用壓縮函數或resize函數,處理圖片的同時破壞其包含的HTML代碼;
  3.  使用隨機數改寫文件名和文件路徑,使得用戶不能輕易訪問本身上傳的文件;
  4. 單獨設置文件服務器的域名;

各類形式的文件上傳漏洞總結apache

1.在很早之前,不少上傳文件過濾是用的是javascript,因此改一下javascript或直接nc發包就好了。有的是判斷後綴,有的只是判斷id,好比:瀏覽器

「uploadfile」 style=」file」 size=」uploadfile」 runat=
「lbtnUpload」 runat=
「JavaScript」>

只是簡單的對ID進行驗證,只要構造javascript:lbtnUpload.click();知足條件達到上傳木馬的效果。成功之後查看源代碼緩存

a 「lbtnUpload」 「javascript:__doPostBack(‘lbtnUpload’,」)」script ‘javascript’

2.IIS6的目錄解析問題如/a.aspx/a.jpg,在某些特殊狀況下會應用到,在很早的時候由我同事1982發現的。

3.某些上傳文件的被動過濾有缺陷,有的只過濾asp,卻忘了.asa、.cdx、cer等等,php的話就嘗試php二、.php三、.php4 等等,相關實例有動力文章(Powereasy),具體參考http://www.sebug.net/vulndb/4326/

4.結束符%00截斷最後的後綴,最先是老外發現,當時很是流行,主流bbs程序都有此漏洞,好比dvbbs就存在此漏洞,很是經典!

5.iis的文件名解析漏洞,好比a.asp;.gif,分號自己以及後面的都會被系統忽略,國人kevin1986發現的,很是經典!

6.apache文件名解析漏洞,好比a.php.gif或a.php.aaa,最先看到國內的superhei先提出的。不過在新版 apache/php給補了。

7.二次上傳漏洞,最新的上傳漏洞方法,主要是利用邏輯漏洞,好比無懼無組件上傳代碼:

view sourceprint?1 fileExt=lcase(Mid(ofile.filename,InStrRev(ofile.filename,".")+1))   
 
 arrUpFileType=split(UpFileType,"|")'得到容許上傳的全部文件擴展名   
 
 for i=0 to ubound(arrUpFileType)'判斷上傳的文件擴展名是否在容許的範圍內   
 
 if fileEXT=trim(arrUpFileType(i)) then   
 
 EnableUpload=true   
 
 exit for   
 
 end if   

這裏的EnableUpload只驗證了一次就變爲了true,第一次上傳合法文件使其變爲true,第二次再上傳webshell,利用這個漏洞須要上傳組件支持一次多文件上傳。

有此類邏輯漏洞的不在少數,好比fckeditor最新版中,因爲Fckeditor對第一次上傳123.asp;123.jpg 這樣的格式作了過濾。也就是IIS6解析漏洞。
上傳第一次,被過濾爲 123_asp;123.jpg 從而沒法運行。可是第2次上傳同名文件123.asp;123.jpg後。由 於」123_asp;123.jpg」已經存在。
文件名被命名爲123.asp;123(1).jpg 123.asp;123(2).jpg這樣的編號方式。其餘的還有fckeditor 2.4 提交1.php再提交1.php+空格,詳見http://superhei.blogbus.com/logs/4603932.html 《又見fckeditor》superhei一文。

8.關鍵字一次性替換,好比有的後臺增長.asa上傳類型asa被過濾替換爲空字符,但用.asasaa被過濾其中的asa剩下.asa就繞過了, 好比還有科訊Kesion CMS,漏洞在http://localhost/User/UpFileSave.asp?user_upfile.asp,文件名最後保證 是.asachr0.jpg或者.cerchr0.jpg就好了。

9.上傳程序存在sql注入。好比fckeditor 2.1.6就能夠經過sql注入增長一個.asp上傳類型。還有PunBB pun_attachment上傳附件擴展sql注射漏洞,詳見http://sebug.net/vulndb/12538/。

10.小數點或空格被忽視,這個也是利用了win系統特性了,好比a.asp.和a.asp空格、a.php.

11.超長文件名截斷文件後綴,各系統版本的超長文件名長度可能各不相同,最多見的是應用在本地包含漏洞方面,因爲php新版過濾了%00,因此用 a.php?files=../../../../../../../../../etc/passwd…………………………………(N個 點).html,推薦用.和/或空格來試。在win下:

echo aaaa>a.asp若干個空格.gif

dir a.asp

2010-03-15 17:41 2,852 a.asp

12.只校驗了文件頭和文件完整性

有的上傳程序校驗文件頭,並只容許上傳圖片文件類型且驗證圖片文件完整性(僅僞造文件頭仍是不行),但沒有驗證文件後綴,也沒有強制更改上傳文件的 後綴。咱們能夠新建一個幾kb大小之內的jpg圖片文件(顏色填充),而後用ue以十六進制打開文件,在文件內容末尾加些空格後再加上一句話木馬< ?fputs(fopen("c.php","w"),"「)?>存爲 aaa.php上傳。若是有驗證文件後綴,也能夠結合以上方法繞過文件的後綴驗證。

相關文章
相關標籤/搜索