【第69课】Java安全JWT攻防Swagger自动化算法签名密匙Druid未授权

本文主要是介绍【第69课】Java安全JWT攻防Swagger自动化算法签名密匙Druid未授权,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

免责声明

本文发布的工具和脚本,仅用作测试和学习研究,禁止用于商业用途,不能保证其合法性,准确性,完整性和有效性,请根据情况自行判断。

如果任何单位或个人认为该项目的脚本可能涉嫌侵犯其权利,则应及时通知并提供身份证明,所有权证明,我们将在收到认证文件后删除相关内容。

文中所涉及的技术、思路及工具等相关知识仅供安全为目的的学习使用,任何人不得将其应用于非法用途及盈利等目的,间接使用文章中的任何工具、思路及技术,我方对于由此引起的法律后果概不负责。

知识点:
1、Java安全-Druid监控-未授权访问&信息泄漏
2、Java安全-Swagger接口-文档导入&联动批量测试
2、Java安全-JWT令牌攻防-空算法&未签名&密匙提取

一、演示案例-Java安全-Druid监控-未授权访问

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

黑盒发现

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

白盒发现

在项目源码配置文件中搜索druid关键字
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

攻击点

1、直接拼接URL路径,尝试能否直接未授权访问系统功能点。
在这里插入图片描述
2、结合泄露URL路径和Session信息,利用BurpSuite进行尝试登录。
在这里插入图片描述
3、利用Cookie编辑器替换Session,再次访问后台路径尝试进入后台。

二、演示案例-Java安全-Swagger接口-导入&联动批量测试

Swagger就是将项目中所有(想要暴露的)接口展现在WEB页面上,并可以进行接口调用和调式的服务(一般都是用spring boot框架搭建该服务)

所以可以对这个接口进行漏洞测试,看是否存在未授权访问、sql注入、文件上传等漏洞。由于接口太多,一个个接口测试的话太费时间,所以一般会采用自动化接口漏洞安全测试。

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

在这里插入图片描述

在这里插入图片描述

黑盒发现

在这里插入图片描述

白盒发现

在这里插入图片描述

1、自动化发包测试

Postman:GitHub - hlmd/Postman-cn: Postman汉化中文版
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果postman上有出现200的响应,那么就有可能是一个未授权接口

2、自动化漏洞测试

联动BurpSuite Xray
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
也可以在BP上看有没有200响应的数据包,也有可能会是一个未授权接口

bp联动xray
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、演示案例-Java安全-JWT令牌-空算法&未签名&密匙提取

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

JWT识别

1、标头(Header)

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

2、有效载荷(Payload)

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

3、签名(Signature)

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

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

在这里插入图片描述

5、BURP插件识别
Hae(需要自己下载项目)

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

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

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

如何解析JWT数据?

1.JWT在线解析

JSON Web Tokens - jwt.io
在这里插入图片描述
在这里插入图片描述

2.BP官方插件-JSON Web Tokens

在这里插入图片描述

JWT安全

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

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

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

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

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

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

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

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

细说——JWT攻击_jwt漏洞-CSDN博客

JWTCTF

JWT利用项目

GitHub - ticarpi/jwt_tool: :snake: A toolkit for testing, tweaking and cracking JSON Web Tokens

项目命令帮助
# 使用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空加密算法)

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

Web346(None算法绕过签名)

在这里插入图片描述
在这里插入图片描述
解题思路:alg强制设置为none绕过签名
两种方法:

BP插件-JSON Web Tokens

在这里插入图片描述

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

JWT利用项目-jwt_tool

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

Web347(弱口令密钥获取)

在这里插入图片描述
在这里插入图片描述
JWT利用项目-jwt_tool
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
知道密匙之后肯定要重新生成JWT呀,如何重新生成?
使用 JWT在线解析:JSON Web Tokens - jwt.io来重新生成
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Web348(爆破密钥上题一样)

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

Web349(公钥私钥泄露)

在这里插入图片描述
这里可以使用专门的js ide打开相关源码文件,看的比较清楚
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
公钥私钥泄露,访问/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)

