JWT介紹及演示

JWT

介紹

cookie(放在瀏覽器)

cookie 是一個非常具體的東西,指的就是瀏覽器里面能永久存儲的一種數據,僅僅是瀏覽器實現的一種數據存儲功能。

cookie由服務器生成,發送給瀏覽器,瀏覽器把cookie以kv形式保存到某個目錄下的文本文件內,下一次請求同一網站時會把該cookie發送給服務器。由于cookie是存在客戶端上的,所以瀏覽器加入了一些限制確保cookie不會被惡意使用,同時不會占據太多磁盤空間,所以每個域的cookie數量是有限的

session(放在服務器)

session 從字面上講,就是會話。這個就類似于你和一個人交談,你怎么知道當前和你交談的是張三而不是李四呢?對方肯定有某種特征(長相等)表明他就是張三。

session 也是類似的道理,服務器要知道當前發請求給自己的是誰。為了做這種區分,服務器就要給每個客戶端分配不同的“身份標識”,然后客戶端每次向服務器發請求的時候,都帶上這個“身份標識”,服務器就知道這個請求來自于誰了。至于客戶端怎么保存這個“身份標識”,可以有很多種方式,對于瀏覽器客戶端,大家都默認采用 cookie 的方式。

服務器使用session把用戶的信息臨時保存在了服務器上,用戶離開網站后session會被銷毀。這種用戶信息存儲方式相對cookie來說更安全,可是session有一個缺陷:如果web服務器做了負載均衡,那么下一個操作請求到了另一臺服務器的時候session會丟失。

token

在Web領域基于Token的身份驗證隨處可見。在大多數使用Web API的互聯網公司中,tokens 是多用戶下處理認證的最佳方式。

以下幾點特性會讓你在程序中使用基于Token的身份驗證

  1. 無狀態、可擴展

  2. 支持移動設備

  3. 跨程序調用

  4. 安全

jwt(json web token)

image-20231208174146988

JWT(JSON Web Token)由三部分組成:頭部(Header)、載荷(Payload)、簽名(Signature)。

頭部(Header):頭部通常由兩部分組成,算法類型和令牌類型。

? 算法類型:指定用于生成簽名的算法,例如 HMAC、RSA 或者 ECDSA。

? 令牌類型:指定令牌的類型,常見的是 JWT。

頭部使用 Base64Url 編碼表示,并作為整個 JWT 的第一部分。頭部的一個示例:

{

“alg”: “HS256”,none

“typ”: “JWT”

}

載荷(Payload):載荷存儲了有關用戶或實體的聲明和其他有關信息。

? 聲明:如用戶 ID、角色、權限等信息。

? 注冊聲明:包含一些標準的聲明(比如發行人、過期時間等)和一些自定義的聲明。

載荷也使用 Base64Url 編碼表示,并作為整個 JWT 的第二部分。載荷的一個示例:

{

“sub”: “1234567890”,

“name”: “John Doe”,

“iat”: 1516239022

}

簽名(Signature):簽名是對頭部和載荷進行簽名的結果,用于驗證 JWT 的完整性和真實性。

? 簽名生成方式:將頭部和載荷進行 Base64Url 編碼后拼接在一起,然后使用指定的加密算法(如 HMAC、RSA)進行簽名,將生成的簽名添加到 JWT 中。

頭部

alg

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

typ

說明這個token的類型為JWT

payload

image-20231208174325991

簽名

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

通信流程

image-20231208174249484

環境

使用webgoat靶場

使用以下代碼拉取環境

java -jar webgoat-server-8.1.0.jar --server.port=8888 --server.address=10.4.7.138

訪問該網址進入靶場

http://10.4.7.138:8888/WebGoat/login

本文打的靶場為jwt tokens

image-20231208163922218

4

此處點票點到8

image-20231208164109569

用戶為jerry

點擊垃圾桶后顯示只有admin用戶才可以

