?

Feb 02 2013

針對各種形式的文件上傳漏洞總結

首頁 » 滲透測試 » 針對各種形式的文件上傳漏洞總結   

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的話就嘗試php2、.php3、.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.二次上傳漏洞,最新的上傳漏洞方法,主要是利用邏輯漏洞,比如無懼無組件上傳代碼:

 

  1. view sourceprint?1 fileExt=lcase(Mid(ofile.filename,InStrRev(ofile.filename,".")+1))   
  2.  
  3.  arrUpFileType=split(UpFileType,"|")'獲得允許上傳的所有文件擴展名   
  4.  
  5.  for i=0 to ubound(arrUpFileType)'判斷上傳的文件擴展名是否在允許的范圍內   
  6.  
  7.  if fileEXT=trim(arrUpFileType(i)) then   
  8.  
  9.  EnableUpload=true   
  10.  
  11.  exit for   
  12.  
  13.  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上傳。如果有驗證文件后綴,也可以結合以上方法繞過文件的后綴驗證。
 

正文部分到此結束

文章標簽: 上傳漏洞總結

版權聲明:若無特殊注明,本文皆為( mOon )原創,轉載請保留文章出處。

也許喜歡: «簡單實現webshell root | linux下configure命令詳細介紹»

已有1條評論

匿名

2015-05-02 12:06 沙發
不錯溫習了呵呵而后
?
?
河北11选5开奖