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

WebGoat 靶场 JWT tokens 四 五 七关通关教程

文章目录

  • webGoat靶场
    • 第 四 关 修改投票数
    • 第五关
    • 第七关 你购买书,让Tom用户付钱

webGoat靶场

越权漏洞

webgoat-server-8.1.0.jar复制到kali虚拟机中

image-20230914205837708

sudo java -jar webgoat-server-8.1.0.jar --server.port=8888

解释:

  • java:这是用于执行Java应用程序的Java运行时命令。

  • -jar:此选项用于指定你正在运行 JAR 文件。

  • webgoat-server-8.1.0.jar:这是你要执行的 JAR 文件的名称。它是 WebGoat 服务器 JAR 文件,这是一个故意不安全的 Web 应用程序,用于安全培训和测试。

  • --server.port=8888:这是传递到 WebGoat 服务器的命令行参数。它将服务器的端口设置为 8888,这意味着 WebGoat 应用程序将在端口 8888 上侦听传入请求。

http://localhost:8888运行此命令将在端口 8888 上启动 WebGoat 应用程序,允许你通过 Web 浏览器导航到或 来访问它http://127.0.0.1:8888,具体取决于你的本地配置。

image-20230914210301108

访问页面:

image-20230914210417044

选择JWT tokens :

image-20230914210539342

第 四 关 修改投票数

image-20230914210739745

点击上图中的右上角删除,bp抓包:

image-20230914213104931

复制其JWT的三个部分:头部(Header)、载荷(Payload)和签名(Signature)也就是Cookie字段的access_token的值

eyJhbGciOiJIUzUxMiJ9.eyJpYXQiOjE2OTU1NjEyMDAsImFkbWluIjoiZmFsc2UiLCJ1c2VyIjoiVG9tIn0.91qHC1bmg_L1WQ4-jrCPUanghSqdauz9E7Mwbae-IDpYgnahr3G60iVI1xA-pEGGyxhfc7E9wbDn_TAjsGqb9Q

到jwt.io 网站中粘贴,查看:

image-20230914213238645

将其中的alg值改为none ,表示不使用签名算法,那么第三部分的签名就没有意义了。然后将admin 值改为true

image-20230914212356826

因为我们把alg的值改为了none,所以第三部分的签名认证就没用了,将其前两部分复制(注意要加上连接第三段的点),替换掉bp中的jwt:

image-20230914213941676

发包:

image-20230914214322349

成功重置:

image-20230914214415669

第五关

image-20231008204421678

假设我们有以下令牌,尝试找出密钥并提交一个新密钥,用户名更改为 WebGoat

eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJXZWJHb2F0IFRva2VuIEJ1aWxkZXIiLCJhdWQiOiJ3ZWJnb2F0Lm9yZyIsImlhdCI6MTY5Njc2ODg2NCwiZXhwIjoxNjk2NzY4OTI0LCJzdWIiOiJ0b21Ad2ViZ29hdC5vcmciLCJ1c2VybmFtZSI6IlRvbSIsIkVtYWlsIjoidG9tQHdlYmdvYXQub3JnIiwiUm9sZSI6WyJNYW5hZ2VyIiwiUHJvamVjdCBBZG1pbmlzdHJhdG9yIl19.8y1cNmgQ46VK-0Myq8chx7SqHMLZ4PhEsQZZxanxvMM

首先分析一下题目,题目说需要找出密钥,并且用户名更改为 WebGoat,重点就是在找出密钥

将 token 解密观察

通过jwt 解密网站解密

image-20231008205426014

发现在 header 头部的加密方式还是 HS256,这不是重点
重点在 payload 声明中的 exp 和 username,exp 是 token 过期的时间戳,时间戳需要修改到当前时间之后,也就让它不过期
而 username 就是题目要我们修改的东西,我们需要把 username 修改为 WebGoat

删除编码后的=,得到修改后的 token

eyJhbGciOiJIUzI1NiJ9.ewogICJpc3MiOiAiV2ViR29hdCBUb2tlbiBCdWlsZGVyIiwKICAiYXVkIjogIndlYmdvYXQub3JnIiwKICAiaWF0IjogMTY5Njc2ODg2NCwKICAiZXhwIjogMTY5Njc3MTEwMCwKICAic3ViIjogInRvbUB3ZWJnb2F0Lm9yZyIsCiAgInVzZXJuYW1lIjogIldlYkdvYXQiLAogICJFbWFpbCI6ICJ0b21Ad2ViZ29hdC5vcmciLAogICJSb2xlIjogWwogICAgIk1hbmFnZXIiLAogICAgIlByb2plY3QgQWRtaW5pc3RyYXRvciIKICBdCn0.8y1cNmgQ46VK-0Myq8chx7SqHMLZ4PhEsQZZxanxvMM