此處開啟bp抓包,

找到剛才發送的post請求包

image-20231208164513479

發給repeater

可以看到這一串jwt

image-20231208164557693

使用jwt.io

將剛才jwt粘貼進去

可以看到右邊解碼的結果

image-20231208164706930

此處需要將加密方式改為none,admin改為true

使用base64編碼完成

image-20231208164907152

image-20231208164943957

去掉等號將結果粘過去到一起

image-20231208165013539

最終使用header和payload部分,包含點

ewogICJhbGciOiAibm9uZSIKfQ.ewogICJpYXQiOiAxNzAyODg5MDQ3LAogICJhZG1pbiI6ICJ0cnVlIiwKICAidXNlciI6ICJKZXJyeSIKfQ.

替換bp中原始部分

發包即可成功

image-20231208165143747

回到網頁重新看一下,發現操作完成變成1

image-20231208165221743

5

將它提供的jwt放進去看看

image-20231208171544816

將jwt寫入一個文本文件

eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJXZWJHb2F0IFRva2VuIEJ1aWxkZXIiLCJhdWQiOiJ3ZWJnb2F0Lm9yZyIsImlhdCI6MTcwMjAyNjAwNywiZXhwIjoxNzAyMDI2MDY3LCJzdWIiOiJ0b21Ad2ViZ29hdC5vcmciLCJ1c2VybmFtZSI6IlRvbSIsIkVtYWlsIjoidG9tQHdlYmdvYXQub3JnIiwiUm9sZSI6WyJNYW5hZ2VyIiwiUHJvamVjdCBBZG1pbmlzdHJhdG9yIl19

另一個為字典文件

victory
secret1
business
washington

然后使用工具進行爆破

hashcat -m 16500 2.txt -a 3 -w 2 1.txt --force

其中

-m 16500 這里的16500對應的就是jwt的token爆破;

-a 3 代表蠻力破解

-w 3 可以理解為高速破解,就是會讓桌面進程無響應的那種高速

2.txt為jwt

1.txt為字典

爆破得到密鑰

image-20231208173014689

修改截至時間和username

image-20231208173237853

然后粘貼過去再將密鑰換成剛剛爆破出來的

最后得到

eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJXZWJHb2F0IFRva2VuIEJ1aWxkZXIiLCJhdWQiOiJ3ZWJnb2F0Lm9yZyIsImlhdCI6MTcwMjAyNzkwNywiZXhwIjoxNzAyMDMzNTUwLCJzdWIiOiJ0b21Ad2ViZ29hdC5vcmciLCJ1c2VybmFtZSI6IldlYkdvYXQiLCJFbWFpbCI6InRvbUB3ZWJnb2F0Lm9yZyIsIlJvbGUiOlsiTWFuYWdlciIsIlByb2plY3QgQWRtaW5pc3RyYXRvciJdfQ.3IMBgQVgvJzL1m7nE3XLXdfF--ja1ouXcjLNdKqvw5g

然后提交jwt即可

image-20231208174005244

7

image-20231208165810892

第七關要求以tom的身份付款

并且給了日志信息提示,可以看到jwt

image-20231208165948663

粘貼過來可得

image-20231208170042238

會發現這個到期時間已經過期了

image-20231208170249353

這個時間格式是unix紀元時間

使用在線工具獲取現在的時間戳,然后base64

image-20231208170625616

eyJhbGciOiJIUzUxMiJ9.ewogICJpYXQiOiAxNTI2MTMxNDExLAogICJleHAiOiAxNzAyMDI2MzYxLAogICJhZG1pbiI6ICJmYWxzZSIsCiAgInVzZXIiOiAiVG9tIgp9.

將該字段的值更改為新的jwt過后即可完成

image-20231208171003749

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/209584.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/209584.shtml
英文地址,請注明出處:http://en.pswp.cn/news/209584.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JavaScript 金額元轉化為萬

