Burp靶場JWT學習筆記1

JWT(JSON Web?Token)

從其名字就可以看出來,它具有表示身份的作用,其本質是將用戶信息儲存到一串json字符串中再將其編碼得到一串token

JWT由三部分組成,分別是

Header,Payload,Signatrue

JWT=Base64(Header).Base64(Payload).加密函數(base64UrlEncode(header)+"."+base64UrlEncode(payload),secret)

例如:?

Header部分

{

"kid":"4ff7ccb9-58a2-47de-8f91-cfc7582ebe41",

"alg":"RS256"

}

?Payload部分

{

"iss":"portswigger",

"exp":1745253912,

"sub":"administrator"

}

Signature部分

#一大堆加密后的信息(簽名)

u9e8ddhECxkGzuvGk9u78LcmBmLK4apCDh84l2BgYjauMcWkzSF2A9rqDEzqdBDiBMyHkUYeLiVF7Nu7km94PfMskQlIeVxuSF0MxI3a7I53mJ7woT3ypQm3Jw6VAOlqapLEC7VRa3Vfgv7H_dJpbFJkrHwE9KfW3TzdQeVAz-QKglJritq5WAPXP4oGAu5lSK8QUVECvUcnTYYzGS_TYYuOewbqgiq1w_dm5wn0M1LEYu1QM1fu7l8kOcDnkw7nMxeBM3iiZpAESvhd2myN_MCuIFFkC5OKghsWqIRehMKG3qR1X2YWnem04_ki6YMRA1jqEcvp5acH58rhGrDEyQ

1.JWT authentication bypass via unverified signature

本關要求我們進入管理員界面/admin并且刪除用戶carlos

我們訪問admin,會發現提示只有administrator可以訪問

那么我們登錄wiener用戶并且抓包,在放行了第一個包后第二個抓到的包就是我們所要的包

我們要去到管理員的/admin界面,就需要以管理員身份去訪問

先登錄到我們的賬號wiener

這一步的目的是先讓我們得到自己的cookie以查看jwt信息以讓我們可以去分析其構成

再訪問/admin界面,同時抓包

我們在burp里雙擊jwt的內容可以在inspector欄里看到對應的信息以及對應的解碼結果,這里我們就查看payload信息,也就是第一個句點.后的內容,可以看到里面有個sub參數對應的值為wiener

我們將其修改為administrator后應用

再放行這個包會發現訪問/admin成功,網站將我們認成了administrator

我們要刪除carlos用戶,執行刪除操作也要以管理員的身份執行,具體方法和前面一樣,抓包修改jwt信息為administrator

放行后成功過關

2.JWT authentication bypass via flawed signature verification

本關要求也和上一關一樣要去/admin里刪除carlos

但是本關還會校驗jwt里的簽名信息,所以單單修改用戶名是沒有用的,我們還是先登錄wiener用戶然后訪問/admin再抓包

修改payload部分里的用戶名為administrator

再修改header里的加密方式為none

修改為none后我們需要把jwt里的簽名信息給刪掉,但別把句點.也刪了,不然jwt格式錯誤

隨后放行,發現成功訪問admin界面

刪除carlos時也要重復前面一樣的操作

放行后成功過關

3.JWT authentication bypass via weak signing key

本關要求也一樣是刪除carlos

同時將簽名加密類型修改為none給過濾掉了,也就是不得不破解加密用的密鑰了,并且本關也是提示弱簽名,可以爆破

同樣的步驟登錄賬號,訪問/admin然后抓包,此時將jwt信息復制出來,使用hashcat工具破解

使用命令

hashcat -a 0 -m 16500 <jwt信息> <爆破字典>

得到密鑰為secret1

于是前往json編輯網站JSON Web Tokens - jwt.io進行修改

將原有的jwt復制進去后修改decoded的內容,encoded的內容就是我們要的

將其替換原有的jwt

放行后成功繞過驗證

再以一樣的操作刪除carlos用戶

放行后成功過關

4.JWT authentication bypass via jwk header injection

本關也一樣要求在/admin下刪除carlos

并且本關也同樣限制了none加密方式,同時加密很復雜很難爆破,那么根據本關題目提示,應該是通過修改jwt的header部分實現繞過,題目提示服務器支持jwk也就是JSON Web Key,它可以作為jwt里header的一部分,在這里用于數字簽名身份驗證

一下就是一串jwk結構(以RSA為例)

{"kty": "RSA",           // 密鑰類型(RSA/EC/oct)"alg": "RS256",         // 算法(如 RS256、ES256、HS256)"kid": "2023-01",       // 密鑰唯一標識(用于輪換)"n": "Modulus...",      // RSA 模數(Base64URL)"e": "AQAB",            // RSA 公鑰指數(通常為 65537)"d": "PrivateExponent", // 私鑰參數(僅私鑰包含)"p": "Prime1",          // 私鑰參數(僅私鑰包含)"q": "Prime2",          // 私鑰參數(僅私鑰包含)"use": "sig",           // 用途(sig 簽名/enc 加密)
}

