利用驗證碼繞過的小技巧

作者:野火研習社·fakl

本文主要講解在漏洞挖掘過程中繞過驗證碼的一些小技巧,偏向於實戰。驗證碼可被繞過本身就是一個漏洞,但很多廠家並不是很重視這個問題,給的獎勵也很少,因此我更喜歡進一步利用這個漏洞來獲取一些不開放註冊的系統的帳號密碼,進入系統,挖掘更多嚴重的漏洞。

1.驗證碼不刷新

導致驗證碼不刷新的原因是:登錄密碼錯誤之後,session中的值沒有更新,驗證碼不變。驗證碼不刷新通常有以下兩種情況:無條件不刷新、有條件不刷新。

1.1無條件不刷新

無條件不刷新是指在某一時間段內,無論登錄失敗多少次,只要不刷新頁面,就可以無限次的使用同一個驗證碼來對一個或多個用戶帳號進行暴力猜解。

1.2有條件不刷新

有條件不刷新多見於如下情況:登錄失敗之後,系統會打開一個新頁面或者彈出一個新的警告窗口,提示用戶登錄失敗,點擊確定後返回登錄界面且驗證碼刷新。這種情況下,只要我們不關閉新窗口或彈窗,配合使用Burpsuite的intruder模塊就可以進行暴力破解了。

2.驗證碼前端可獲取

這種情況在早期的一些網站中比較常見,主要是因為程序員在寫代碼的時候安全意識不足導致的。驗證碼通常會被他們隱藏在網站的源碼中或者高級一點的隱藏在請求的Cookie中,但這兩種情況都可以被攻擊者輕鬆繞過。

2.1驗證碼隱藏在源碼中

驗證這種情況很簡單,我們只需要記住驗證碼,然後右鍵打開網站源代碼,Ctrl+F搜索,輸入剛才的驗證碼,如果可以成功匹配到,那恭喜你,接下來就可以寫工具,提取源碼中的驗證碼並將其放入每次請求的報文中,來進行帳號破解,這裡推薦使用python。

2.2驗證碼隱藏在Cookie中

這種情況,我們可以在提交登錄的時候抓包,然後分析一下包中的Cookie欄位,看看其中有沒有相匹配的驗證碼,或者是經過了一些簡單加密後的驗證碼。

3.驗證碼空值繞過

驗證碼空值繞過,是在日常的滲透測試中很容易被我們忽略的一點,實際應用中我們可以通過直接刪除驗證碼參數或者Cookie中的一些值來繞過判斷,進行暴力破解。

4.驗證碼易識別

在平常的漏洞挖掘過程中,如果我們發現登錄的驗證碼非常簡單且易於識別,那我們就可以嘗試使用自動化工具來進行登錄破解了,如PKAV的HTTP Fuzzer。

5.存在無驗證碼頁面

經過測試,如果我們發現網站驗證碼自身並不存在缺陷,那我們接下來就可以嘗試尋找一些其他的登錄頁面或介面來嘗試暴力破解。

5.1隱藏的頁面

這種頁面通常是留給測試人員使用的,或者是一些忘記刪除的老界面,利用的前提是該界面依舊可用,一般情況下,我們可以通過掃描器來發現這種頁面。

5.2t微信公眾號、APP登錄頁面

很多網站的web登錄頁面已經做的相當完善了,但是卻在微信公眾後的綁定介面或者是APP的登錄界面上面栽了跟頭,在滲透測試的過程中,一定不要忘了對公眾號和APP的測試。

6.其他繞過方法

6.1萬能驗證碼

滲透測試的過程中,有時候會出現這種情況,系統存在一個萬能驗證碼,如000000,只要輸入萬能驗證碼,就可以無視驗證碼進行暴力破解。

6.2驗證碼無效

這種情況下,無論我們輸入什麼數據,驗證碼都會判斷通過,驗證碼形同虛設,這種情況我只遇到過一次。

6.3驗證碼數量有限

多見於計算類型的驗證碼,如1+8=?,這種類型的驗證碼嚴格意義上來說不能叫做驗證碼,多刷新幾次驗證碼,我們可能會發現系統中的算數題目只有那麼幾道,這種情況下只要將驗證碼全部下載下來,生成一個md5庫,然後將前端生成的驗證碼與本地文件進行對比即可。

文章轉自Freebuf.


推薦閱讀:

目前的大量網站是否存在驗證碼濫用的問題?
網頁爬蟲遇到難以通過圖像識別繞過的驗證碼時,獲取整個驗證碼庫,人工標註答案,再進行圖像比對,是否可行?
極驗滑動驗證碼破解分析
跟12306學地理——論驗證碼的三重境界

TAG:验证码 | 技巧 | 漏洞 |