Day69:WEB攻防-Java安全JWT攻防Swagger自动化算法签名密匙Druid泄漏

news2024/9/22 1:16:15

目录

Java安全-Druid监控-未授权访问&信息泄漏

黑盒发现

白盒发现

攻击点

Java安全-Swagger接口-导入&联动批量测试

黑盒发现

白盒发现

自动化发包测试

自动化漏洞测试

Java安全-JWT令牌-空算法&未签名&密匙提取

识别 JWT

方式一:人工识别

方式二:Burp插件识别

解析JWT数据

JWT安全

空加密算法(攻击头部不使用加密)

未校验签名(攻击签名不使用签名认证)

暴力破解密钥(攻击签名知道密钥实现重组)

其他安全参考:(源码泄漏密匙,Kid注入等)

CTF-JWT

Web345(None空加密算法)

Web346(None算法绕过签名)

Web347(弱口令密钥获取)

Web348(爆破密钥上题一样)

Web349(公钥私钥泄露)

Web350(密钥混淆攻击RS256=>HS256)

黑盒JWT测试


知识点

1、Java安全-Druid监控-未授权访问&信息泄漏

2、Java安全-Swagger接口-文档导入&联动批量测试

2、Java安全-JWT令牌攻防-空算法&未签名&密匙提取

Java安全-Druid监控-未授权访问&信息泄漏

Druid是阿里巴巴数据库事业部出品,为监控而生的数据库连接池。Druid提供的监控功能,监控SQL的执行时间、监控Web URI的请求、Session监控。当开发者配置不当时就可能造成未授权访问漏洞。

参考:https://developer.aliyun.com/article/1260382

攻击点:

  • 直接拼接URL路径,尝试能否直接未授权访问系统功能点。
  • 结合泄露URL路径和Session信息,利用BurpSuite进行尝试登录。
  • 利用Cookie编辑器替换Session,再次访问后台路径尝试进入后台。
     

黑盒发现

白盒发现

在项目源码配置文件中搜索druid关键字

攻击点

直接拼接URL路径,尝试能否直接未授权访问系统功能点。

结合泄露URL路径和Session信息,利用BurpSuite进行尝试登录

利用Cookie编辑器替换Session,再次访问后台路径尝试进入后台。

Java安全-Swagger接口-导入&联动批量测试

Swagger是一个用于生成、描述和调用RESTful接口的Web服务。就是将项目中所有(想要暴露的)接口展现在页面上,并可以进行接口调用和测试的服务。所以可以对这个接口进行漏洞测试,看是否存在未授权访问、sql注入、文件上传等漏洞。由于接口太多,一个个接口测试的话太费时间,所以一般会采用自动化接口漏洞安全测试。

自动化发包测试,Postman

自动化漏洞测试,联动BurpSuite Xray等

黑盒发现

白盒发现

自动化发包测试

如果postman上有出现200的响应,那么就有可能是一个未授权接口

自动化漏洞测试

联动BurpSuite Xray

 

也可以在BP上看有没有200响应的数据包,也有可能会是一个未授权接口

bp联动xray

Java安全-JWT令牌-空算法&未签名&密匙提取

JSON Web Token(JWT)。它遵循JSON格式,将用户信息加密到token里,服务器不保存任何用户信息,只保存密钥信息,通过使用特定加密算法验证token,通过token验证用户身份。基于token的身份验证可以替代传统的cookie+session身份验证方法。这使得JWT成为高度分布式网站的热门选择,在这些网站中,用户需要与多个后端服务器无缝交互。

JWT攻击

识别 JWT

JWT由三部分组成:表头,有效载荷,签名

标头(Header)
Header是JWT的第一个部分,是一个JSON对象,主要声明了JWT的签名算法,如"HS256”、"RS256"等,以及其他可选参数,如"kid"、"jku"、"x5u"等
alg字段通常用于表示加密采用的算法。如"HS256"、"RS256"等
typ字段通常用于表示类型
还有一些其他可选参数,如"kid"、"jku"、"x5u"等

