說到%5c,你是不是想起了當(dāng)前流行的那個(gè)%5c暴庫漏洞,呵呵,本文就是對(duì)%5c利用的探索(呵呵,當(dāng)然有我提出的新東東,或許對(duì)你有幫助哦^_^)。
好,我們先追根溯源,找到那個(gè)漏洞的老底。看看綠盟2001年的漏洞公告:_bug&do=view&bug_id=1429">http://www.nsfocus.net/index.php?act=sec_bug&do=view&bug_id=1429
N年以前利用這個(gè)漏洞可以實(shí)現(xiàn)目錄遍歷,雖然微軟出了補(bǔ)丁,不過好像補(bǔ)丁是用來限制iis只能訪問虛擬目錄的,所以漏洞還是存在,只不過利用方式變了。對(duì)iis來說,提交一個(gè)含有%5c的url能夠找到文件,但是該文件里以相對(duì)路徑引用的其他文件卻找不到了(%5c是\的url編碼,iis跳轉(zhuǎn)到上一級(jí)目錄去找,當(dāng)然找不到;頭暈了吧,哈哈,我也頭暈啊)。
后來這個(gè)漏洞就被牛人挖掘出來了,也就是傳說中的%5c暴庫:由于連接數(shù)據(jù)庫的文件引用的相對(duì)路徑,提交%5c找不到文件,所以導(dǎo)致出錯(cuò),iis就會(huì)老老實(shí)實(shí)的說出數(shù)據(jù)庫的路徑(不明白?找google)。
一個(gè)偶然的機(jī)會(huì)我發(fā)現(xiàn)還可以利用%5c繞過asp的驗(yàn)證;當(dāng)我們暴庫失敗的時(shí)候不妨試試。
廢話少說,看下面的代碼:
<!--#INCLUDE file="conn.asp" -->
<%
guest_user=trim(request("guest_user"))
guest_password=trim(request("guest_password"))
Set rs= Server.createObject("ADODB.Recordset")
sql="select * from admin where id=1"
rs.open sql,conn,3,2
readuser=rs("guest_user")
readpassword=rs("guest_password")
if readuser<>guest_user or readpassword<>guest_password then
response.write "請(qǐng)輸入正確地管理員密碼!"
response.end
else
session("admin")=1 '登陸后寫入seesion中保存
response.write("登陸成功,請(qǐng)返回信息頁")
end if
%>
看到?jīng)]有,要想通過驗(yàn)證必須讓數(shù)據(jù)庫里的用戶名密碼與提交的一致;想到什么?讓我們?cè)倏纯磾?shù)據(jù)庫連接文件代碼:
<%
on error resume next
set conn=server.createobject("adodb.connection")
DBPath = Server.MapPath("guestbook.asp")
conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath
%>
啊,有容錯(cuò)語句不能暴庫!等等,如果提交%5c數(shù)據(jù)庫找不到,由于容錯(cuò),所以程序會(huì)繼續(xù)執(zhí)行,那么說來從數(shù)據(jù)庫得到的用戶名密碼皆為空(想想有時(shí)暴庫失敗是不是看到空空的框架,因?yàn)閿?shù)據(jù)都是空嘛),哈哈,這樣我們就繞過驗(yàn)證了!
知道怎么做了吧,把登陸頁面保存到本地,修改提交的url,把最后一個(gè)/改成%5c,用戶名密碼用空格(有的程序會(huì)檢查用戶名密碼是否為空,空格會(huì)被程序過濾),提交,就ok了。
誒,各位不要以為我自己沒事寫段代碼來搗鼓,實(shí)際上這個(gè)是我們學(xué)校一個(gè)高手做的留言板程序,就掛在學(xué)校的主頁,呵呵。
既然弄懂了原理,當(dāng)然要找實(shí)際漏洞啦,自然是拿大名鼎鼎的"洞"網(wǎng)論壇開刀。不過失敗了,因?yàn)樗臄?shù)據(jù)庫連接文件里有這么一段:
If Err Then
err.Clear
Set Conn = Nothing
Response.Write "數(shù)據(jù)庫連接出錯(cuò),請(qǐng)檢查連接字串。"
Response.End
End If
數(shù)據(jù)庫找不到程序就結(jié)束了,呵呵,空歡喜一場。
接著又去down了bbsxp論壇,打開數(shù)據(jù)庫連接文件,暈,根本沒有容錯(cuò)語句;呵呵,不過可以暴庫哦。
我又不是BT,所以不去找事了,寫篇文章,算是給各位高手提供資料吧。
總結(jié)一下這個(gè)攻擊方法成功的條件:1、數(shù)據(jù)庫連接用的相對(duì)路徑且僅有簡單的容錯(cuò)語句;2、服務(wù)器iis版本為4或5;3、程序里不檢查空字符或者檢查時(shí)不過濾空格而比較時(shí)過濾空格;4、程序不能位于一級(jí)目錄
至于防范,呵呵,既然攻擊條件知道了,防范措施自然也出來了^_^