百度,作為國內搜索引擎的大戶,為了進一步擴大自己的用戶群,專門開設了“百度貼吧”(2003年11月百度貼吧 (http://post.baidu.com)自從誕生以來逐漸成為世界最大的中文交流平臺!當用戶在百度搜索引擎中搜索出需要搜索的關鍵字,點擊“貼吧”即可進入以關鍵字為專題的相應貼吧)的服務。操作簡單而又針對性,這是貼吧火極一時的重要原因,可正因為如此,百度貼吧的安全性又怎么樣呢?這就是我們今天探討的話題!
相信大家都有在論壇灌水的經歷吧?但是如果你連續(xù)發(fā)表統(tǒng)一內容的東西在論壇中,不久論壇的整個板塊就全是你發(fā)表的信息了,其他信息全被擠在了后面。假設你發(fā)表的信息夠多,版主都刪不完時,那么這個論壇基本就報廢了!其他的商業(yè)論壇也意識到了防止惡意灌水的重要性,紛紛使用了一些防止惡意灌水的措施,有發(fā)貼間隔時間的限制、同一IP地址的發(fā)貼數(shù)限制、內容不能重復等,但是這些都不是今天的重點,由于百度使用的是一個公用發(fā)貼表單,允許匿名發(fā)帖,需要突破唯一的難點是驗證碼。(為了防止某個黑客對某一個特定注冊用戶用特定程序暴力破解方式進行不斷的登陸嘗試或是防止不斷提交某網(wǎng)絡信息而采用的一種網(wǎng)絡通行方式。隨機生成字符信息放入圖片中,防止計算機直接識別。比如招商銀行的網(wǎng)上個人銀行,騰訊的QQ社區(qū)等等)
這時驗證碼在整個系統(tǒng)中就扮演了了一個至關重要的角色。如果我們能突破它,寫一個自動發(fā)布的程序,那么我們來算一算:假設每兩秒程序post一次,一分鐘就是30次、 一小時就有30×60=1800次、 一天就有1800×24=43200次!如果我們把發(fā)貼程序或是密碼窮舉程序掛在很多肉雞上,進行同時工作,那么結果可想而知!筆者曾親目睹過國內某著名安全論壇就是驗證碼被人破解,導致被人惡意灌水,最后完全崩潰!當然還有某網(wǎng)絡銀行也因此類原因導致用戶密碼被盜等眾多事件。筆者也作如下聲明:下文介紹的方法并不是有意針某公司或是某機構,只是作為技術交流,如果部分讀者利用本文介紹的方法進行破壞或是窮舉他人密碼,這已經違法了法律,那么責任由他自己承擔,與筆者無關!
好了,我們可以進入正題了(以下出現(xiàn)的代碼為delphi寫的部分源碼,為了防止任意利用,我以介紹方法為主,如果讀者感興趣,可以自己組合編寫完整,在本文附帶的程序中,筆者提供了一個驗證碼參數(shù)確定程序(附源碼))。驗證碼分為如下幾類:數(shù)字型、字符型、符號型、綜合型。
我們看了看百度貼吧的驗證碼如圖: 是屬于數(shù)字型的!不過其圖片中生成了不少彩色和黑白的噪音點(指驗證圖片上的斑點)。那么我們應該怎么去識別呢?傳統(tǒng)的驗證碼識別方式很簡單,由于數(shù)字的位置是固定的,所以我們只需要提取每一幅數(shù)字的圖片(沒有噪音點的)然后把每一個特殊數(shù)字獨有的象素位置記錄下來,然后在網(wǎng)絡上提取需要破解的特征碼,祛除噪音點,對其位置和記錄位置進行比對,那就是么就能確定相應的數(shù)字了。