有效载荷(Payload)
Payload是JWT的第二个部分,这是一个JSON对象,主要承载了各种声明并传递明文数据,用于存储用户的信息,如id、用户名、角色、令牌生成时间和其他自定义声明。
iss:该字段表示jwt的签发者。
sub:该jwt面向的用户。
aud:jwt的接收方。
exp:jwt的过期时间,通常来说是一个时间戳。
iat:jwt的签发时间,常来说是一个时间戳。
jti:此jwt的唯一标识。通常用于解决请求中的重放攻击。该字段在大多数地方没有被提及或使用。因为使用此字段就意味着必须要在服务器维护一张jti表, 当客户端携带jwt访问的时候需要在jti表中查找这个唯一标识是否被使用过。使用这种方式防止重放攻击似乎让jwt有点怪怪的感觉, 毕竟jwt所宣称的优点就是无状态访问

签名(Signature)
Signature是对Header和Payload进行签名,具体是用什么加密方式写在Header的alg 中。同时拥有该部分的JWT被称为JWS,也就是签了名的JWT。
对Header和Payload进行签名,具体是用什么加密方式写在Header的alg中。
同时拥有该部分的JWT被称为JWS,也就是签了名的JWT。

第一部分:对 JSON 的头部做 base64 编码处理得到
第二部分:对 JSON 类型的 payload 做 base64 编码处理得到
第三部分:分别对头部和载荷做base64编码,并使用.拼接起来
使用头部声明的加密方式,对base64编码前两部分合并的结果加盐加密处理,作为JWT

在线解析:https://jwt.io/
BURP插件:Hae 或 JSON Web Tokens

方式一:人工识别

方式二:Burp插件识别

Hae(需要自己下载项目)

JSON Web Tokens(BP商店有,支持识别解析)

解析JWT数据

JWT在线解析:https://jwt.io/

BP官方插件-JSON Web Tokens,上面已有介绍

JWT安全

空加密算法(攻击头部不使用加密)

签名算法可被修改为none,JWT支持将算法设定为"None"。如果"alg"字段设为"None",那么签名会被置空,这样任何token都是有效的。

未校验签名(攻击签名不使用签名认证)

某些服务端并未校验JWT签名,可以尝试修改payload后然后直接请求token或者直接删除signature再次请求查看其是否还有效。

暴力破解密钥(攻击签名知道密钥实现重组)

针对是对称加密算法(非对称没有用)
非对称要使用方法:从源码获取公钥私钥文件

某些签名算法,例如HS256(HMAC+SHA-256),会像密码一样使用一个任意的、独立的字符串作为秘密密钥。这个秘钥如被轻易猜到或暴力破解,则攻击者能以任意的头部和载荷值来创建JWT,然后用密钥重新给令牌签名。

其他安全参考:(源码泄漏密匙,Kid注入等)

参考文章:https://blog.csdn.net/weixin_44288604/article/details/128562796

CTF-JWT

JWT利用项目:https://github.com/ticarpi/jwt_tool

项目命令帮助
# 使用None算法
python3 jwt_tool.py JWT_HERE -X a

# 自定义修改生成
python3 jwt_tool.py JWT_HERE -T

# 使用字典破解
python3 jwt_tool.py JWT_HERE -C -d dictionary.txt

# 指定密码测试
python3 jwt_tool.py JWT_HERE -C -p password_here

Web345(None空加密算法)

签名算法可被修改为none,JWT支持将算法设定为 "None" 。如果 "alg" 字段设为 "None" ,那么签名会被置空,这样任何token都是有效的。

Web346(None算法绕过签名)

某些服务端并未校验JWT签名,可以尝试修改payload后然后直接请求token或者直接删除signature再次请求查看其是否还有效。

解题思路:alg强制设置为none绕过签名

JWT利用项目-jwt_tool

Web347(弱口令密钥获取)

针对是对称加密算法(非对称没有用)

非对称要使用方法:获取源码或者公钥私钥文件

某些签名算法,例如HS256(HMAC+SHA-256),会像密码一样使用一个任意的、独立的字符串作为秘密密钥。这个秘钥如被轻易猜到或暴力破解,则攻击者能以任意的头部和载荷值来创建JWT,然后用密钥重新给令牌签名。

JWT利用项目-jwt_tool

知道密匙之后肯定要重新生成JWT呀,如何重新生成?
使用 JWT在线解析:https://jwt.io/来重新生成

Web348(爆破密钥上题一样)

同上

Web349(公钥私钥泄露)

下载JS源码后用Webstorm打开

公钥私钥泄露,访问/private.key、/public.key得到公钥密钥

源码中私钥生成jwt,利用公钥解密jwt,只要有私钥就可以重新生成JWT
test.py

