業務安全漏洞-登錄認證實戰總結(一)
用戶名枚舉
漏洞描述
一般存在于系統登錄或注冊頁面,利用登陸系統中的漏洞可以試驗出是否存在的哪些用戶名,返回不同的出錯信息可枚舉出系統中存在的用戶名。
此處以注冊頁面為例,通過手工的方式輸入賬號查看回顯信息。
在注冊頁面輸入admin用戶提示當前用戶名已被占用。

查看數據包,如果存在該用戶名則返回0,如果不存在則返回1

發送到暴力破解模塊導入字典,設置響應內容

得出3個用戶

修復方案:
對系統登錄失敗提示語句表達內容進行統一的模糊描述,如用戶名或密碼錯誤。
用戶批量注冊
漏洞危害描述
網站的攻擊者可以通過批量注冊用戶,能夠實施大規模非法操作,如搶優惠券、惡意刷單等。這給服務商造成了直接的經濟損失,而大量的垃圾用戶也會占用系統資源,增加系統運行壓力。


修復建議:
- 增強驗證碼機制,為防止驗證碼被破解,可以適當增加驗證碼生成的強度,例如中文圖形驗證碼。
- 限制一定時間內IP登錄失敗次數。
驗證碼可繞過
常見的驗證方式有:
- 驗證碼(字符或數值計算)
- 滑動驗證(滑塊或特定路徑)
- 點擊驗證(按照要求點擊字符或圖案)等
該驗證碼只在前端驗證,因此可以在后端繞過。

可以看到驗證碼的包未發送到后端驗證,只在前端校驗。

修復方案:
可從以下幾個方面預防認證繞過:
- 增加驗證碼
- 不使用前端驗證
- 密碼通過加密算法加密
- 失敗次數多加鎖
- 密碼強度增加
爆破加密口令
漏洞描述
認證過程中傳輸未加密或過于簡單。
MD5加密:
從前端js代碼查看,發現password字段加密中使用了md5進行了加密。


但這并不能給攻擊者帶來限制。只需設置加密載荷就可以。

成功得到密碼

AES對稱加密:
輸入賬號admin 密碼admin
抓包發現密碼變了

查看前端js,發現使用了AES對稱加密,并且密鑰和偏移量都可見。
加密流程 base64——》AES-128-CBC——》base64

核對一下,開始逆推
先base64解密

在使用AES解密,再次得到base64編碼

得到明文。

抓包設置:
使用到的插件burpcrypto
https://github.com/whwlsfb/BurpCrypto
插件上設置

此處載荷按順序設置,AES調用剛剛插件設置的外部擴展

三次加密

破解成功

修復方案:
建議按照網站的密級要求,需要對密碼傳輸過程中進行加密得使用加密的方式傳輸,如使用HTTPS, 但加密的方式增加成本,或許會影響用戶體驗。
如果不用 HTTPS,可以在網站前端用 Javascript 做非對稱密碼加密,加密后再進行傳輸。