如果服務器沒有對用于驗證的公鑰做篩選(比如白名單),我們可以通過構造管理員的簽名來欺騙服務器認為我們是administrator

一樣我們先登錄wiener,然后抓取前往/admin的包

我們這里要先安裝一個burp插件叫做JWT editor

安裝后我們抓的包會發現多了一欄選項叫做json web token也就是jwt

我們要構造jwk,就需要用到jwt editor來生成一個rsa密鑰

進入jwt editor界面在右邊選擇new rsa key

選擇類型為JWK,然后生成

隨后我們要先修改我們的身份信息為administrator

然后在json web token欄內的攻擊方式里選擇Embedded JWK(嵌入式JWK)

注意要先修改身份信息在配置攻擊方式,不然jwk驗證出來會是修改之前的wiener

隨后選擇我們剛生成的rsa密鑰,通過kid來選擇

確認后可以看到我們的JWT信息已經被修改

隨后放行,發現我們已經成功進入/admin了

然后刪除carlos,也使用和前面一樣的操作,密鑰就不用重新生成了

注意要先修改身份信息再配置攻擊模式

放行后成功過關

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

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

相關文章

第53.5講 | 小項目實戰:用 SHAP 值解釋農作物產量預測模型 [特殊字符][特殊字符]

目錄 ? 項目背景 &#x1f4e6; 所用工具 &#x1f4c1; 數據字段&#xff08;模擬&#xff09; &#x1f9d1;?&#x1f4bb; 代碼實現步驟 &#x1f3af; 解讀與啟發 &#x1f9e0; 項目拓展建議 ? 項目背景 我們使用一個簡化的玉米產量數據集&#xff08;可模擬實…

極狐GitLab 合并請求依賴如何解決?

極狐GitLab 是 GitLab 在中國的發行版&#xff0c;關于中文參考文檔和資料有&#xff1a; 極狐GitLab 中文文檔極狐GitLab 中文論壇極狐GitLab 官網 合并請求依賴 (PREMIUM ALL) 在極狐GitLab 16.6 中引入了對復雜合并依賴關系的支持&#xff0c;通過名為 remove_mr_blockin…

Django DRF實現用戶數據權限控制

在 Django DRF 中使用 ModelViewSet 時&#xff0c;若需實現用戶僅能查看和操作自己的數據詳情&#xff0c;同時允許所有認證用戶訪問列表&#xff0c;需結合權限類和動態權限分配。以下是具體步驟&#xff1a; 1. 自定義對象權限類 創建一個 IsOwner 權限類&#xff0c;檢查…

【數據結構】——線性表之單鏈表

一、單鏈表的概念和結構 1、單鏈表的概念&#xff1a; 鏈表也是屬于我們的線性表中的一種&#xff0c;其物理結構上是不一定連續的&#xff0c;但是邏輯結構上是一定連續的&#xff0c;所以其是沒辦法像前面的順序表一樣通過找到下一個元素的&#xff0c;其是通過指針來找到下…

線程函數庫

pthread_create函數 pthread_create 是 POSIX 線程庫&#xff08;pthread&#xff09;中的一個函數&#xff0c;用于創建一個新的線程。 頭文件 #include <pthread.h> 函數原型 int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*s…

2.5 橋梁橋面系及附屬結構施工

2.5.1 橋面系施工 1.排水設施 設置縱橫坡及泄水孔&#xff0c;減少橋面積水、防排結合。匯水槽、泄水孔頂面高程低于橋面鋪裝10-15mm。泄水孔邊緣設滲水盲溝泄水管下端至少應伸出構筑物底面100-150mm。泄水管通過豎向管道直接引至地面或雨水管線。豎向管道抱箍、卡環、定位卡…

docker 代理配置沖突問題

問題描述 執行 systemctl show --property=Environment docker 命令看到有如下代理配置 sudo systemctl show --property=Environment docker Environment=HTTP_PROXY=http://127.0.0.1:65001 HTTPS_PROXY=http://127.0.0.1:65001 NO_PROXY=127.0.0.1,docker.io,ghcr.io,uhub…

MATLAB基礎應用精講-【基礎知識篇】發布和共享 MATLAB 代碼

目錄 MATLAB發布代碼---生成文檔pdf 分節符對發布文件的分節 實時腳本 Matlab workspace與m腳本數據共享 發布和共享 MATLAB 代碼 在實時編輯器中創建和共享實時腳本 發布 MATLAB 代碼文件 (.m) 添加幫助和創建文檔 發布 MATLAB 代碼文件 (.m) 可創建包括您的代碼、注釋…

JDBC 批處理與事務處理:提升數據操作效率與一致性的密鑰

