現在網絡上的論壇和社區有很多,論壇絕大多數使用的是一些可以免費下載代碼并使用的論壇,研究這些代碼的人很多,所以關于這方面的安全文章有很多,這里就不做介紹,本文著重介紹一些虛擬社區的安全Bug的發現和利用方法,因為都是些大網站自己開發的社區,為了避免造成不良影響,這里就不抓圖和詳細說了,只以A,B表示,請大家不要對號入座,因為我做了一些處理。
下文要用到Achilles,所以先講一下Achilles的使用方法。Achilles是一個本地的代理服務器,打開后它會占用本地5000端口做代理服務器。在ie設置代理服務器ip為127.0.0.1,端口為5000,然后在Achilles選擇上Iintercept mode ON,Intercept Client Data和Ignore .jpg/gif這三項,再點左上角的三角圖標(Strat Proxy),就可以跟蹤Http會話狀態了,如圖所示(圖一)
![]() |
圖1 |
大網站的社區基本都是自己開發的,因此我們是看不到代碼的(就算有,對我這樣不懂asp,jsp,php,asp.net等開發語言的人也沒用^_^),我們只能靠大量的測試來找虛擬社區的安全Bug,我的做法一般是先注冊個用戶,然后看一下社區都有哪些功能,哪些有可能被破壞者利用。
A社區是由asp代碼編寫,功能單一,主要以論壇為主。我們先來看一下它的安全性。先注冊個用戶,用戶名只允許由數字,字母,下劃線組成,因為這個社區的管理員的用戶名為admin,那我們就注冊個<A>admin</A>,如果注冊成功,那我們進入社區后,你會發現你的id為admin,因為<A></A>不會顯示,而且,有可能你的權限會變為管理員(我在另外兩個代碼為站長自己編寫的小型社區測試成功過,在我所測試的大社區里不行),不過注冊當然不會成功,頁面代碼會進行鑒別的,提示注冊的用戶名中有非法字符,這里我們就可以使用Achilles來幫我們達到目的了,到Achilles里看一下抓到的數據包,找到你注冊的用戶名:admin,修改成<A>admin</A>(admin<A></A>也可以),然后點Achilles中的send,過一會網站會提示“成功注冊”。你可以發個帖子試一下,你的用戶名會顯示為admin,盡管你的實際用戶名是<A>admin</A>,如果有破壞者把頭像和昵稱改成和admin一樣,以admin的身份發帖子,擾亂社區秩序,蒙騙網友,我想對社區的人氣肯定會有不良影響。既然我們可以提交帶html語言的用戶名,我們能不能利用個Bug來做點什么?可不可以把asp木馬的代碼做為注冊名?我想應該不行,原因一是asp木馬字節太多(以前看到過有一句話木馬,具體沒接觸過,不知道在什么情況下使用),恐怕超出了用戶名字段設置的長度,原因二提交數據時,各部分內容都是以“&”符號連接的,我看了一下asp木馬的代碼,好象都帶“&”符號,所以不行。不過可以發段圖片代碼,社區會顯示我的用戶名為一張圖片,聰明的讀者你應該會想到如何利用這個 Bug了吧。
B社區為jsp開發,子系統很多,有論壇,日記系統,拍賣中心,交友系統等,功能很多,不過功能越強大,存在漏洞的風險就越大。這個社區以前存在id欺騙,我發現后告訴社區管理員了,過了幾天答復這個漏洞修補好了,我用iecv按照以前的方法測試了一下,發現確實沒問題了,這次再找找有沒有Bug。注冊個普通用戶,發個帖子,然后運行Achilles,點“編輯”,分析一下攔截到的數據,發現鑒別身份不光有用戶id號(在這個社區,每個用戶不光有用戶名,還有一個id號,而且唯一),還有JSESSIONID,那我們把截獲的所有數據包中這個id號改成管理員的id號看一下,然后提交修改過的數據,發現編輯帖子的人不是我當前的用戶了,而是管理員,那個JSESSIONID簡直是形同虛設。既然可以以別人的身份編輯自己的帖子,那我想這個Bug肯定還可以在別的子系統使用,測試發現確實是這樣。
總結:這篇文章我主要想寫給廣大web程序開發人員,如果能讓大家意識到代碼編寫不嚴謹所造成的后果,而且能夠糾正大家以前認為別人看不到社區代碼就萬事大吉的錯誤思想,那我的目的也就達到了,至于如何解決上面所說的問題,我想大家都能找出解決方法的。我已經把存在的Bug告訴這些社區的管理員了。最后說一句,本文方法僅供研究,請勿用于破壞上,由本文方法造成任何損失,由使用者負責,本人概不負責。測試環境:win2000高級服務器版(sp4)