JWT安全及WebGoat靶场

JWT 安全

cookie(放在浏览器)

cookie 是一个非常具体的东西,指的就是浏览器里面能永久存储的一种数据,仅仅是浏览器实现的一种数据存储功能。

cookie 由服务器生成,发送给浏览器,浏览器把 cookie 以 kv 形式保存到某个目录下的文本文件内,下一次请求同一网站时会把该 cookie 发送给服务器。由于 cookie 是存在客户端上的,所以浏览器加入了一些限制确保 cookie 不会被恶意使用,同时不会占据太多磁盘空间,所以每个域的 cookie 数量是有限的

image-20231207173911651

session(放在服务器)

session 从字面上讲,就是会话。这个就类似于你和一个人交谈,你怎么知道当前和你交谈的是张三而不是李四呢?对方肯定有某种特征(长相等)表明他就是张三。

session 也是类似的道理,服务器要知道当前发请求给自己的是谁。为了做这种区分,服务器就要给每个客户端分配不同的“身份标识”,然后客户端每次向服务器发请求的时候,都带上这个“身份标识”,服务器就知道这个请求来自于谁了。至于客户端怎么保存这个“身份标识”,可以有很多种方式,对于浏览器客户端,大家都默认采用 cookie 的方式。

服务器使用 session 把用户的信息临时保存在了服务器上,用户离开网站后 session 会被销毁。这种用户信息存储方式相对 cookie 来说更安全,可是 session 有一个缺陷:如果 web服务器做了负载均衡,那么下一个操作请求到了另一台服务器的时候 session 会丢失。

token

在 Web 领域基于 Token 的身份验证随处可见。在大多数使用 Web API 的互联网公司中,

tokens 是多用户下处理认证的最佳方式。

以下几点特性会让你在程序中使用基于 Token 的身份验证

  1. 无状态、可扩展
  2. 支持移动设备
  3. 跨程序调用
  4. 安全

token采用加密的方式操作cookie值

jwt(json(数据格式) web token)

image-20231207203049462

JWT(JSON Web Token)由三部分组成:头部(Header)、载荷(Payload)、签名(Signature)

头部(Header):头部通常由两部分组成,算法类型和令牌类型

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

令牌类型:指定令牌的类型,常见的是 JWT。

头部使用 Base64Url 编码表示,并作为整个 JWT 的第一部分。

头部的一个示例:

{
 "alg": "HS256",none   #表示签名时使用的加密方式,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

有载荷就是存放有效信息的地方。这个名字像是特指飞机上承载的货品,这些有效信息包含三个部分

  • 标准中注册的声明
  • 公共的声明
  • 私有的声明

标准中注册的声明(建议但不强制使用):

  • iss: jwt签发者
  • sub:jwt所面向的用户
  • aud: 接收jwt的一方
  • exp: jwt的过期时间,这个过期时间必须要大于签发时间
  • nbf: 定义在什么时间之前,该jwt都是不可用的
  • iat: jwt的签发时间
  • jti: jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击

签名

服务器有一个不会发送给客户端的密码(secret),用头部中指定的算法对头部和声明的内容用

此密码进行加密,生成的字符串就是 JWT 的签名

搭建WebGoat靶场

前期准备

image-20231207212251530

启动靶场

java -jar webgoat-server-8.1.0.jar --server.port=8888 --server.address=192.168.63.129(kali的IP

image-20231207180643484

注意大小写

kali的IP:8888/WebGoat

访问靶场

image-20231207193815695

注册用户名和密码

image-20231207194048070

image-20231207194439015

  • 登录成功

  • 开启JWT tokens靶场

image-20231207194645100

WebGoat靶场通过

第4关

目的:伪造签名并清空

解题思路:

  • 修改 payload 数据,admin 修改为 true,将加密方式修改为 none

  • 加密,然后再解密

步骤:

首先登录Tom用户

image-20231207195218312

选择一个并开始投票,发现可以一致投票

image-20231207195800014

点击删除,提示只有admin用户才能清空

image-20231207200109571

利用bp开始抓包

image-20231207200623432

右击发送到Repeater

image-20231207200831802

将cookie的值利用进行JWT解码

image-20231207201039860

image-20231207201357130

利用base64编码,将HS512改为nonefalse改为true

image-20231207201730882

image-20231207202029275

分别将修改后的base64编码放在Encoded中

image-20231207202151133

将HEADER和PAYLOAD的Encoded放在bp的cookie中

image-20231207202340734

提示已经成功完成任务

image-20231207202427904

回到页面查看,删除成功

image-20231207202653914

第5关

目的:修改 exp 有效时间

前期准备:

image-20231207212336185

WebGoat的爆破密钥1.txt

image-20231207175817420

步骤:

找到cookie值

image-20231207213310115

用Encoded打开

image-20231207213409908

将cookie值放入jwt.txt文档中

image-20231207213446689

用管理员身份执行打开终端

hashcat -m 16500 jwt.txt -a 3 -w 3 1.txt --force
#-m 16500   16500对应的就是 jwt 的 token 爆破;
#-a 3         代表蛮力破解
#-w 3        可以理解为高速破解,就是会让桌面进程无响应的那种高速
#jwt.txt    是我把题目要求破解的 token 保存到的文件

爆破成功

image-20231207215455813

将cookie值利用base64编码进行修改

  • 修改有效时间
  • 修改时间戳

image-20231207220005766

  • 修改uaername为WebGoat

image-20231207220311441

修改密钥为bnsiness

将base64编码好的放在encoded中

image-20231207221341001

复制cookie值,并提交

image-20231207220630823

任务成功完成

image-20231207221136010

第7关

步骤:

image-20231207205106993

image-20231207205210085

将这个cookie值进行解码

image-20231207205511629

利用时间戳将有效期1526217811改为2023年12月7号21点30分

image-20231207205832609

利用base64编码分别改为1701955800none

image-20231207210212665

image-20231207210422966

image-20231207210515692

分别将修改后的base64编码放在Encoded中

image-20231207210639472

点击Checkout进行抓包,并提示我们不是一个JWT令牌,请重试

image-20231207210927092

右击发送到Repeater

image-20231207211136685

Authorization提示我们可以承载空值,然后将cookie值放入Authorization

image-20231207211507458

提示我们成功的完成任务, tom 帮我们付钱成功

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/227020.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

文件同步及实现简单监控

1. 软件简介 rsync rsync 是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程 数据同步备份的优秀工具。在同步备份数据时,默认情况下,Rsync 通过其 独特的“quick check”算法,它仅同步大小或者最后修改时间发生变化的文 件或…

CentOS上配置和管理HTTP服务器的工具和实用程序

在CentOS系统上,有多个工具和实用程序可以帮助你配置和管理HTTP服务器。以下是一些常用的工具和实用程序: Apache HTTP服务器: Apache是CentOS上最常用的HTTP服务器之一。它是一个开源的Web服务器软件,具有高度的可配置性和可扩…

在jupyter notebook中修改其他文件的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

dell服务器安装PERCCLI

因在linux 系统中无法查看系统磁盘的raid级别,也无法得知raid状态,需要安装额外的包来监控,因是dell服务器,就在dell网站中下载并安装 1、下载链接:驱动程序和下载 | Dell 中国https://www.dell.com/support/home/zh-…

ELK(四)—els基本操作

目录 elasticsearch基本概念RESTful API创建非结构化索引(增)创建空索引(删)删除索引(改)插入数据(改)数据更新(查)搜索数据(id)&…

查看端口号是否被占用

windows10查看端口号是否被占用及解除占用的常用命令 netstat -ano:查看所有端口号占用情况 netstat -ano |findstr “XXX”:查看端口号为XXX的占用情况,如下: 得到进程号为12160的进程正在占用本地的9090端口号(如果只…

Python+requests+unittest+excel实现接口自动化测试框架

在刚刚进入测试行业的时候,最开始也是做功能测试,我想很多伙伴和我一样,觉得自动化测试都很高端,很神秘。迫不及待的想去学习作自动化测试。 以前比较常用数据库python做自动化,后面发现excel个人觉得更加适合&#x…

flex布局的flex为1到底是什么

参考博客:flex:1什么意思_公孙元二的博客-CSDN博客 flex:1即为flex-grow:1,经常用作自适应布局,将父容器的display:flex,侧边栏大小固定后,将内容区flex:1,内…

算术运算(这么简单?进来坐坐?)

先热热身 算术运算,也称为四则运算,包括加法、减法、乘法和除法。此外,算术运算还包括乘方和开方。 在算术中,加减被视为一级运算,乘除被视为二级运算,乘方和开方被视为三级运算。在一道算式中,…

GDPU 数据结构 天码行空13

文章目录 一、【实验目的】二、【实验内容】三、实验源代码四、实验结果五、实验总结 一、【实验目的】 (1) 理解插入排序算法的实现过程; (2)理解不同排序算法的时间复杂度及适用环境; (3)了解算法性能…

华为数通---配置Smart Link负载分担案例

定义 Smart Link,又叫做备份链路。一个Smart Link由两个接口组成,其中一个接口作为另一个的备份。Smart Link常用于双上行组网,提供可靠高效的备份和快速的切换机制。 目的 下游设备连接到上游设备,当使用单上行方式时&#x…

算能 MilkV Duo开发板实战——opencv-mobile (迷你版opencv库)的移植和应用

前言 OpenCV是一种开源的计算机视觉和机器学习软件库,旨在提供一组通用的计算机视觉工具。它用于图像处理、目标识别、人脸识别、机器学习等领域,广泛应用于计算机视觉任务。 OpenCV-Mobile是OpenCV库的轻量版本,专为移动平台(A…

服务器感染了.DevicData-D-XXXXXXXX勒索病毒,如何确保数据文件完整恢复?

引言: 勒索病毒成为网络安全的严峻挑战,而最新的.DevicData-D-XXXXXXXX勒索病毒更是引起广泛关注。本文将深入介绍.DevicData-D-XXXXXXXX勒索病毒的特征,提供恢复被其加密的数据文件的方法,并分享预防措施,以确保您的数…

单细胞seurat-细胞比例分析-画图详细教程

大家好,今天我们来画单细胞中最简单的细胞比例图~ 1.老规矩,先加载pbmc数据 dir.create("~/gzh/细胞比例") setwd("~/gzh/细胞比例")subset_datareadRDS("~/gzh/pbmc3k_final.rds") table(stringr::str_split(string c…

Bounding boxes augmentation for object detection

Different annotations formats Bounding boxes are rectangles that mark objects on an image. There are multiple formats of bounding boxes annotations. Each format uses its specific representation of bouning boxes coordinates 每种格式都使用其特定的边界框坐标…

TCP聊天

一、项目创建 二、代码 Client类 package tcp; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; import java.util.Scanner; public class Client { public sta…

Elasticsearch- 环境-Windows集群部署和环境-Linux单节点部署和Linux集群部署-03

Elasticsearch环境 环境-简介 单机 & 集群 单台 Elasticsearch 服务器提供服务,往往都有最大的负载能力,超过这个阈值,服务器性能就会大大降低甚至不可用,所以生产环境中,一般都是运行在指定服务器集群中。除了…

STM32 cubeMX 呼吸灯实验

文章代码使用 HAL 库。 文章目录 一、1.PWM原理二、LED 原理图三、使用cubemx 配置 led四、PWM 相关函数五、PWM占空比占空比计算六、PWM 呼吸灯重要代码总结 呼吸灯 一、1.PWM原理 PWM全称为脉冲宽度调制(Pulse Width Modulation),是一种常…

软著项目推荐 深度学习验证码识别 - 机器视觉 python opencv

文章目录 0 前言1 项目简介2 验证码识别步骤2.1 灰度处理&二值化2.2 去除边框2.3 图像降噪2.4 字符切割2.5 识别 3 基于tensorflow的验证码识别3.1 数据集3.2 基于tf的神经网络训练代码 4 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 &#x…

php循环遍历删除文件下文件和目录

前言 今天在写一个demo的时候需要循环删除目录下文件。如下想删temp下文件和目录。 具体实现 private function deleteDir($dirPath){if (is_dir($dirPath)) {$contents scandir($dirPath);// 如果是空目录if (count($contents) 2) {rmdir($dirPath);return;}// 不是空目录f…