function dealNum(price){if (price 0) {return 0元}const BASE 10000const decimal 0const SIZES ["", "萬", "億", "萬億"];let i undefined;let str "";if (price) {if ((price > 0 && price < BASE…

p標簽的水平居中和垂直居中

1行內塊元素水平居中垂直居中 行內元素和行內塊元素水平居中&#xff0c;給其父元素添加text-align:center&#xff1b;所以案例里面給one加了 text-align: center之后span就會水平居中了。在設置span行高和高都是一樣的 20px;這樣就實現上下居中了。 2塊級元素P元素水平居中…

通過命令行輸入參數控制激勵

1)在命令行的仿真參數&#xff08;SIM_OPT&#xff09;加上&#xff1a;“var_a100 var_b99” 2)在環境中調用&#xff1a; $test$plusargs("var_a")&#xff1b;如果命令行存在這個字符&#xff0c;返回1&#xff0c;否則返回0&#xff1b; $value$plusargs(&qu…

vue2 el-input里實現打字機 效果

vue2 el-input里實現打字機 效果 <el-col :span"24" v-if"ifshowOtherDesc""><el-form-item label"分析" prop"otherDesc"><el-input type"textarea" :disabled"disabled" autofocus"t…

藍牙物聯網對接技術難點有哪些?

#物聯網# 藍牙物聯網對接技術難點主要包括以下幾個方面&#xff1a; 1、設備兼容性&#xff1a;藍牙技術有多種版本和規格&#xff0c;如藍牙4.0、藍牙5.0等&#xff0c;不同版本之間的兼容性可能存在問題。同時&#xff0c;不同廠商生產的藍牙設備也可能存在兼容性問題。 2、…

0-1背包問題

二維版: import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader;public class Main {static int N 1010;static int[][] dp new int[N][N]; //dp[i][j] 只選前i件物品,體積 < j的最優解static int[] w new int[N]; //存儲價…

Day03 嵌入式---中斷

目錄 一、簡單介紹 二、總體框架 三、NVIC 3.2 NVIC的寄存器 3.3 中斷向量表 3.4 中斷優先級 3.5 NVIC優先級分組 3.6 NVIC配置 3.6.1、設置中斷分組 3.6.2、初始化 四、EXTI 外部中斷 4.1.EXTI的基本概念 4.2.EXTI的?作原理 4.3 EXTI配置 五、SYSCFG 5.1 SYS…

字符串函數`strlen`、`strcpy`、`strcmp`、`strstr`、`strcat`的使用以及模擬實現

文章目錄 &#x1f680;前言&#x1f680;庫函數strlen??strlen的模擬實現 &#x1f680;庫函數strcpy??strcpy的模擬實現 &#x1f680;strcmp??strcmp的模擬實現 &#x1f680;strstr??strstr的模擬實現 &#x1f680;strcat??strcat的模擬實現 &#x1f680;前言 …

ReactJS和VueJS的簡介以及它們之間的區別

本文主要介紹ReactJS和VueJS的簡介以及它們之間的區別。 目錄 ReactJS簡介ReactJS的優缺點ReactJS的應用場景VueJS簡介VueJS的優缺點VueJS的應用場景ReactJS和VueJS的區別 ReactJS簡介 ReactJS是一個由Facebook開發的基于JavaScript的前端框架。它是一個用于構建用戶界面的庫&…

【C語言】——函數遞歸,用遞歸簡化并實現復雜問題

文章目錄 前言一、什么是遞歸二、遞歸的限制條件三、遞歸舉例1.求n的階乘2. 舉例2&#xff1a;順序打印一個整數的每一位 四、遞歸的優劣總結 前言 不多廢話了&#xff0c;直接開始。 一、什么是遞歸 遞歸是學習C語言函數繞不開的?個話題&#xff0c;那什么是遞歸呢&#xf…

電商平臺商品銷量API接口,30天銷量API接口接口超詳細接入方案說明

電商平臺商品銷量API接口的作用主要是幫助開發者獲取電商平臺上的商品銷量信息。通過這個接口&#xff0c;開發者可以在自己的應用或網站中實時獲取商品的銷量數據&#xff0c;以便進行銷售分析、庫存管理、市場預測等操作。 具體來說&#xff0c;電商平臺商品銷量API接口的使…

RocketMq集成SpringBoot(待完善)

環境 jdk1.8, springboot2.7.3 Maven依賴 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.3</version><relativePath/> <!-- lookup parent from…

vue3 筆記 - 聲明式 一

官網&#xff1a;Vue.js - 漸進式 JavaScript 框架 | Vue.js vue3編寫有聲明式和響應式。該文章僅記錄聲明式。vue3聲明式與vue2相同。 一、生命周期 創建之前 beforeCreate()已創建 created()掛載之前 beforeMount()已掛載 mounted()銷毀之前 beforeUnmount()已銷毀 unmoun…

java面試-Dubbo和zookeeper運行原理

遠離八股文&#xff0c;面試大白話&#xff0c;通俗且易懂 看完后試著用自己的話復述出來。有問題請指出&#xff0c;有需要幫助理解的或者遇到的真實面試題不知道怎么總結的也請評論中寫出來&#xff0c;大家一起解決。 java面試題匯總-目錄-持續更新中 分布式注冊中心和服務調…

Unity中后處理簡介

文章目錄 前言一、后處理的原理二、我們看一下Unity文檔中&#xff0c;內置的后處理前后的效果后處理前&#xff1a;后處理后&#xff1a; 前言 我們在這篇文章中&#xff0c;了解一下Unity中的后處理效果 后期處理概述 一、后處理的原理 在后處理的過程中&#xff0c;我們主…

Java當中常用的算法

文章目錄 算法二叉樹左右變換數據二分法實現 冒泡排序算法插入排序算法快速排序算法希爾排序算法歸并排序算法桶排序算法基數排序算法分治算法漢諾塔問題動態規劃算法引子代碼實現背包問題 KMP算法什么是KMP算法暴力匹配KMP算法實現 今天我們來看看常用的算法&#xff0c;開干。…

《微信小程序開發從入門到實戰》學習四十五

4.4 云函數 云函數是開發者提前定義好的、保存在云端并且將在云端運行的JS函數。 開發者先定義好云函數&#xff0c;再使用微信開發工具將云函數上傳到云空間&#xff0c;在云開發控制臺中可看到已經上傳的云函數。 云函數運行在云端Node.js環境中。 小程序端通過wx.cloud.…

IP地址定位技術為網絡安全建設提供全新方案

隨著互聯網的普及和數字化進程的加速&#xff0c;網絡安全問題日益引人關注。網絡攻擊、數據泄露、欺詐行為等安全威脅層出不窮&#xff0c;對個人隱私、企業機密和社會穩定構成嚴重威脅。在這樣的背景下&#xff0c;IP地址定位技術應運而生&#xff0c;為網絡安全建設提供了一…

Python Selenium 自動登入1688

Python Selenium是一個用于自動化Web瀏覽器操作的庫。它提供了一組功能強大的工具和API&#xff0c;可以模擬用戶在瀏覽器中的行為&#xff0c;并執行各種任務&#xff0c;如點擊、輸入文本、提交表單等。 要使用Python Selenium登錄1688網站&#xff0c;需要進行以下步驟&…

iOS微信小程序虛擬支付解決方案

眾所周知&#xff0c;在IOS微信小程序不支持虛擬支付&#xff0c;一直是困擾IOS開發者、運營最頭疼的問題&#xff0c;主要原因是蘋果不允許IOS微信上架這類產品。導致微信小程序的開發者在IOS上都不能支付虛擬商品&#xff0c;虛擬商品包含了虛擬課程、會員、虛擬書等。 那么…