关于JWT的赛题
前言:
關(guān)于JWT的賽題之前確實是沒有接觸過,一開始遇到也多少有點懵,靜下心來總結(jié)些這類的賽題!
0x00:JWT簡介
JWT(JSON Web Token) 是一個非常輕巧的規(guī)范,通過這個規(guī)范,可以傳遞可靠的安全信息,JWT常被用于前后端分離,可以和Restful API配合使用,常用于構(gòu)建身份認證機制。
JWT的數(shù)據(jù)格式分為三個部分: headers , payloads,signature(簽名),它們使用.點號分割頭部(Header)用于描述JWT的最基本的信息 { “typ”: “JWT”, “alg”: “HS256″ } #base64 編碼之后,形成頭部載荷(Payload)也是json形式,如: {"sub": "1234567890","name": "John Doe","iat": 1516239022 } 簽名: 將上面的兩個編碼后的字符串用.連接在一起 提供一個密鑰(secret)用頭部所規(guī)定的算法加密就可以形成一個新的字符串同樣 需要base64編碼,以上將三個部分用 .拼接在一起,就形成了一個完整的JWT令牌驗證
1.首先服務(wù)端會產(chǎn)生一個key,然后以這個key作為密鑰,使用第一部分選擇的加密方式,對第一部分和第二部分拼接的結(jié)果進行加密,然后把加密結(jié)果放到第三部分。
2.服務(wù)器每次收到信息都會對它的前兩部分進行加密,然后比對加密后的結(jié)果是否跟客戶端傳送過來的第三部分相同,如果相同則驗證通過,否則失敗。
0x01:JWT的安全問題
繞過這種驗證機制
后端若支持none算法,header中的alg字段可被修改為none,去掉JWT中的signature數(shù)據(jù)(僅剩header + .+ payload + .) 然后直接提交到服務(wù)端去。
RS256是非對稱加密算法,HS是對稱加密算法,如果JWT內(nèi)部的函數(shù)支持的RS256算法,同時又支持HS256算法,而且如果已知公鑰的話,將算法改成HS256,那么后端就會用這個公鑰當作密鑰來加密
JWT是以base64編碼傳輸?shù)?#xff0c;雖然密鑰不可見,但是其數(shù)據(jù)記本上是明文傳輸?shù)?#xff0c;如果傳輸了重要的內(nèi)容,可以base64解碼然后獲取其重要的信息。
如果密鑰比較短的話,已知加密算法,通過暴力破解的方式,可以得到其密鑰。
工具:
jwt.io
JWT Tool
ISCC2020-未知的風險
題目描述:
抓包發(fā)現(xiàn)有一個token,base64解碼發(fā)現(xiàn)是JWT
使用這個網(wǎng)站來更改其中的數(shù)據(jù),題目提示說是只有user可以進入,那就更改下id
https://jwt.io/
但這里我怎么都找不都key值,只能通過爆破來試試
但這個太長了,爆破時間太長,就不爆破了,換另外一種思路,看了一些師傅們關(guān)于這方面的博客,寫的有低版本的JWT,密鑰也可以直接設(shè)為none,來進行偽造,可以嘗試一下:
先改下id把紫色的部分復制下來,然后在將頭部的格式進行base64加密,進行拼接
顯示了這個說明繞過去了,包發(fā)送去發(fā)現(xiàn)是個登陸
這個格式一看就是XML注入
payload:
解碼即可
待遇到新的再進行補充!
總結(jié)
- 上一篇: 计算机网络复习_物理层
- 下一篇: Docker_镜像