[紅日安全]Web安全Day14 - 驗證碼實戰攻防

1.驗證碼漏洞概述

1.1驗證碼概述

驗證碼(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自動區分計算機和人類的圖靈測試)的縮寫,是一種區分用戶是計算機還是人的公共全自動程序。可以防止:惡意破解?密碼、刷票、論壇灌水。由於計算機無法解答CAPTCHA的問題,所以回答出問題的用戶就可以被認爲是人類。

1.1.1驗證碼作用

有效防止攻擊者對某一場景使用暴力方式進行不斷的攻擊嘗試。驗證碼主要是運用於登錄,註冊,評論發帖及業務安全防刷等場景。

1.1.2驗證碼分類

1.1.2.1圖片驗證碼

通過在圖片上隨機產生數字、英文字母、漢字或者問題,一般有四位或者六位驗證碼字符。通過添加干擾線,添加噪點以及增加字符的粘連程度和旋轉角度來增加機器識別的難度。但是這種傳統的驗證碼隨着OCR技術的發展,能夠輕易的被破解。

1.1.2.2手機短信驗證碼

手機驗證碼是通過發送驗證碼到手機,大型網站尤其是購物網站,都提供有手機短信驗證碼功能,可以比較準確和安全地保證購物的安全性,驗證用戶的正確性,是最有效的驗證碼系統。某些驗證碼接入商提供手機短信驗證碼服務,各網站通過接口發送請求到接入商的服務器,服務器發送隨機數字或字母到手機中,由接入商的服務器統一做驗證碼的驗證。

1.1.2.3行爲式驗證碼

是通過用戶的某種操作行爲來完成驗證。例如:拖動式驗證碼、點觸式驗證碼。
拖動式驗證碼:類似於手機的滑動解鎖,根據提示用鼠標將滑塊拖動到指定的位置完成驗證。
點觸式驗證碼,同樣根據文字提示,點擊圖片中與文字描述相符的內容完成驗證。

1.1.2.4語音驗證碼

是通過語音電話直接呼叫用戶手機或固定電話播報驗證碼,解決短信驗證碼到達率及政策性問題。常用於網站、移動客戶端、銀行金融等用戶身份驗證,以及支付確認等安全性要求更高的即時服務。

1.1.2.5視頻驗證碼

是驗證碼中的新秀,視頻驗證碼中隨機數字、字母和中文組合而成的驗證碼動態嵌入到MP4,flv等格式的視頻中,增大了破解難度。驗證碼視頻動態變換,隨機響應,可以有效防範字典攻擊、窮舉攻擊等攻擊行爲。

1.2驗證碼漏洞概述

1.2.1漏洞原理

由於驗證碼生成機制或驗證機制存在缺陷引發的問題。

1.2.2漏洞危害

1.2.2.1對賬戶進行暴力破解

1.2.2.2 任意用戶登錄

1.2.2.3 短信轟炸

2.常見驗證碼漏洞

2.1通用設計缺陷

2.1.1驗證碼無效

無論輸入什麼都判斷驗證碼正確,這種情況非常少,一些小站點可能存在。

2.1.2驗證碼由客戶端生成、驗證

驗證碼由客戶端js生成並且僅僅在客戶端用js驗證
測試:判斷驗證碼是否僅由客戶端驗證。
Eg:下圖爲驗證碼僅由客戶端驗證案例
在這裏插入圖片描述

2.1.3驗證碼回顯

驗證碼在html或COOKIE中顯示,或輸出到response headers的其他字段。可被直接查看。
測試:可查看html源碼或對響應包進行分析。
Eg:下圖爲驗證碼在COOKIE中回顯案例
在這裏插入圖片描述

2.1.4驗證碼固定

