日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

渗透测试-验证码的爆破与绕过

發(fā)布時(shí)間:2023/12/2 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 渗透测试-验证码的爆破与绕过 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

【驗(yàn)證碼機(jī)制原理】

客戶端發(fā)起請(qǐng)求->服務(wù)端響應(yīng)并創(chuàng)建一個(gè)新的SessionID同時(shí)生成隨機(jī)驗(yàn)證碼,將驗(yàn)證碼和SessionID一并返回給客戶端->客戶端提交驗(yàn)證碼連同SessionID給服務(wù)端->服務(wù)端驗(yàn)證驗(yàn)證碼同時(shí)銷毀當(dāng)前會(huì)話,返回給客戶端結(jié)果。

【客戶端可能存在的安全問題】

1、有的網(wǎng)站驗(yàn)證碼由本地js生成僅僅在本地用js驗(yàn)證。可以在本地禁用js,用burp把驗(yàn)證字段刪除。
2、有的網(wǎng)站把驗(yàn)證碼輸出到客戶端html中,送到客戶端Cookie或response headers。
3、有些網(wǎng)站默認(rèn)不顯示驗(yàn)證碼,而是在輸入錯(cuò)誤一定數(shù)量之后才需要驗(yàn)證驗(yàn)證碼,開發(fā)人員可能在Cookie中寫入一個(gè)標(biāo)記loginErr,用來記錄錯(cuò)誤數(shù)量,則可以不更新Cookie中的loginErr值反復(fù)提交,驗(yàn)證碼就不會(huì)出現(xiàn)。

【服務(wù)端可能存在的安全問題】

1、驗(yàn)證碼不過期,沒有及時(shí)銷毀會(huì)話導(dǎo)致同一驗(yàn)證碼反復(fù)可用。攻擊者可以在Cookie中帶固定的sessionID和固定的驗(yàn)證碼字符串。
2、沒有對(duì)驗(yàn)證碼進(jìn)行非空判斷,導(dǎo)致可以直接刪除驗(yàn)證碼參數(shù)。
3、產(chǎn)生的驗(yàn)證碼問題有限

驗(yàn)證碼固定

導(dǎo)致驗(yàn)證碼不刷新(固定)的原因是:登錄密碼錯(cuò)誤之后,session中的值沒有更新,驗(yàn)證碼不變。驗(yàn)證碼不刷新通常有以下兩種情況:無條件不刷新、有條件不刷新。

無條件不刷新

無條件不刷新是指在某一時(shí)間段內(nèi),無論登錄失敗多少次,只要不刷新頁面,就可以無限次的使用同一個(gè)驗(yàn)證碼來對(duì)一個(gè)或多個(gè)用戶帳號(hào)進(jìn)行暴力猜解。換句話說,攻擊者可以在同一個(gè)會(huì)話下,在獲得第一個(gè)驗(yàn)證碼后,后面不再主動(dòng)觸發(fā)驗(yàn)證碼生成頁面,并且一直使用第一個(gè)驗(yàn)證碼就可循環(huán)進(jìn)行后面的表單操作,從而繞過了驗(yàn)證碼的屏障作用,對(duì)登錄進(jìn)行暴力猜解。

【測試案例 1】測試人員登錄并抓取請(qǐng)求包,在不改變驗(yàn)證碼的情況下,多次發(fā)送請(qǐng)求包,響應(yīng)包中內(nèi)容都是“用戶名或密碼錯(cuò)誤”,如下圖所示:
【安全建議】建議針對(duì)一次請(qǐng)求生成的驗(yàn)證碼只能用一次,用完立即過期。每次生成的驗(yàn)證碼不允許跨會(huì)話和請(qǐng)求使用。

有條件不刷新

有條件不刷新多見于如下情況:登錄失敗之后,系統(tǒng)會(huì)打開一個(gè)新頁面或者彈出一個(gè)新的警告窗口,提示用戶登錄失敗,點(diǎn)擊確定后返回登錄界面且驗(yàn)證碼刷新。這種情況下,只要我們不關(guān)閉新窗口或彈窗,配合使用Burpsuite的intruder模塊就可以進(jìn)行暴力破解了。

【測試案例 2】來看下某系統(tǒng)的驗(yàn)證碼鑒權(quán)流程:

用戶輸入賬戶信息+驗(yàn)證碼(刷新頁面或手動(dòng)刷新驗(yàn)證碼會(huì)從服務(wù)器獲取驗(yàn)證碼,但該驗(yàn)證碼緩存于session中),服務(wù)端接收到賬戶信息+驗(yàn)證后會(huì)先校驗(yàn)驗(yàn)證碼是否正確,若不正確則,返回反之與數(shù)據(jù)庫做對(duì)比,符合則返回,客戶端接收服務(wù)端的請(qǐng)求,若成功則跳轉(zhuǎn),返回根據(jù)不同的錯(cuò)誤碼提示相應(yīng)信息,并重新獲取服務(wù)端生成的新驗(yàn)證碼,重新緩存。

【問題描述】看完流程可以很容易想到一個(gè)問題:驗(yàn)證碼此時(shí)并不會(huì)重置,一切重置驗(yàn)證碼的操作都在瀏覽器,所以在Session不失效的時(shí)效內(nèi),可以無限重用驗(yàn)證碼,這時(shí)就可以使用BurpSuite進(jìn)行暴力破解了,驗(yàn)證碼形同虛設(shè)。

驗(yàn)證碼前端可獲取