目錄 一. JDBC批量添加數據 1. 什么是批量添加數據 2. 實現數據的批量添加 a. 方式一&#xff1a;不分塊 二. JDBC事務處理 1. 什么是事務 2. JDBC事務處理實現 三. 總結 前言 本文來講解JDBC的批處理和事務處理 這對數據的安全性和準確性以及高效率提供很好的辦法 話不…

C++實現Atbash密碼

詳細說明 埃特巴什密碼是一種替換密碼&#xff0c;在該密碼中字母表中的字母是反向對應的。例如&#xff0c;A 會被替換為 Z&#xff0c;B 會被替換為 Y&#xff0c;依此類推。 #include <cassert> /// for assert #include <iostream> /// for IO operations #…

QuecPython+GNSS:實現快速定位

概述 QuecPython 結合 GNSS&#xff08;全球導航衛星系統&#xff09;模塊為物聯網設備提供開箱即用的定位能力解決方案。該方案支持 GPS/北斗/GLONASS/Galileo 多系統聯合定位&#xff0c;為物聯網開發者提供從硬件接入到云端服務的全棧式定位解決方案。 優勢特點 多體系定…

leetcode刷題日記——逆波蘭表達式求值

[ 題目描述 ]&#xff1a; [ 思路 ]&#xff1a; 借助棧的特性&#xff0c;遇見數字就將這個數壓入棧內&#xff0c;遇見符號&#xff0c;就從棧中彈出兩個數&#xff0c;進行相應的運算&#xff0c;然后將結果壓入棧中運行如下 int evalRPN(char** tokens, int tokensSize…

firewalld 詳解

firewalld 詳解 firewalld 是 Linux 系統中一個動態防火墻管理工具&#xff0c;取代了傳統的 iptables&#xff0c;提供更靈活、動態的規則配置&#xff0c;支持運行時修改且無需重載服務。以下是其核心概念、常用操作及示例指南&#xff1a; 一、核心概念 區域&#xff08;Zo…

面向高性能運動控制的MCU:架構創新、算法優化與應用分析

摘要&#xff1a;現代工業自動化、汽車電子以及商業航天等領域對運動控制MCU的性能要求不斷提升。本文以國科安芯的MCU芯片AS32A601為例&#xff0c;從架構創新、算法優化到實際應用案例&#xff0c;全方位展示其在高性能運動控制領域的優勢與潛力。該MCU以32位RISC-V指令集為基…

支付寶小程序組件與頁面構造器使用指南:從頁面到組件的正確遷移

引言 在支付寶小程序開發中&#xff0c;我們經常會遇到需要將頁面組件化的情況。本文將通過一個實際案例&#xff08;將 /pages/plugin/device 從頁面遷移到組件&#xff09;&#xff0c;深入分析支付寶小程序中頁面和組件的區別&#xff0c;以及正確的遷移方式。我們將從問題…

26-算法打卡-字符串-右旋字符串-第二十六天

1 題目說明 字符串的右旋轉操作是把字符串尾部的若干個字符轉移到字符串的前面。給定一個字符串 s 和一個正整數 k&#xff0c;請編寫一個函數&#xff0c;將字符串中的后面 k 個字符移到字符串的前面&#xff0c;實現字符串的右旋轉操作。 例如&#xff0c;對于輸入字符串 &qu…

fastbev mmdetection3D 角度和方向損失

角度/方向損失 sin(a?b)sinacosb?cosasinb config參數 dir_offset0.7854, # pi/4 dir_limit_offset0, box編解碼 # Copyright (c) OpenMMLab. All rights reserved. import torchfrom mmdet.core.bbox import BaseBBoxCoder from mmdet.core.bbox.builder import BBOX_COD…

極狐GitLab 如何 cherry-pick 變更?

極狐GitLab 是 GitLab 在中國的發行版&#xff0c;關于中文參考文檔和資料有&#xff1a; 極狐GitLab 中文文檔極狐GitLab 中文論壇極狐GitLab 官網 揀選(cherry-pick)更改 (BASIC ALL) 在 Git 中&#xff0c;cherry-pick 是從一個分支獲取一個提交并將其添加為另一個分支的…

java多線程(7.0)

目錄 ?編輯 定時器 定時器的使用 三.定時器的實現 MyTimer 3.1 分析思路 1. 創建執行任務的類。 2. 管理任務 3. 執行任務 3.2 線程安全問題 定時器 定時器是軟件開發中的一個重要組件. 類似于一個 "鬧鐘". 達到一個設定的時間之后, 就執行某個指定好的…

優化非線性復雜系統的參數

非線性項組合的系統 對于系統中的每一個復雜擬合&#xff0c;即每一個殘差函數&#xff0c;都能表示為非線性方程的趨勢&#xff0c;例如較為復雜的系統函數組&#xff0c; from optimtool.base import sp, np x sp.symbols("x1:5") res1 0.5*x[0] 0.2*x[1] 1.…