当前位置: 首页 > news >正文

burpsuite攻防实验室-JWT漏洞

JWT authentication bypass via unverified signature(通过未验证签名绕过 JWT 身份验证)

本练习使用基于 JWT 的机制来处理会话。由于实现缺陷,服务器不会验证它收到的任何 JWT 的签名。

要解决该实验室问题,请修改您的会话令牌以访问 的管理面板 ,然后删除用户。/admincarlos

您可以使用以下凭据登录自己的帐户:wiener:peter

  1. 在实验环境中,登录你自己的账号。

  1. 在 Burp(抓包工具)中,进入 “代理(Proxy)”>“HTTP 历史记录(HTTP history)” 标签页,找到登录后的请求。观察到你的会话 Cookie 是一个 JWT(JSON Web Token),对应的请求为 “GET /my-account”。

  1. 双击该令牌的载荷(payload)部分,在 “检查器(Inspector)” 面板中查看其解码后的 JSON 格式。

注意到 “sub” 声明(claim)中包含你的用户名。将此请求发送到 “Burp 中继器(Burp Repeater)”。

  1. 在 Burp 中继器中,将请求路径修改为 “/admin” 并发送请求。观察到只有以 “administrator”(管理员)用户身份登录时,才能访问管理员面板

  1. 再次选中 JWT 的载荷部分。在检查器面板中,将 “sub” 声明的值从 “wiener”(普通用户名,示例)修改为 “administrator”,然后点击 “应用更改(Apply changes)”。

  1. 再次发送请求。观察到你已成功访问管理员面板

  1. 在响应内容中,找到用于删除 “carlos”(目标用户)的 URL(地址),该 URL 为 “/admin/delete?username=carlos”。

向此端点(endpoint)发送请求,即可完成该实验。

 

JWT authentication bypass via flawed signature verification

(通过存在缺陷的签名验证绕过JWT身份验证 )

  1. 在实验环境中,登录你自己的账号。
  1. 在 Burp(抓包工具)中,进入 “代理(Proxy)”>“HTTP 历史记录(HTTP history)” 标签页,找到登录后的 “GET /my-account” 请求。观察到你的会话 Cookie 是一个 JWT(JSON Web Token)。

  1. 双击该令牌的载荷(payload)部分,在 “检查器(Inspector)” 面板中查看其解码后的 JSON 格式。注意到 “sub” 声明(claim)中包含你的用户名。将此请求发送到 “Burp 中继器(Burp Repeater)”

  1. 在 Burp 中继器中,将请求路径修改为 “/admin” 并发送请求。观察到只有以 “administrator”(管理员)用户身份登录时,才能访问管理员面板。

  1. 再次选中 JWT 的载荷部分。在检查器面板中,将 “sub” 声明的值修改为 “administrator”,然后点击 “应用更改(Apply changes)”。

  1. 选中 JWT 的头部(header)部分,接着通过检查器将 “alg” 参数(算法参数)的值修改为 “none”,点击 “应用更改(Apply changes)”。

  1. 在消息编辑器(message editor)中,删除 JWT 中的签名(signature)部分,但需注意保留载荷后面的末尾点号(.)。

  1. 发送请求,观察到你已成功访问管理员面板。
  2. 在响应内容中,找到用于删除 “carlos”(目标用户)的 URL(地址),该 URL 为 “/admin/delete?username=carlos”。向此端点(endpoint)发送请求,即可完成该实验。

 

JWT authentication bypass via weak signing key
(通过弱签名密钥绕过 JWT 身份验证)