但是因为加密方式还是 HS256 ,我们还需要密钥才能得到签名,所以需要用到一个 github 上的工具jwtcrack在本地暴力破解密钥,用这个工具需要准备一个字典,这里我们的是top1000.txt

我们将题目给的完整的 jwt-token 复制,并且在工具目录打开 cmd,执行以下命令:

python crackjwt.py JWT top1000.txt

这里我执行的是:

python crackjwt.py eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJXZWJHb2F0IFRva2VuIEJ1aWxkZXIiLCJhdWQiOiJ3ZWJnb2F0Lm9yZyIsImlhdCI6MTY2ODE3NjEyNiwiZXhwIjoxNjY4MTc2MTg2LCJzdWIiOiJ0b21Ad2ViZ29hdC5vcmciLCJ1c2VybmFtZSI6IlRvbSIsIkVtYWlsIjoidG9tQHdlYmdvYXQub3JnIiwiUm9sZSI6WyJNYW5hZ2VyIiwiUHJvamVjdCBBZG1pbmlzdHJhdG9yIl19.8QnyWHtsJgvKPAROiFDESES3vSViT_HB2TTreY4rP10 top1000.txt

破解成功:

image-20231008214351061

将密钥 victory 填入解密网站,然后直接在网站修改 exp 与 username,会自动生成新的 jwt-token

image-20231008215415355

复制左侧生成的 token 直接填入关卡即可成功伪造用户信息

伪造成功:

image-20231008215548377

第七关 你购买书,让Tom用户付钱

image-20230914214950782

点击上图中的here

image-20230914215308068

找到了一个jwt:

eyJhbGciOiJIUzUxMiJ9.eyJpYXQiOjE1MjYxMzE0MTEsImV4cCI6MTUyNjIxNzgxMSwiYWRtaW4iOiJmYWxzZSIsInVzZXIiOiJUb20ifQ.DCoaq9zQkyDH25EcVWKcdbyVfUL4c9D4jRvsqOqvi9iAd4QuqmKcchfbU8FNzeBNF9tLeFXHZLU4yRkq-bjm7Q

查看:

image-20230914215409435

我们先结账抓包一下:

image-20230914215615196

抓包:

image-20230914215702283

显示不是有效的JWT令牌,请重试。

我们把上面找到的jwt放进去:

image-20230914215920409

显示解决方案不正确,显示JWT已经过期了。JWT的payloadexp表示jwt的过期时间。

image-20230914220441315

也可以找工具换算一下

image-20230914220553174

已经过期。

我们改一下时间戳:

1694707000

image-20230914220958422

修改JWT:将alg置为none,exp置为1694707000

image-20230914221425817

粘贴到bp中(注:不需要复制其jwt的第三部分,但要跟上连接第三部分的.):

image-20230914221831226

http://www.lryc.cn/news/185899.html

相关文章:

  • 【单元测试】如何使用 JUnit5 框架?
  • C#封装、继承和多态的用法详解
  • 数据结构与算法(持续更新)
  • HDLbits: ece241 2014 q4
  • LuatOS-SOC接口文档(air780E)-- gmssl - 国密算法
  • 【线性代数及其应用 —— 第一章 线性代数中的线性方程组】-1.线性方程组
  • vue实现拖拽排序
  • IS-IS
  • 【MySQL】为什么使用B+树做索引
  • php 安装mongodb扩展模块,rdkafka模块
  • 【数据结构】初探时间与空间复杂度:算法评估与优化的基础
  • SpringCloud Alibaba - Sentinel 限流规则(案例 + JMeter 测试分析)
  • uniapp 条件编译 APP 、 H5 、 小程序
  • 深度学习——权重衰减(weight_decay)
  • nignx如何部署让前端不用清缓存就可以部署
  • CSS3实现动画加载效果
  • springboot定时任务Scheduled使用和弊端分析
  • openGauss学习笔记-93 openGauss 数据库管理-访问外部数据库-oracle_fdw
  • 【Git】Git下载安装环境配置 下载速度慢的解决方案
  • 常见源协议介绍
  • 大数据概述(林子雨慕课课程)
  • ES6 class类关键字super
  • C++并发与多线程(4) | 传递临时对象作为线程参数的一些问题Ⅰ
  • CentOS Integration SIG 正式成立
  • 智能AI系统源码ChatGPT系统源码+详细搭建部署教程+AI绘画系统+已支持OpenAI GPT全模型+国内AI全模型
  • 软考程序员考试大纲(2023)
  • 【重拾C语言】七、指针(一)指针与变量、指针操作、指向指针的指针
  • Kafka源码简要分析
  • react 按住ctrl键,点击时会出现菜单的问题修复
  • 【虚拟机栈】