import jwt
public = open('private.key', 'r').read()
payload={"user":"admin"}
print(jwt.encode(payload, key=public, algorithm='RS256'))

注意源码中公匙解密的条件

Web350(密钥混淆攻击RS256=>HS256)

下载源码后使用Webstorm打开

RS256算法改为HS256(非对称密码算法=>对称密码算法)
HS256算法使用密钥为所有消息进行签名和验证。
而RS256算法则使用私钥对消息进行签名并使用公钥进行身份验证。

test.js

var jwt = require('jsonwebtoken');
var fs = require('fs');
var privateKey = fs.readFileSync('./public.key');
var token = jwt.sign({ user: 'admin' }, privateKey, { algorithm: 'HS256' });
console.log(token)

黑盒JWT测试

首先找到需要JWT鉴权后才能访问的页面,如个人资料页面,将该请求包重放测试:

  1. 未授权访问:删除Token后仍然可以正常响应对应页面
  2. 敏感信息泄露:通过JWt.io解密出Payload后查看其中是否包含敏感信息,如弱加密的密码等
  3. 破解密钥+越权访问:通过JWT.io解密出Payload部分内容,通过空加密算法或密钥爆破等方式实现重新签发Token并修改Payload部分内容,重放请求包,观察响应包是否能够越权查看其他用户资料
  4. 检查Token时效性:解密查看payload中是否有exp字段键值对(Token过期时间),等待过期时间后再次使用该Token发送请求,若正常响应则存在Token不过期
  5. 通过页面回显进行探测:如修改Payload中键值对后页面报错信息是否存在注入,payload中kid字段的目录遍历问题与sql注入问题

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

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

相关文章

#Linux(环境变量)

