認證的方式:
session+cookie、jwt、token
Session認證機制
需要配合Cookie才能實現。由于 Cookie默認不支持跨域訪問 ,所以,當涉及到前端跨域請求后端接口的時候,需要做 很多額外的配置,才能實現跨域Session認證。
JWT(英文全稱:JSON Web Token)
是一個開放標準(RFC 7519),用于在雙方之間安全地表示聲明。一種無狀態的認證機制,通常用于授權和信息交換。是目前最流行的跨域認證解決方案。
authlab-Leaky JWT

Header:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
Payload:
eyJsZXZlbCI6ImFkbWluIiwicGFzc3dvcmQiOiIyYWM5Y2I3ZGMwMmIzYzAwODNlYjcwODk4ZTU0OWI2MyIsInVzZXJuYW1lIjoiam9lIn0.
Signature:
6j3NrK-0C7K8gmaWeB9CCyZuQKfvVEAl4KhitRN2p5k?
解密后,得到賬號和MD5加密的密碼:
?解密得,為Password1?
從安全性的角度來看,至少存在兩個潛在的問題。
1.缺乏機密性-我們能夠輕松解碼有效載荷payload(和報頭header)。
2.用戶插入另一個操作(例如刪除)并繞過授權?,Signature可以設為none。
具體實現方式
1.算法為none
2.算法修改
3.簽名失敗問題
4.暴力破解
5.密鑰泄露
6.令牌刷新
攻擊思路
首先找到需要JWT鑒權后才能訪問的頁面,如個人資料頁面,將該請求包重放測試:
1.未授權訪問:刪除Token后仍然可以正常響應對應頁面
2.敏感信息泄露:通過JWt.io解密出Payload后查看其中是否包含敏感信息,如弱加密的密碼等
3.破解密鑰+越權訪問:通過JWT.io解密出Payload部分內容,通過空加密算法或密鑰爆破等方式實現重新簽發Token并修改Payload部分內容,重放請求包,觀察響應包是否能夠越權查看其他用戶資料
4.檢查Token時效性:解密查看payload中是否有exp字段鍵值對(Token過期時間),等待過期時間后再次使用該Token發送請求,若正常響應則存在Token不過期
5.通過頁面回顯進行探測:如修改Payload中鍵值對后頁面報錯信息是否存在注入,payload中kid字段的目錄遍歷問題與sql注入問題
authlab-JWT None Algorithm
看到一個存在的用戶成功登錄
抓包修改header中alog值為none,嘗試用不存在的用戶登錄
成功訪問,實現越權訪問
ctfhub
弱密鑰
嘗試用admin和admin登錄,得到token
?alg設為none,role中guest換成管理員admin