也叫驗證碼重複使用(重用)。是指驗證碼沒有設使用期限,在驗證碼首次認證成功後沒有刪除session中的驗證碼,使得該驗證碼可被多次成功驗證,從而造成危害。
測試:填寫正確登錄信息和驗證碼然後抓取提交數據包,重複提交該數據包,登錄成功則存在驗證碼重複使用問題。
ps:可通過修改與驗證碼無關的參數的大小來實現多次提交,自設一個字典作爲該參數payload。
Eg:EmpireCMS_6.0後臺驗證碼可重複使用
在這裏插入圖片描述

從結果來看,暴力重複提交的數據包均登錄成功,說明存在驗證碼重複使用的問題。
再附上項目中遇到的驗證碼重用問題
在這裏插入圖片描述

2.1.5 驗證碼可爆破

服務端未對驗證時間、次數作出限制,存在爆破的可能性。簡單的系統存在可以直接爆破的可能性,但做過一些防護的系統還得進行一些繞過才能進行爆破。
測試:利用Burpsuite對驗證碼參數進行暴力破解。
Eg:微信驗證碼暴力破解可導制任意密碼修改:
http://www.wooyun.org/bugs/wooyun-2010-011720

2.1.6 驗證碼可猜測

由於驗證碼設置比較簡單,可能只有數字或字母組成,也可能是其設定範圍有限,導致驗證碼內容可被猜測。經常出現在圖片驗證碼問題集場景。
測試:根據已有驗證碼對驗證碼設定範圍進行猜測。
Eg:產生的驗證碼問題集內的答案非常有限
139郵箱圖驗證碼繞過漏洞 http://www.wooyun.org/bugs/wooyun-2013-025245

2.1.7 驗證碼可繞過

由於邏輯設計缺陷,可繞過驗證,常見繞過方式如直接刪除COOKIE、驗證碼參數爲空、直接刪除驗證碼參數可繞過和修改Response狀態值等。也可根據情況組合以上繞過方式。
測試:利用Burpsuite更改請求包數據進行多次測試。
Eg1:CmsEasyv5.5刪除COOKIE可繞過驗證
在這裏插入圖片描述

Eg2:驗證碼參數值爲空可繞過驗證
在這裏插入圖片描述

2.2圖片驗證碼

除了上述通用設計缺陷,由於圖形驗證碼設計過於簡單,可使用工具自動化識別,存在圖片驗證碼可自動識別漏洞。
測試:利用Python Image Library、tesseract-ocr、pytesser等python第三方庫,經過二值化、文字分割等操作識別驗證碼。
Eg:招商銀行設計缺陷可被窮舉攻擊
http://www.wooyun.org/bugs/wooyun-2015-092497
光大證券交易系統資金賬號可被窮舉攻擊
http://www.wooyun.org/bugs/wooyun-2015-092415

2.3短信驗證碼

很多系統的短信驗證碼接口存在很多邏輯問題,因此產生的危害也很多,比如任意用戶註冊、任意用戶重置密碼、短信轟炸等,還可能導致CSRF。
短信驗證碼漏洞常出現在註冊登錄、密碼找回、敏感信息修改、獲取等模塊。

2.3.1短信轟炸

這類漏洞存在的原因是沒有對短信驗證碼的發送時間、用戶及其IP作一些限制。
測試:抓包後利用burpsuite的重放功能,結果均返回已發送成功。

2.3.2任意用戶註冊

沒有將短信驗證碼與手機綁定,通過更改手機號填寫

2.3.3任意用戶重置密碼

一般出現在密碼找回模塊,系統沒有將發送的短信驗證碼與手機綁定,可通過更改手機號獲取驗證碼進行繞過,重置和登錄該用戶賬號密碼。
但也有情況就是,系統將發送的短信驗證碼與手機綁定了,但沒有將該手機號和相應賬號
進行綁定,還是可以繞過驗證碼的。
Eg:下圖就是一個通過修改手機號獲取驗證碼的場景,但比較特別的是必須將mobile改爲接收captcha的手機號才能驗證成功。
在這裏插入圖片描述

3.測試

這裏先介紹測試靶場,

3.1靶場測試

3.1.1 Pikachu漏洞平臺

