大綱:文件解析漏洞
上傳本地驗證繞過
上傳服務器驗證繞過
文件解析漏洞
解析漏洞主要說的是一些特殊文件被IIS、Apache、Nginx在某些情況下解釋成腳本文件格式的漏洞。
IIS 5.x/6.0解析漏洞
一般是配合編輯器使用(CKFinder、fck這兩個編輯器是可以創建目錄的)
IIS6.0解析漏洞利用方法有兩種:
1、目錄解析
/xx.asp/xx.jpg
在網站下建立文件夾的名字為.asp、.asa的文件夾,啟母路內的任何擴展名的文件都會被IIS解析成asp文件來解析並執行。
例如創建目錄xx.asp,那么/xx.asp/1.jpg將會被當做一個asp文件來執行,假設hacker可以控制上傳文件夾的路徑,就可以不管你上傳后的文件改不改名字都可以得到shell
2、文件解析
前提是上傳后的文件名不被改變
xx.asp;.jpg (分號解析,分號前是一個文件,分號后是另一個文件)
第二種,在IIS6.0下,分號后面的不被解析,也就是說xx.asp;.jpg會被服務器看成是xx.asp,還有IIS6.0默認的是可執行文件除了asp還有以下三種:
/xx.asa
/xx.cer
/xx.cdx
Apache解析漏洞
Apache是從右到左開始判斷解析,如果為不可識別的解析,就在往左判斷(可以使用x.php.、x.php_)
比如xx.php.owf.rar,“.awf”和“.rar”這兩種后綴是Apache不可識別的解析,Apache就會把后綴上述的文件解析成php文件
如何判斷是不是合法的后綴就是這個漏洞的利用關鍵,測試時可以嘗試上傳一個xx.php.rar.jpg.png…….將所知的所有文件后綴名都列舉出來,去測試是不是合法的。任意不識別的后綴,逐級向上識別。
IIS7.0/IIS7.5/Nginx<8.03畸形解析漏洞
在默認的Fast-CGI開啟的狀況下,hacker上傳一個名字為x.jpg,內容是<?php fputs(fopen(‘shell.php’,’w’)’,<?php eval($_POST[cmd])?>’);?>的文件,然后訪問x.jpg/.php,在這個路徑下就會生成一句話木馬shell.php。
www.xx.com/logo.gif/*.php觸發漏洞,漏洞姐會把勤勉的文件當做php文件執行
x.asp00jieduan%jpg
a.asp.a;.x.aspx.jpg..jpg 第二種解析漏洞
或者直接上傳x.asp
IIS+PHP的都可以在圖片的后面=/.php,看是否可以以php執行,比如:a.jpg/.php
Nginx<8.03空字節代碼執行漏洞
影響版:0.5,0.6,0.7<=0.7.65,0.8<=0.8.37
Nginx在圖片中嵌入php代碼然后通過訪問x.jpg%00.php來執行其中的代碼(在URL中)
htaccess文件解析
如果在Apache中.htaccess可被執行,且可被上傳,納悶就可以嘗試在.htaccess中寫入:<FilesMatch “shell.jpg”>SetHandler application/x-https-php</FilesMatch>,然后在上傳shell.jpg的小馬,這樣shell.jpg就可以被解析為php文件。
上傳本地驗證繞過
上傳檢測流程概述:
通常一個文件以http協議進行上傳時,將以POST請求發送至Web服務器web服務器接收大請求后並同意,用戶與web服務器將建立連接並傳輸data
服務器命名規則
第一種類型:上傳文件名和服務器命名一致
第二種類型:上傳文件名和服務器命名不一致(隨機、時間戳、、)
常見的上傳檢測
1、客戶端JavaScript檢測(通常為檢測文件擴展名)(不多見)
2、服務端MIME類型檢測(檢測Content-Type內容)
3、服務端目錄路徑檢測(檢測跟path參數相關的內容)
4、服務端文件擴展名檢測(檢測跟文件extension相關的內容)(與黑名單白名單做匹配)
5、服務端文件內容檢測(檢測內容是否合法或含有惡意代碼)
客戶端檢測繞過(JavaScript檢測)
首先判斷JS本地驗證;通常可以根據他的驗證警告彈框的速度可以判斷,如果電腦的速度夠快,那么可以用burp抓包,在點擊提交的時候burp是沒有抓到包的,就已經單框了,說明這個就是本地js驗證。
繞過方法:
1、使用burp抓包改名
2、使用firebug直接刪除掉本地驗證的js代碼
3、添加js驗證的白名單
客戶端白名單繞過:修改允許上傳類型,在本地的HTML中
上傳服務器端驗證繞過
服務端檢測繞過(MIME類型檢測)
MIME的作用:是客戶端軟件,區分不同種類的數據,例如,web瀏覽器就是通過MIME類型來判斷問價是GIF圖片,還是可打印的postscript文件。
web服務器使用MIME來說明發送數據的種類,web客戶端使用MIME來說明希望接受到的數據種類。
Tomcat的安裝目錄\conf\web.xml中就是定義了膽量的MIME類型。
繞過方法:
直接使用burp抓包,得到post上傳數據后,將Content-Type:text/plain改為Content-Type/gif就可以成功繞過。
服務端檢測繞過(目錄路徑檢測)
目錄路徑檢測,一般就是檢測路徑是否合法,但稍微特殊一點的都沒有防御,比如比較新的fckeditor php<=2.6.4任意文件上傳傳漏洞,當POST如下的URL時;/fckeditor264/filemanager/connectors/php/connector.php?Command=FileUpload&Type=Image&CurrentFolder=fuck.php%00.gif HTTP/1.0
currentFolder這個變量的值就會傳到ServerMapFolder($resourceType,$folderPath,$sCommand)中的形參$folder里,而$folder在這個函數中並沒有任何檢測,就被CombinePaths()執行了。
修改文件上傳路徑
http://www.xx.com/tcnet/Admin_login.asp
filepath路徑修改繞過
可以突破自動命名規則xx.gif
一、改變文件上傳后的路徑
/a.asp/ 需要一定的權限
成功創建后
/a.asp/xx.gif
二、直接改變文件名稱
/a.asp;.
修改后為
/a.asp;.xx.gif
服務端檢測繞過(文件擴展名檢測)
黑名單檢測
黑名單的安全性比白名單的安全性低很多,攻擊手法自然也比白名單多,一般有專門的blacklist文件,里面會包含常見的危險腳本文件,例如fckeditor2.4.3或之前版本的黑名單。
白名單檢測
白名單相對來說比黑名單安全一些,但也並不是說就是絕對安全的。
繞過黑名單
1、文件名大小寫繞過
用像Asp、pHp之類的文件名進行繞過檢測。
2、名單列表繞過
用黑名單里沒有的名單進行攻擊,比如黑名單里沒有的asa或cer、、、
3、特殊文件名繞過
比如發送的http包里把文件名改成test.asp.或.asp_(下划線就是空格),這種的命令方式在Windows系統里是不被允許的,所有需要在burp里面進行修改,然后繞過驗證后,會被Windows自動去除后面的點和空格,但要注意的是Unix/Linux系統沒有這個特性。
4、0x00截斷繞過
在擴展名檢測中,在asp的程序中有這種漏洞,各個簡單的偽代碼
name=getname(http request)//加入這個時候獲取到的文件名是test.asp.jpg(asp后面為0x00)
type=gettype(name)//而在gettype()函數里處理方式是從后往前掃描擴展名,所以判斷為jpg
if(type=jpg)
5、.htaccess文件攻擊配合名單列表繞過
上傳一個自定義的.htaccess,就可以輕松繞過各種文件檢測。
6、解析調用漏洞
繞過這類漏洞直接配合上傳一個代碼注入過的非法黑名單即可,再利用解析調用漏洞。
繞過白名單
1、0x00截斷繞過
用像test.asp%00.jpg的方式進行截斷,屬於白名單的文件,再利用服務端代碼檢測邏輯漏洞進行攻擊,目前在asp的程序中存在這種漏洞。
2、解析調用漏洞繞過
繞過這類漏洞直接配合上傳一個代碼注入過的非法黑名單即可,再利用解析調用漏洞。
3、.htaccess文件攻擊
通過一個.htaccess文件調用php的解析器去解析一個文件名中只要包含“haha”這個字符串中的任意文件,所以無論文件名是什么樣子,只要包含“haha”這個字符串都可以被以php的方式來解析,一個自定義的.htaccess文件就可以以各種各樣的方式去繞過很多上傳驗證機制,建一個.htaccess文件,里面的內容如下:
<FilesMatch “haha”>
SetHandler application/x-httpd-php
</FilesMath>
同目錄有個我們上傳一個只有文件名並包含“haha”,但是去污任何擴展名的文件里面的內容就是php的一句話木馬
雙文件上傳
南方、良精、動易、、、
抓包,將文件內容在復制一遍,改一下復制后的文件名稱防止重復,GO以下
服務端檢測繞過(文件內容檢測)
如果文件內容檢測設置的比較嚴格,那么上傳攻擊將變得非常困難,也可以說他是代碼層檢測的最后一關,如果他被突破了,九歲沒有代碼層漏洞也可以給后面的利用應用層的解析漏洞帶來機會。
繞過檢測文件頭
主要是檢測文件的內容開始處的文件頭,比如圖片類型的文件頭如下,要繞過jpg文件頭檢測就要在文件開頭寫上以下的值:
value=FF D8 FF E0 00 10 4A 46 49 46
要繞過GIF文件頭檢測就要在文件頭寫上下面的值
value=47 49 46 38 39 61
要繞過png文件頭檢測就要在文件開頭加上下面的值
value=89 50 4E 47
然后在文件頭的后面加上自己的一句話木馬就可以了。
文件相關信息檢測
圖像文件相關信息檢測常用的是getimagesize()函數,只需要把文件頭部分偽造好就ok了,就是在頭部的基礎上還加了一些文件信息:
GIF89a
(…some bingary data for image..)<?php phpinfo();?>
(…skipping the rest of binary data..)
這是最終形態的檢測,一般是條用API或函數去進行文件加載檢測,常見的是圖像渲染測試,在變態點的甚至進行二次渲染,對渲染加載測試的攻擊方式是代碼注入繞過,對二次渲染的攻擊方式是攻擊文件加載器自身。
對渲染加載測試攻擊注入:可以用圖像處理軟件對一張圖片進行代碼注入,用winhex看數據可以分析出這類工具的與阿尼是不在破壞文件本身的渲染情況下找一個空白區域進行填充代碼,一般會在文件的注釋去,對於渲染測試基本上都能繞過,畢竟文件本身是完整的。
繞過二次渲染(保留圖片的正常內容,去掉其他代碼)
通過上傳不完整的圖片讓其渲染函數暴露,然后進行攻擊。
第二種方法
對文件加載器進行溢出攻擊
表單提交按鈕
有時候掃出的上傳頁面,只存在瀏覽選項,條件按鈕沒有的,這時候就可以自己寫一個。
在HTML編輯中寫入以下的代碼:
<input type=”submint” value=”提交” name=”bb”>
然后上傳。
2019-05-11 15:17:45