(一)发行版:Ubuntu16.04.7 (二)记录: (1)查看环境变量 (2)修改环境变量 第一种方法:直接使用命令设置(立即生效,只会作用…

基于MATLAB的灰色神经网络预测订单需求

%% 清空环境变量 clc clear %% 36个样本,每个样本是6个月的销售量 load data%% 数据累加作为网络输入 [n,m]size(X); for i1:ny(i,1)sum(X(1:i,1));y(i,2)sum(X(1:i,2));y(i,3)sum(X(1:i,3));y(i,4)sum(X(1:i,4));y(i,5)sum(X(1:i,5));y(i,6)sum(X(1:i,6)); end%% …

儿童饰品上亚马逊需什么认证

注意了!近期,亚马逊在抽查儿童首饰,被抽查到没有相关认证的产品将面临产品被下架等处罚! 违反政策 如果您未在适用的截止日期之前提供所需信息,亚马逊可能会: 移除相关商品信息 暂停您添加新商品和/或商…

打造稳定高效的会员系统:技术架构解析与优化策略

随着互联网时代的发展和用户需求的变化,会员系统成为了各行各业企业实现用户粘性和增长的重要手段。一个稳定高效的会员系统架构能够帮助企业更好地管理会员数据、提供个性化服务和增加用户价值。本文将深入探讨会员系统的技术架构,分析其重要性和挑战&a…

(一)基于IDEA的JAVA基础1

Java是一门面向对象的编程语言,不仅吸收了C语言的各种优点,还摒弃了C里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论&#xff0…

【效率提升】IDEA中书签功能的妙用

这里写目录标题 1.概述2.书签功能介绍2.1.书签创建和删除2.2.书签列表2.3.自定义书签名2.4.带标签的书签创建2.5.标签快速跳转(1到9)2.6.其他标签快捷键2.7.其他补充 3.写到最后 1.概述 在多年的代码开发工作中,有一些问题困扰我很长的时间&…

【使用redisson完成延迟队列的功能】使用redisson配合线程池完成异步执行功能,延迟队列和不需要延迟的队列

1. 使用redisson完成延迟队列的功能 引入依赖 spring-boot-starter-actuator是Spring Boot提供的一个用于监控和管理应用程序的模块 用于查看应用程序的健康状况、审计信息、指标和其他有用的信息。这些端点可以帮助你监控应用程序的运行状态、性能指标和健康状况。 已经有了…

电子科技大学链时代工作室招新题C语言部分---题号H

1. 题目 最有操作的一道题,有利于对贪心算法有个初步了解。 这道题的开篇向我们介绍了一个叫汉明距离的概念。 汉明距离指的就是两个相同长度的字符串的不同字符的个数。 例如,abc和acd,b与c不同,c与d不同,所以这两个…

【Linux C | 多线程编程】线程的创建、线程ID、线程属性

😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 ⏰发布时间⏰:2024-03-22 0…

LiDAR 点云数据综合指南

LiDAR 是光探测和测距的缩写,它彻底改变了各个领域的数据采集。它生成密集 3D 点云的能力为我们的世界提供了无与伦比的洞察力。 但如此丰富的信息也带来了复杂性,特别是在理解不同类型的激光雷达点云数据时。本指南旨在成为您的一站式资源,阐明其中的细微差别,并使您能够…

python基础——对序列的通用操作【+和*、in、切片操作、separator.join(iterable)】

📝前言: 我们已经学习了python数据容器中的列表,元组以及字符串。而他们都属于序列 (序列是指:内容连续,有序,可以用下标索引访问的数据容器) 在之前已经介绍了不少操作方法&#xf…

工作需求,Vue实现登录

加油&#xff0c;新时代打工人&#xff01; vue 2.x Element UI <template><div class"body" :style"{background-image: url(${require(/assets/images/login.png)})}"><el-form :rules"rules" ref"loginForm" :mode…

线性表:关于链表(主要以单链表为例)的相关理解和应用

多清澈这天空 晴雨相拥 同心逐梦&#xff01; 坚守我信心 一路出众&#xff01;&#xff01; 首先&#xff0c;按照惯例&#xff0c;欢迎大家边听歌边观看本博客 ▶ 紫荆花盛开 (163.com)&#xff08;建议复制链接&#xff0c;浏览器打开&#xff0c;csdn打开太慢了&#x…

mysql数据类型和常用函数

目录 1.整型 1.1参数signed和unsigned 1.2参数zerofill 1.3参数auto_increment 2.数字类型 2.1floor()向下取整 2.2随机函数rand() 2.3重复函数repeat() 3.字符串类型 3.1length()查看字节长度&#xff0c;char_length()查看字符长度 3.2字符集 3.2.1查看默认字符…

工程信号的去噪和(分类、回归和时序)预测

&#x1f680;【信号去噪及预测论文代码指导】&#x1f680; 还为小论文没有思路烦恼么&#xff1f;本人专注于最前沿的信号处理与预测技术——基于信号模态分解的去噪算法和深度学习的信号&#xff08;回归、时序和分类&#xff09;预测算法&#xff0c;致力于为您提供最精确、…

MySql实战--深入浅出索引(下)

在开始这篇文章之前&#xff0c;我们先来看一下这个问题&#xff1a; 在下面这个表T中&#xff0c;如果我执行 select * from T where k between 3 and 5&#xff0c;需要执行几次树的搜索操作&#xff0c;会扫描多少行&#xff1f; 下面是这个表的初始化语句。 图1 InnoDB的索…

第 6 章 ROS-xacro练习(自学二刷笔记)

重要参考&#xff1a; 课程链接:https://www.bilibili.com/video/BV1Ci4y1L7ZZ 讲义链接:Introduction Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程 6.4.3 Xacro_完整使用流程示例 需求描述: 使用 Xacro 优化 URDF 版的小车底盘模型实现 结果演示: 1.编写 X…

ChatGPT已经掌控了全局:不仅写论文的在用ChatGPT,同行评审也在用ChatGPT!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;所以创建了“AI信息Gap”这个公众号&#xff0c;专注于分享AI全维度知识…

分库分表场景下多维查询解决方案(用户+商户)

在采用分库分表设计时&#xff0c;通过一个PartitionKey根据散列策略将数据分散到不同的库表中&#xff0c;从而有效降低海量数据下C端访问数据库的压力。这种方式可以缓解单一数据库的压力&#xff0c;提升了吞吐量&#xff0c;但同时也带来了新的问题。对于B端商户而言&#…

【Python爬虫】网络爬虫:信息获取与合规应用

这里写目录标题 前言网络爬虫的工作原理网络爬虫的应用领域网络爬虫的技术挑战网络爬虫的伦理问题结语福利 前言 网络爬虫&#xff0c;又称网络爬虫、网络蜘蛛、网络机器人等&#xff0c;是一种按照一定的规则自动地获取万维网信息的程序或者脚本。它可以根据一定的策略自动地浏…