幾個月前寫的。。。居然一直待在草稿箱
已經忘了之前想用一些cms來復現常見的業務邏輯漏洞這回事了
最近有時間就繼續慢慢弄吧~~
一、驗證碼漏洞
驗證碼機制主要用於用戶身份識別,常見可分為圖片驗證碼、數字驗證碼、滑動驗證碼、短信驗證碼、郵箱驗證碼等
根據形成原因可分為:
1.驗證碼暴力破解
1.1 漏洞成因
服務端未對驗證時間、次數作出限制,存在爆破的可能性。驗證碼常用在批量注冊,任意用戶登錄場景。
1.2 測試
1.2.1 測試流程
輸入信息–>抓包爆破驗證碼–>查看爆破是否成功
1.2.2 PHPYunCMS漏洞演示
PHPYun后台驗證碼可爆破
(1)測試環境
系統:Win10
環境:PHPStudy集成環境
CMS版本:PHPYunv3.1
(2)測試過程
輸入正確用戶信息
爆破成功
1.3 漏洞修復建議
(1)提高驗證碼的長度、復雜度
(2)可限制錯誤登錄次數、有效時間
2.驗證碼重復使用
2.1原因
在驗證碼首次認證成功后沒有刪除session中的驗證碼,使得該驗證碼可被多次成功驗證,造成危害
2.2測試:
2.2.1 測試流程
填寫正確登錄信息和驗證碼–>抓取提交數據包–>重復提交該數據包–>查看是否登錄成功–>登錄成功則存在驗證碼重復使用問題
2.2.2 帝國CMS漏洞演示
帝國CMS后台驗證碼顯示重復
(1)測試環境
系統:Windows10
PHPStudy集成環境:PHPv5.3.29+MYSQLv5.5.53
CMS版本:EmpireCMS_6.0
(2)安裝CMS
訪問http://yoursite/e/install/index.php
安裝好后先登錄后台頁面修改后台驗證碼顯示設置,步驟如圖
同時將后台登錄限制增大(eg:100),然后拉到最下方保存設置,退出登錄
(3)測試過程
第一步,輸入正確信息點擊登錄時抓包
第二步,通過修改imageField參數的大小來實現暴力提交,自設一個兩位數數字字典作為payload
第三步,查看任意響應包是否登錄成功
從結果來看,暴力重復提交的數據包均登錄成功,說明存在驗證碼重復使用的問題。
經過暴力重復提交后,客戶端顯示登陸成功
PHP5.2.17下測試結果同5.3.29
2.2.3 CMS漏洞分析
(1)原因
自 PHP 4.2.0 起,不再需要用mt_srand() 給隨機數發生器播種 ,因為現在是由系統自動完成的,導致帝國cms的驗證碼會顯示一樣的字符。
(2)解決方法
在每個文件中找到該行將其刪除或注釋即可。
Seay源碼審計系統中全局搜索mt_srand函數,含有mt_srand的文件為:
2.3 漏洞修復建議
在一次認證成功后服務器端清空認證成功的ssesion
3.驗證碼回顯
3.1 驗證碼直接由客戶端生成,在回顯中顯示,可通過瀏覽器工具直接查看
3.2 分類
3.2.1 在源碼中顯示
F12審計大法,搜索源碼中有無驗證碼
3.2.2 在COOKIE中顯示
抓包時分析COOKIE中是否含有驗證碼
3.3 測試
3.3.1 測試流程
(1)在源碼中顯示
(2)在COOKIE中顯示
3.3.2 在源碼中顯示
3.2.3 在COOKIE中顯示
以某網站找回密碼模塊為例
第一步,填寫好相關信息並確認提交
步驟二:確認提交時抓取數據包
可以看到str_code回顯在請求包中
步驟三:forward發送請求包,跳轉到輸入驗證碼和新密碼頁面
步驟四:填寫從請求包得到的驗證碼,成功修改用戶密碼
防范:驗證碼由服務端生成且保存在服務端,不能通過任何API獲取
4.驗證碼繞過
4.1 漏洞成因
由於邏輯設計缺陷,可繞過驗證,比如直接刪除COOKIE或驗證碼參數可繞過、當驗證不通過清空session時,驗證碼參數值為空時繞過等。
4.2 分類
4.2.1刪除COOKIE繞過
4.3 測試
4.3.1 測試流程
4.3.2 測試環境
4.3.3 CmsEasy演示
CmsEasyv5.5刪除COOKIE繞過驗證
第一步,輸入正確賬戶信息和錯誤驗證碼,登錄時抓包
第二步,刪除COOKIE
客戶端登陸成功
74cms 設計缺陷導致全版本驗證碼繞過
https://www.secpulse.com/archives/26839.html
修復:在檢測用戶驗證碼時,先判斷是否存在,是否為空,再判斷是否正確
5.驗證碼自動識別
這類漏洞主要是指圖片驗證碼,可以通過PKAV工具以及bp插件來識別,也可以用python
二、密碼找回
1.敏感信息泄露
2.郵箱弱token
3.驗證的有效性
4.注冊覆蓋
三、接口盜用
1.重放
四、賬戶越權
1、未授權訪問
2、越權
五、支付漏洞
六、SSRF