這種情況在早期的一些網(wǎng)站中比較常見,主要是因?yàn)槌绦騿T在寫代碼的時(shí)候安全意識(shí)不足導(dǎo)致的。驗(yàn)證碼通常會(huì)被他們隱藏在網(wǎng)站的源碼中或者高級(jí)一點(diǎn)的隱藏在請(qǐng)求的Cookie中,但這兩種情況都可以被攻擊者輕松繞過。

驗(yàn)證碼隱藏在源碼之中

驗(yàn)證這種情況很簡單,我們只需要記住驗(yàn)證碼,然后右鍵打開網(wǎng)站源代碼,Ctrl+F搜索,輸入剛才的驗(yàn)證碼,如果可以成功匹配到,那恭喜你,接下來就可以寫工具,提取源碼中的驗(yàn)證碼并將其放入每次請(qǐng)求的報(bào)文中,來進(jìn)行帳號(hào)破解,這里推薦使用python。

驗(yàn)證碼隱藏在Cookie中

一般來說,我們會(huì)把驗(yàn)證碼的值用Session存儲(chǔ)起來,通過對(duì)比用戶提交的驗(yàn)證碼和Session中的驗(yàn)證碼,就可以知道輸入是否正確。由于Session會(huì)占用服務(wù)器資源,有的開發(fā)人員會(huì)把驗(yàn)證碼的值加密后存儲(chǔ)在Cookie中。

這種情況,我們可以在提交登錄的時(shí)候抓包,然后分析一下包中的Cookie字段,看看其中有沒有相匹配的驗(yàn)證碼,或者是經(jīng)過了一些簡單加密后的驗(yàn)證碼。

僅在客戶端生成驗(yàn)證碼

有的網(wǎng)站驗(yàn)證碼由本地js生成僅僅在本地用js驗(yàn)證。

【實(shí)際案例】

測試人員抓取登錄過程的請(qǐng)求包,如下圖所示:

從上面抓取到的數(shù)據(jù)包可以看出,雖然該系統(tǒng)存在驗(yàn)證碼,但是其驗(yàn)證碼并沒有向服務(wù)器傳輸,而是在本地客戶端直接進(jìn)行驗(yàn)證。我們可以在輸入一次正確的驗(yàn)證碼(繞過客戶端驗(yàn)證)后,使用BurpSuite對(duì)用戶名和密碼同時(shí)進(jìn)行暴力猜測,如下圖所示:

返回的數(shù)據(jù)是“賬號(hào)不存在”,而不是“驗(yàn)證碼錯(cuò)誤”,說明此處已不需要輸入正確的驗(yàn)證碼就能發(fā)送登錄請(qǐng)求,只要密碼字典夠大,我們就能進(jìn)行暴力破解。

計(jì)算類型的驗(yàn)證碼,如1+8=?,這種類型的驗(yàn)證碼嚴(yán)格意義上來說不能叫做驗(yàn)證碼,多刷新幾次驗(yàn)證碼,我們可能會(huì)發(fā)現(xiàn)系統(tǒng)中的算數(shù)題目只有那么幾道,這種情況下只要將驗(yàn)證碼全部下載下來,生成一個(gè)md5庫,然后將前端生成的驗(yàn)證碼與本地文件進(jìn)行對(duì)比即可。

驗(yàn)證碼薄弱

驗(yàn)證碼自動(dòng)識(shí)別

有的系統(tǒng)雖然在登錄界面帶了驗(yàn)證碼,但是驗(yàn)證碼功能薄弱,可以被工具識(shí)別,導(dǎo)致系統(tǒng)面臨被爆破登錄的風(fēng)險(xiǎn)。
點(diǎn)擊F12打開開發(fā)者工具,查看前端源碼,找到生成驗(yàn)證碼的URL。
將URL輸入搜索框,驗(yàn)證是否正確。

然后,打開工具PKAV HTTP FUzzer,開始嘗試自動(dòng)識(shí)別驗(yàn)證碼。


建議對(duì)驗(yàn)證碼進(jìn)行干擾、變形處理!

驗(yàn)證碼爆破登錄

緊接上面的系統(tǒng)案例,接下來同樣借助工具PKAV HTTP FUzzer,咱們進(jìn)行帶驗(yàn)證碼登錄頁面的暴力破解。

(1)首先,使用Burp Suite抓包

(2)把數(shù)據(jù)包丟進(jìn)PKAV工具,分別標(biāo)記password、驗(yàn)證碼(username事前知道了,即存在admin的用戶,無需用字典猜測,故此處不用標(biāo)記)。

(3)給標(biāo)記的變量添加猜測字典。字典可選工具自帶的,也可用專門的字典生成工具生成。

或者使用工具生成字典:

(4)添加驗(yàn)證碼地址

在登錄框找到驗(yàn)證碼地址復(fù)制到工具,識(shí)別范圍看情況,這里為數(shù)字+字母。

(5)設(shè)置參數(shù)

切換到重?fù)Q選項(xiàng)卡設(shè)置相關(guān)參數(shù),具體設(shè)置看情況而定。

(6)識(shí)別驗(yàn)證碼測試

相關(guān)參數(shù)設(shè)置好之后,點(diǎn)擊進(jìn)行識(shí)別測試。

(7)開始爆破

接下來,耐心等待爆破結(jié)果。

總結(jié)

以上是生活随笔為你收集整理的渗透测试-验证码的爆破与绕过的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。