3.1.1.1 靶場介紹

Pikachu是一個帶有漏洞的Web應用系統,在這裏包含了常見的web安全漏洞。 · Burt Force(暴力破解漏洞)
· XSS(跨站腳本漏洞)
· CSRF(跨站請求僞造)
· SQL-Inject(SQL注入漏洞)
· RCE(遠程命令/代碼執行)

3.1.2.2 靶場下載

https://github.com/zhuifengshaonianhanlu/pikachu

3.1.2.3靶場安裝

放到WWW目錄下,然後在inc/config.inc.php中修改數據庫名和密碼
訪問http://localhost/pikachu-master/進入首頁,點擊初始化安裝
在這裏插入圖片描述

安裝成功
在這裏插入圖片描述

3.2 手工測試

在Pikachu漏洞平臺首頁選擇暴力破解|驗證碼繞過(on server)/(o client)。
在這裏插入圖片描述

3.2.1驗證碼繞過(on server)

按照2.1的通用設計缺陷一個個進行測試。
測試結果:驗證碼有驗證、無回顯,但存在驗證碼固定(可重複使用)的設計缺陷。
以下爲驗證碼固定問題測試過程和源碼分析。

3.2.1.1 測試過程

輸入不正確的賬戶/密碼及正確的驗證碼測試
在這裏插入圖片描述

重複提交該數據包均只返回用戶名或密碼錯誤,說明存在驗證碼固定漏洞。
在這裏插入圖片描述

所以我們可利用此漏洞繞過驗證碼直接對用戶名和密碼進行暴力破解。

3.2.1.2源碼分析

文件:\vul\burteforce\bf_server.php
關鍵代碼:
在這裏插入圖片描述

在用戶名、密碼和驗證碼均不爲空的情況下判斷輸入驗證碼是否與生成後保存在session中的驗證碼相同,但比較完後沒有刪除該session[vcode],導致下一個數據包輸入該驗證碼也會判斷正確,出現驗證碼重複使用問題。
3.2.2驗證碼繞過(on client)
按照2.1的通用設計缺陷一個個進行測試。
測試結果:驗證碼有驗證、無回顯,在測試驗證碼固定(可重複使用)問題抓包時發現是通過前端JS判斷驗證碼是否正確,在bp中測試發現存在刪除驗證碼參數可繞過驗證碼判斷的問題。
以下爲驗證碼固定問題測試過程和源碼分析。

3.2.2.1 測試過程

通過查看源碼發現前端JS判斷驗證碼是否正確,所以先輸入正確的驗證碼繞過前端判斷。
輸入不正確的賬戶/密碼及驗證碼進行抓包測試。
在這裏插入圖片描述

由於已經繞過前端js對驗證碼的判斷,可以將請求包中的驗證碼參數刪除。
在這裏插入圖片描述

再將數據包發送到intruder對用戶名和密碼進行暴力破解即可。

3.3工具測試

3.3.1 PKAV HTTP Fuzzer

3.3.1.1 工具介紹

pkav團隊的神器PKAV HTTP Fuzzer可對圖片驗證碼進行識別。
不需要安裝可直接運行,但運行需要安裝.net framework 4.0或以上版本。

3.3.1.2 測試過程

這裏用PKAV HTTP Fuzzer對EmpireCMS_6.0進行測試。
安裝好後先登錄後臺頁面修改後臺驗證碼顯示設置
在這裏插入圖片描述

先用burpsuite抓取登錄包,再將url和請求包複製到PKav->目標數據的相應位置
設置變量和驗證碼
在這裏插入圖片描述

然後添加變量的字典,設置重放方式
在這裏插入圖片描述

由於該cms的驗證碼爲圖片驗證碼,所以我們再進入圖片驗證碼識別進行設置。
右鍵複製圖片驗證碼鏈接地址,填寫到驗證碼地址
在這裏插入圖片描述

往下點擊識別測試查看是否能識別
在這裏插入圖片描述

