小迪安全v2023 javaWeb项目

news2024/12/27 12:20:25

小迪安全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.coloradmin.cn/o/1891050.html

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

相关文章

【Spring Boot】关系映射开发(一):一对一映射

关系映射开发(一):一对一映射 1.认识实体间关系映射1.1 映射方向1.2 ORM 映射类型 2.实现 “一对一” 映射2.1 编写实体2.1.1 新建 Student 实体2.1.2 新建 Card 实体 2.2 编写 Repository 层2.2.1 编写 Student 实体的 Repository2.2.2 编写…

轮换IP是什么?——深入了解轮换IP的特点

大家在日常上网时,可能听说过“轮换IP”这个词。那么,轮换IP到底是什么?它有哪些特点?今天,我们就来揭开轮换IP的神秘面纱。 什么是轮换IP? 简单来说,轮换IP是指定期更换上网时使用的IP地址。…

C++字体库开发二

Font: 字体大小,方向,变换 FontContext: 多语言,更新,基础字体,表情 FontDescription: 字重,子样式,名称,底色 FontDir: 字体目标 FontFace: Regular,Bold特殊字重 FontFamily: 字体…

嵌入式c语言3——自定义数据类型

结构体struct,共用体union 结构体中定义变量,首尾地址相连 对于union,其包含变量对起始地址相同 由于其起始地址相同,则改变其中某一变量值时有可能使得另一个变量值发生改变 enum 枚举,可以用来定义一堆整形常量构成…

itk::ShapedNeighborhoodIterator类C2516问题

错误问题&#xff1a; 1>C:\itk\src-5.3.0\Modules\Core\Common\include\itkShapedNeighborhoodIterator.h(183,1): error C2516: itk::ShapedNeighborhoodIterator<TImage,TBoundaryCondition>::ConstIterator: is not a legal base class 1>C:\itk\src-5.3.0\Mo…

解决Visual Studio 一直弹出管理员身份运行问题(win10/11解决办法)

不知道大家是否有遇到这个问题 解决办法也很简单 找到启动文件 如果是快捷方式就继续打开文件位置 找到这个程序启动项 右键 选择 兼容性疑难解答&#xff08;win11 则需要 按住 shift 右键&#xff09; win10 解决办法 这样操作完后就可以了 win11解决办法按以下选择就行

Android触摸事件分发关键点【笔记摘要】

触摸事件分发&#xff1a;就是一个为了解决触摸事件冲突而设置的机制 1.事件类型 ACTION_DOWN -> ACTION_UP / ACTION_CANCEL ACTION_DOWN -> ACTION_MOVE -> ACTION_MOVE -> ACTION_MOVE -> ACTION_UP / ACTION_CANCEL 这个取消事件ACTION_CANCEL它是一种特殊…

Go语言工程管理

本文内容为Go工程创建和配置开发及简单程序示例。 目录 工程管理 GOPATH 配置GOPATH GOROOT 新建系统变量 配置go工程 添加go path 简单的程序实现 程序代码 开始运行 运行结果 内容解析 总结 工程管理 GOPATH go语言的项目&#xff0c;需要有特定的目录结构进行…

Osg中的智能指针和观察指针

目录 1 设计 内容 1 设计 osg中能够使用智能指针的对象都继承自引用计数类Referenced&#xff0c;观察指针(observer_ptr)与智能指针之间通过ObserverSet相互关联&#xff0c;其中obserserver_ptr直接依赖ObeserverSet。 Referenced不直接依赖ObserverSet类&#xff0c;但可…

springboot java.lang.ClassNotFoundException: dm.jdbc.driver.DmDriver 应该如何解决

遇到的问题&#xff1a;项目中引用了外部的达梦jar包 在idea中正常使用 也能找到dm.jdbc.driver.DmDriver 驱动 但是当通过jenkins 构建部署到服务器上 总是报 ClassNotFoundException: dm.jdbc.driver.DmDriver 找不到驱动 应用到的驱动代码如下格式 排查步骤 1.首先看你的项…

hibernate与jpa学习

jpa是一个规范&#xff0c;hibernate是jpa的实现&#xff0c;是一种框架。 hibernate&#xff1a; ORM框架/持久层框架&#xff08;Object Relational Mapping&#xff09; 它是是一个轻量级开放源代码的对象关系映射框架&#xff0c;hibernate可以自动生成SQL语句&#xff0…

什么是yum源?如何对其进行配置?

哈喽&#xff0c;大家好呀&#xff01;这里是码农后端。今天来聊一聊Linux下的yum源及其配置相关的内容。简单来说&#xff0c;yum源就相当于一个管理软件的工具&#xff0c;可以想象成一个很大的仓库&#xff0c;里面存放着各种我们所需要的软件包及其依赖。 一、Linux下软件包…

MySQL:保护数据库

保护数据库 1. 用户1.1 创建用户1.2 查看用户1.3 删除用户1.4 修改密码 2. 权限2.1 授予权限2.2 查看权限2.3 撤销权限 之前都是介绍本地数据库而你自己就是数据库的唯一用户&#xff0c;所以不必考虑安全问题。但实际业务中数据库大多放在服务器里&#xff0c;你必须妥善处理好…

git提交实战

以新项目为例&#xff0c;如何在新项目新分支提交代码。 1.查看文件所在位置 git init 2.克隆项目到本地并完成身份配置 3.将需要新增的文件放到指定目录路径下 4.进入新克隆的文件 cd XXX 5.切换分支 git checkout XXX 6.标红者即为新提交的文件 git status 7.加入 git …

研发驱动 再谱新篇丨美格智能南通研发中心正式成立

近日&#xff0c;美格智能全资设立的众格智能技术&#xff08;南通&#xff09;有限公司&#xff0c;正式在江苏省南通市紫琅科技城揭牌成立&#xff0c;此举也标志着继上海、西安、深圳之后&#xff0c;美格智能研发力量布局再谱新篇&#xff1a;美格智能南通研发中心正式成立…

液压传动知识

绪论 工作原理 依靠运动者的液体的压力能传递动力液体在受调节、控制状态下工作&#xff0c;液压传动和控制同等重要液压传动以液体为工作介质 液压系统组成 动力元件&#xff1a;机械能转换为液体压力能。液压泵控制元件&#xff1a;对液体流动方向、压力、流量进行控制或…

Flask框架下图像的base64编码接收和解码流程

一、Flask简介 Flask是一个轻量级的可定制框架&#xff0c;使用Python语言编写&#xff0c;较其他同类型框架更为灵活、轻便、安全且容易上手。它可以很好地结合MVC模式进行开发&#xff0c;开发人员分工合作&#xff0c;小型团队在短时间内就可以完成功能丰富的中小型网站或We…

39. 自由空间光通信中光学天线的设计

设计要求如下&#xff1a; 设计一接收光学天线&#xff0c;满足以下技术要求&#xff1a; 焦距&#xff1a;f60mm&#xff0c;D/f1/1.2&#xff0c;视场角2w0.1&#xff0c;激光波长&#xff1a;λ0.850μm&#xff0c;激光漂移波长&#xff1a;0.848~0.852μm。 光学特性特…

基于物品的协同过滤算法

预估用过户对候选物品的兴趣 计算物品相似度 召回通道 快速做召回条件

Empire Lupin One

信息收集&#xff1a; nmap存活&#xff1a; nmap端口&#xff1a; nmap服务&#xff1a; nmap漏扫&#xff1a; 访问 robots.txt 文件发现目录&#xff1a; 源码&#xff1a; web&#xff1a; 源码并没有藏东西&#xff0c; 用wfuzz发现新页面&#xff1a; icex64 在创建ss…