在这里插入图片描述
在这里插入图片描述
这里可以使用专门的js ide打开相关源码文件,看的比较清楚
在这里插入图片描述
在这里插入图片描述
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注入问题

这篇关于【第69课】Java安全JWT攻防Swagger自动化算法签名密匙Druid未授权的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

SpringBoot结合Docker进行容器化处理指南

《SpringBoot结合Docker进行容器化处理指南》在当今快速发展的软件工程领域,SpringBoot和Docker已经成为现代Java开发者的必备工具,本文将深入讲解如何将一个SpringBo... 目录前言一、为什么选择 Spring Bootjavascript + docker1. 快速部署与

Spring Boot spring-boot-maven-plugin 参数配置详解(最新推荐)

《SpringBootspring-boot-maven-plugin参数配置详解(最新推荐)》文章介绍了SpringBootMaven插件的5个核心目标(repackage、run、start... 目录一 spring-boot-maven-plugin 插件的5个Goals二 应用场景1 重新打包应用

SpringBoot+EasyExcel实现自定义复杂样式导入导出

《SpringBoot+EasyExcel实现自定义复杂样式导入导出》这篇文章主要为大家详细介绍了SpringBoot如何结果EasyExcel实现自定义复杂样式导入导出功能,文中的示例代码讲解详细,... 目录安装处理自定义导出复杂场景1、列不固定,动态列2、动态下拉3、自定义锁定行/列,添加密码4、合并

Spring Boot集成Druid实现数据源管理与监控的详细步骤

《SpringBoot集成Druid实现数据源管理与监控的详细步骤》本文介绍如何在SpringBoot项目中集成Druid数据库连接池,包括环境搭建、Maven依赖配置、SpringBoot配置文件... 目录1. 引言1.1 环境准备1.2 Druid介绍2. 配置Druid连接池3. 查看Druid监控

Java中读取YAML文件配置信息常见问题及解决方法

《Java中读取YAML文件配置信息常见问题及解决方法》:本文主要介绍Java中读取YAML文件配置信息常见问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录1 使用Spring Boot的@ConfigurationProperties2. 使用@Valu

创建Java keystore文件的完整指南及详细步骤

《创建Javakeystore文件的完整指南及详细步骤》本文详解Java中keystore的创建与配置,涵盖私钥管理、自签名与CA证书生成、SSL/TLS应用,强调安全存储及验证机制,确保通信加密和... 目录1. 秘密键(私钥)的理解与管理私钥的定义与重要性私钥的管理策略私钥的生成与存储2. 证书的创建与

浅析Spring如何控制Bean的加载顺序

《浅析Spring如何控制Bean的加载顺序》在大多数情况下,我们不需要手动控制Bean的加载顺序,因为Spring的IoC容器足够智能,但在某些特殊场景下,这种隐式的依赖关系可能不存在,下面我们就来... 目录核心原则:依赖驱动加载手动控制 Bean 加载顺序的方法方法 1:使用@DependsOn(最直

SpringBoot中如何使用Assert进行断言校验

《SpringBoot中如何使用Assert进行断言校验》Java提供了内置的assert机制,而Spring框架也提供了更强大的Assert工具类来帮助开发者进行参数校验和状态检查,下... 目录前言一、Java 原生assert简介1.1 使用方式1.2 示例代码1.3 优缺点分析二、Spring Fr

java使用protobuf-maven-plugin的插件编译proto文件详解

《java使用protobuf-maven-plugin的插件编译proto文件详解》:本文主要介绍java使用protobuf-maven-plugin的插件编译proto文件,具有很好的参考价... 目录protobuf文件作为数据传输和存储的协议主要介绍在Java使用maven编译proto文件的插件

Java中的数组与集合基本用法详解

《Java中的数组与集合基本用法详解》本文介绍了Java数组和集合框架的基础知识,数组部分涵盖了一维、二维及多维数组的声明、初始化、访问与遍历方法,以及Arrays类的常用操作,对Java数组与集合相... 目录一、Java数组基础1.1 数组结构概述1.2 一维数组1.2.1 声明与初始化1.2.2 访问