第 1 部分 - 暴力破解密钥

  1. 在 Burp 中,从 BApp 商店加载 JWT 编辑器扩展(JWT Editor extension)。
  2. 在实验环境中,登录你自己的账号,并将登录后的 “GET /my-account” 请求发送到 Burp 中继器(Burp Repeater)。
  3. 在 Burp 中继器中,将请求路径修改为 “/admin” 并发送请求。观察到只有以 “administrator”(管理员)用户身份登录时,才能访问管理员面板。
  4. 复制该 JWT(JSON Web Token)并对其密钥进行暴力破解。你可以使用 hashcat 工具,通过以下命令实现:
    hashcat -a 0 -m 16500 <你的JWT令牌> /密钥字典文件路径/jwt.secrets.list
    若使用 hashcat,命令执行后会输出 JWT 令牌,其后紧跟对应的密钥。若操作无误,结果会显示该弱密钥为 “secret1”。

注意:若多次运行此命令,需添加 “--show” 参数,才能再次在控制台输出结果。

第 2 部分 - 生成伪造的签名密钥

  1. 使用 Burp 解码器(Burp Decoder),对前一部分中暴力破解得到的密钥进行 Base64 编码。
  2. 在 Burp 中,进入 “JWT 编辑器密钥”(JWT Editor Keys)标签页,点击 “新建对称密钥”(New Symmetric Key)。
  3. 在弹出的对话框中,点击 “生成”(Generate),以 JWK(JSON Web Key)格式生成一个新密钥。注意:无需选择密钥长度,后续系统会自动更新。
  4. 将生成的密钥中 “k” 属性的值替换为前面 Base64 编码后的密钥。
  5. 点击 “确定”(OK)保存该密钥。

第 3 部分 - 修改并签名 JWT

  1. 返回 Burp 中继器中 “GET /admin” 请求的页面,切换到由扩展生成的 “JSON Web Token” 消息编辑标签页。
  2. 在载荷(payload)中,将 “sub” 声明(claim)的值修改为 “administrator”。
  3. 在该标签页底部,点击 “签名”(Sign),然后选择上一部分中你生成的密钥。
  4. 确保勾选 “不修改头部”(Don't modify header)选项,然后点击 “确定”(OK)。此时,修改后的令牌已使用正确的签名完成签名。
  5. 发送请求,观察到你已成功访问管理员面板。
  6. 在响应内容中,找到用于删除 “carlos” 的 URL(地址),即 “/admin/delete?username=carlos”。向此端点(endpoint)发送请求,即可完成该实验。

http://www.dtcms.com/a/366063.html

相关文章:

  • 【串口过滤工具】串口调试助手LTSerialTool v3.12.0发布
  • 哈希表-271.存在重复元素-力扣(LeetCode)
  • C++算法专题学习:模拟算法
  • 写C++十年,我现在怎么设计类和模块?(附真实项目结构)
  • 66这才是真正懂C/C++的人,写代码时怎么区分函数指针和指针函数?
  • 技术方案之Mysql部署架构
  • 极空间打造 “超级中枢”,从书签笔记到聊天分享,一键全搞定!
  • 【单片机day02】
  • Swift 解法详解:LeetCode 370《区间加法》
  • C++ 5
  • 硬件基础与c51基础
  • 【Linux】分离线程
  • 如何下载免费的vmware workstation pro 17版本?
  • 小游戏公司接单难?这几点原因与破局思路值得看看
  • Pytorch笔记一之 cpu模型保存、加载与推理
  • AI隐私保护:当大模型遇上“隐身术”——差分隐私+同态加密,让模型“看不见原始数据”
  • LoRA微调分词器 应用模板(75)
  • test命令与参数
  • Python基础(⑧APScheduler任务调度框架)
  • 数据结构从青铜到王者第十九话---Map和Set(2)
  • git之分支
  • 如何创建交换空间
  • 【音视频】视频秒播优化实践
  • 无穿戴动捕如何深度结合AI数据分析,实现精准动作评估?
  • 代码随想录刷题Day48
  • Linux 字符设备驱动框架学习记录(三)
  • 数学建模-非线性规划(NLP)
  • STM32HAL 快速入门(十七):UART 硬件结构 —— 从寄存器到数据收发流程
  • DOM常见的操作有哪些?
  • Day34 UDP套接字编程 可靠文件传输与实时双向聊天系统