再進入重放選項對線程、驗證碼長度進行設置,也可設置響應包字段匹配方便判斷。
在這裏插入圖片描述

最後進入發包器模塊點擊啓動即可。
在這裏插入圖片描述

3.3.2 Burp插件reCAPTCHA

3.3.2.1插件介紹

3.3.2.2插件安裝

下載地址:https://github.com/bit4woo/reCAPTCHA/releases
在這裏插入圖片描述

安裝:在Burpsuite中選擇Extender->Extensions->Add,選擇剛下載的reCAPTCHA.v0.8即可。
在Proxy中右鍵出現Send to reCAPTCHA即安裝成功。
在這裏插入圖片描述
使用方法這裏就不做介紹了

4.CMS實戰演練

4.1CMSeasyv5.5刪除cookie可繞過驗證碼

4.1.1 cms簡介

CmsEasy是一款基於 PHP+Mysql 架構的網站內容管理系統,也是一個 PHP 開發平臺。 採用模塊化方式開發,功能易用便於擴展,可面向大中型站點提供重量級網站建設解決方案。2年來,憑藉 團隊長期積累的豐富的Web開發及數據庫經驗和勇於創新追求完美的設計理念,使得 CmsEasy v1.0 得到了衆多網站的認可,並且越來越多地被應用到大中型商業網站。

4.1.2 測試環境

系統:win10
PHPStudy:PHPv5.2.17+MYSQLv5.5.53
CMS版本:CMSeasyv5.5

4.1.3 測試過程

訪問http://xxx/uploads/admin/跳轉到後臺登陸頁面。
在這裏插入圖片描述

使用正確賬戶密碼+錯誤驗證碼嘗試登錄時,返回驗證碼錯誤
在這裏插入圖片描述

刪除cookie後返回登陸成功
在這裏插入圖片描述

因此非管理員用戶可通過刪除cookie繞過驗證碼驗證對用戶名和密碼進行爆破。

4.2 EmpireCMS_6.0驗證碼重複

4.2.1 CMS介紹

帝國網站管理系統(EmpireCMS)是目前國內應用最廣泛的CMS程序。通過十多年的不斷創新與完善,使系統集安全、穩定、強大、靈活於一身。目前EmpireCMS程序已經廣泛應用在國內上百萬家網站,覆蓋國內上千萬上網人羣,並經過上千家知名網站的嚴格檢測,被稱爲國內超高安全穩定的開源CMS系統。

4.2.2 測試環境

系統:win10
PHPStudy:PHPv5.2.17+MYSQLv5.5.53
CMS版本:EmpireCMS_6.0

4.2.3安裝CMS

訪問http://yoursite/e/install/index.php
安裝好後先登錄後臺頁面修改後臺驗證碼顯示設置,步驟如圖
在這裏插入圖片描述

然後拉到最下方保存設置,退出登錄

4.2.4測試過程

第一步,輸入正確信息點擊登錄時抓包
第二步,通過修改imageField參數的大小來實現暴力提交,自設一個兩位數數字字典作爲payload
在這裏插入圖片描述

第三步,查看任意響應包是否登錄成功
在這裏插入圖片描述

從結果來看,暴力重複提交的數據包均登錄成功,說明存在驗證碼重複使用的問題。
經過暴力重複提交後,後臺顯示登陸成功。
在這裏插入圖片描述

5.修復建議

5.1使用安全性強的驗證碼

驗證碼應從以下方面保證其安全性:驗證碼長度不低於4位,至少同時包含數字、字母或漢字,增加干擾因素比如線條,避免使用容易被程序自動識別的驗證碼。

5.2 驗證碼不應由客戶端生成或返回到客戶端

5.3 系統在開發時注意驗證識別後銷燬session中的驗證碼。

5.4限制用戶提交的驗證碼不能爲空

5.5 短信驗證碼不少於6位;有效期不超過1分鐘;驗證碼錯誤次數超過上限應採取賬戶鎖定策略。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章