目錄攻擊簡介
特點:利?簡單、危害?。
產(chǎn)?原因:缺少必要的校驗。
找?件上傳點(關(guān)鍵):管理后臺頁面、?戶后臺頁面、前臺頁面、?錄掃描 ==>掃描到后臺不需要登陸就能訪問的上傳頁面。
測試思維:根據(jù)已有信息、條件分析目標(biāo)網(wǎng)站架構(gòu),再以此架構(gòu)為基礎(chǔ)上傳圖片顯示缺少源文件地址,從我們已經(jīng)掌握的知識中過濾出適合此架構(gòu)的攻擊方法。
測試流程:先分析?標(biāo)架構(gòu)網(wǎng)站使?后端語?、中間件、?標(biāo)服務(wù)器類型、版本等,之后根據(jù)分析結(jié)果使?已有?段依次測試
前端驗證的突破
如何探查是前端驗證:右鍵查看源代碼或者直接上傳?件,或者如果網(wǎng)站非常快的(沒有請求包)彈出提示。
前端驗證的例子(代碼片段):
function checkFile() {
var file = document.getElementsByName('upload_file')[0].value;
if (file == null || file == "") {
alert("請選擇要上傳的?件!");
return false;
}
//定義允許上傳的?件類型
var allow_ext = ".jpg|.png|.gif";

//提取上傳?件的類型
var ext_name = file.substring(file.lastIndexOf("."));
//判斷上傳?件類型是否允許上傳
if (allow_ext.indexOf(ext_name) == -1) {
var errMsg = "該?件不允許上傳,請上傳" + allow_ext + "類型的?件,當(dāng)前?件類型為:" + ext_name;
alert(errMsg);
return false;
}
}
前端驗證繞過方法:
通過瀏覽器審查元素對?頁的代碼查看,找到對文件格式或大小的限制然后修改即可;
通過工具對瀏覽器進行代理,抓包對包里的內(nèi)容進?修改。
瀏覽器禁用腳本。
檢查的突破-type繞過:
-Type(內(nèi)容類型),一般是指網(wǎng)頁中存在的 -Type,用于定義網(wǎng)絡(luò)文件的類型和網(wǎng)頁的編碼,決定瀏覽器將以什么形式、什么編碼讀取這個文件。
使用burp suite抓包直接修改-type值來繞過-type檢查。
-type檢查實例代碼:
if (($_FILES['upload_file']['type'] == 'image/jpeg') || ($_FILES['upload_file'] ['type'] == 'image/png') || ($_FILES['upload_file']['type'] == 'image/gif'))
文件頭驗證繞過:
gif文件十六進制表示后的文件頭是。
所以我們可以在自己想上傳的PHP文件中添加這個頭部來繞過文件頭部檢查。
例子:
gif89a
PHP
PHPinfo();
?>
不過上穿上去的文件很可能是gif格式的,可以通過文件包含來利用。
()檢查和模塊檢查繞過
這兩個效果差不多,就是獲取我們輸入的圖片的各種信息。
繞過方法:先改-type,在?件頭部添加。
?次渲染繞過:
?次渲染:就是根據(jù)?戶上傳的圖?,新?成?個圖?,將原始圖?刪除,將新圖?添加到數(shù)據(jù)庫中。
繞過方法:尋找渲染前后不變的地?,替換成?句話木馬。
白名單驗證的突破
白名單總體安全性高,這里只提供一些方案。
修改MIME類型繞過白名單限制 (-type驗證):
與上一部分的一致。使用burp suite抓包直接修改-type值來繞過-type檢查。
00截斷繞過白名單限制:
條件:PHP版本?于5.3.4,PHP的為OFF狀態(tài)
:
使用()對輸入數(shù)據(jù)進行處理,()是在每個雙引號(")前添加反斜杠。
0x00(或者)可以用在對文件名的繞過上,具體原理:系統(tǒng)在對文件名進行讀取時,如果遇到0x00(或者),就會認為讀取已經(jīng)結(jié)束。但要注意是文件的十六進制內(nèi)容里的00,而不是文件名中的00。也就是說系統(tǒng)是按二進制或十六進制讀取文件,遇到ASCII碼為0的位置就停止,而這個ASCII碼為0的位置在十六進制中是00。
例子:
1.PHP1.jpg//判斷時為jpg,解析后為1.PHP
用法:
GET接收情況的時候,直接用 就可以。
POST接收情況的時候,正確的用法應(yīng)該是我們需要對 做一個URL編碼,也就是URL-。原因: 截斷在 GET 中被 url 解碼之后是空字符。但是在 POST 中 不會被 url 解碼,所以只能通過 修改hex(十六進制)值為 00 (URL )進行截斷。
注:有的時候在包中直接改文件名,有可能失敗,要是有路徑的話可以在路徑里改。例如:數(shù)據(jù)包中存在 path: /,那么攻擊者可以通過修改path的值來構(gòu)造: /aa.PHP
為什么修改path才可以?
因為程序中檢測的是文件的后綴名,如果后綴合法則拼接路徑和文件名。
那么,攻擊者修改了path以后的拼接結(jié)果為:
/aaa.PHP/.PHP
移動文件的時候會將文件保存為:/aaa.PHP
從而達到效果,即上傳的文件格式為.PHP
解析漏洞繞過白名單
解析漏洞(雙重拓展名): ?件名解析時,是從后?開始檢查后綴,按最后?個合法后綴執(zhí)行。如: shell.PHP.xxx 因為 xxx 不被解析,所以會跳過 .xxx ,?解析最后?個后綴名,即.PHP,從?把這個?件當(dāng)PHP文件解析了。
IIS解析漏洞:
IIS6.0 在解析 asp 格式的時候有兩個解析漏洞.
一個是如果目錄名以".asp 、.asa、.cer、.cdx"字符串結(jié)尾,那么這個目錄下所有的文件都會按照 asp 去解析。eg: test.asp/1.jpg,另一個是只要文件名中含有".asp;、.asa;、.cer;、.cdx;會優(yōu)先按 asp
來解析 eg:1.asp;.jpg
IIS7.0/7.5是對PHP解析時有一個類似于Nginx的解析漏洞, 對任意文件名只要在URL后面追加上字符串"/任意文件名.PHP",就會按照 PHP 的方式去解析。eg:
大小寫或近似繞過
利用字典進行暴力破解,查看目標(biāo)網(wǎng)站的白名單。
黑名單驗證的突破
黑名單總體安全性不高,這里提供一些繞過方案。
利用操作系統(tǒng)特性
操作系統(tǒng)對?小寫不敏感,即PHP和PHP在看來是?樣的 系統(tǒng)下,如果上傳的文件名中test.PHP::$DATA會在服務(wù)器上?成?個test.PHP的?件,其中內(nèi)容和所相同,并被解析。即上傳?件xxx.PHP::$DATA = xxx.PHP
下文件名結(jié)尾加?.,空格,,>>>,0x81-0xff等字符,會被?動去除
利用語言特性
PHP語言可解析后綴:PHP,PHP5,PHP4,PHP3,PHP2,PHP,PHP5,PHP4,PHP3,PHP2,html,htm,phtml,pht,Html,Htm,pHtml
jsp語言可解析后綴:jsp,jspa,jspx,jsw,jsv,jspf,jtml,jSp,jSpx,jSpa,jSw,jSv,jSpf,jHtml
asp/aspx語言可解析后綴:asp,aspx,asa,asax,ascx,ashx,asmx,cer,aSp,aSpx,aSa,aSax,aScx,aShx,aSmx,cEr
利用中間件特性
即解析漏洞上傳圖片顯示缺少源文件地址,下一節(jié)詳講。
代碼不嚴謹利用
雙寫繞過
對于空格,點只做了單次過濾
解析漏洞如何探查目標(biāo)是什么類型的web服務(wù)器