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

演示案例:

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

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

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

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

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

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

攻击点:

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

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

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

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

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

1、自动化发包测试

Postman:https://github.com/hlmd/Postman-cn

2、自动化漏洞测试

联动BurpSuite Xray等

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

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

-JWT识别

1、标头(Header)

Header是JWT的第一个部分,是一个JSON对象,主要声明了JWT的签名算法,如"HS256”、"RS256"等,以及其他可选参数,如"kid"、"jku"、"x5u"等

alg字段通常用于表示加密采用的算法。如"HS256"、"RS256"等

typ字段通常用于表示类型

还有一些其他可选参数,如"kid"、"jku"、"x5u"等

2、有效载荷(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

JWT(JSON Web Token)技术解析

一、核心定义与结构

JWT(JSON Web Token)是基于开放标准 RFC 7519 的安全传输协议,采用紧凑的自包含格式实现信息交换。其结构由三部分构成:

  1. 头部(Header):包含令牌类型(固定为 JWT)及签名算法(如 HS256 或 RSA),通过 Base64 编码生成。
  2. 载荷(Payload):存储用户身份、权限及标准声明(如签发者iss、过期时间exp、生效时间nbf等),可扩展自定义数据。
  3. 签名(Signature):通过密钥对头部和载荷进行加密哈希,确保传输过程中数据未被篡改。

二、技术优势

  1. 无状态性:无需服务端存储会话信息,降低服务器资源消耗,适用于水平扩展的分布式系统。
  2. 跨域支持:可嵌入 HTTP 头部或 URL 参数,适配微服务架构及多域协作场景。
  3. 自验证机制:签名验证保障数据完整性,结合有效期控制提升安全性。
  4. 灵活扩展:载荷支持自定义字段,便于携带业务所需信息(如用户 ID、角色权限)。

三、工作流程

  1. 生成阶段:用户认证后,服务端使用密钥生成包含身份信息的 JWT 并返回客户端。
  2. 传输阶段:客户端在后续请求中携带 JWT(通常置于Authorization头部)。
  3. 验证阶段:服务端解析并校验签名有效性及有效期,提取载荷数据完成权限判定。

四、典型应用场景

  • 身份认证:替代传统 Session 机制,实现无状态登录。
  • API 鉴权:为 RESTful 接口提供轻量级授权方案。
  • 跨服务通信:在微服务集群中传递可信用户上下文。

五、注意事项与局限性

  1. 令牌不可逆失效:JWT 在有效期内无法主动废止,需依赖短有效期或黑名单机制降低风险。
  2. 密钥安全管理:签名密钥泄露将导致系统完全暴露,需采用高安全等级存储方案。
  3. 数据隐私限制:载荷内容仅 Base64 编码,敏感信息需加密处理或避免存储。

六、适用性评估

JWT 适用于高并发、分布式环境及需跨域协作的场景,但需权衡其安全边界。对于需要频繁撤销权限或处理敏感数据的系统,建议结合其他安全策略(如 OAuth 2.0)进行补充设计。

笔记:

如果 swagger 配置不当当你使用 postman 进行 api 接口测试可能会导致信息泄露

通过 swagger 接口找到更多可以测试的地址来进行测试有没有漏洞之后在 api 接口章节细讲

一、数据暴露与敏感信息滥用

API 接口泄露若涉及用户身份信息(如姓名、电话、地址)、认证凭证(如 API 密钥、令牌)或业务数据(如交易记录),攻击者可利用此类信息实施以下攻击:

  • 身份伪造与账户劫持:通过窃取的登录凭证或会话令牌,攻击者可伪装合法用户访问系统,实施数据篡改、资金盗取等恶意操作。
  • 撞库攻击:泄露的账号密码可能被用于自动化尝试登录其他平台(如金融、社交应用),扩大攻击影响范围。

二、权限滥用与横向渗透

若泄露的 API 接口存在弱鉴权或未鉴权漏洞,攻击者可利用低权限接口横向渗透至高权限接口,导致:

  • 越权数据访问:绕过权限控制获取敏感数据(如用户隐私、企业核心数据),甚至篡改业务逻辑(如订单状态、支付流程)。
  • 供应链攻击:通过第三方集成的 API 漏洞,攻击者可渗透至上下游系统,引发跨平台数据泄露风险。

三、注入攻击与代码执行

API 返回的敏感错误信息(如数据库结构、调试日志)可能暴露系统弱点,攻击者可结合以下手段实施攻击:

  • SQL/NoSQL 注入:构造恶意查询参数,操纵数据库获取或破坏数据。
  • 远程代码执行(RCE):利用反序列化漏洞或未过滤的输入参数,在服务器执行任意代码,完全控制系统。

四、业务逻辑与资源滥用

泄露的 API 接口可能暴露业务关键路径,导致:

  • DDoS 攻击:攻击者利用高频调用接口消耗服务器资源,引发服务瘫痪。
  • 数据爬取与恶意竞争:通过自动化脚本批量抓取商品信息、用户数据,用于不正当竞争或黑市交易。

五、社会工程与钓鱼攻击

泄露的用户数据(如邮箱、社交关系)可被用于精准钓鱼攻击,例如伪造官方 API 文档或更新通知,诱导用户提交敏感信息或下载恶意软件。

六、合规与法律风险

大规模数据泄露可能违反《个人信息保护法》等法规,导致企业面临巨额罚款、诉讼及声誉损失,进一步削弱用户信任。

x-ray 自动化漏洞测试平台

使用方法详见

xray安全漏洞检测(高效能)_baseline漏洞-CSDN博客

通过配置设置信息可以与 burp 联动

Burp与Xray联动-被动扫描_xray被动扫描-CSDN博客

postman 还可以与上面两个联动进行 api 接口自动化测试

如何确定一个网站是 jwt 验证

例如输入 admin

实现对用户权限的跨越

对称加密:客户端和服务端使用同一个密匙进行加密解密(HS...)

非对称加密:一个为私钥用来解密一个为公钥用来加密(RS...)

-JWT安全

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

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

形成条件:对方本身就没有使用密匙加密的方式处理数据

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

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

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

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

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

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

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

https://blog.csdn.net/weixin_44288604/article/details/128562796

-JWT利用

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

-Web345(None无签名认证)

-Web346(None算法绕过签名)

-Web347(弱口令密钥获取)

-Web348(爆破密钥上题一样)

使用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

-Web349(公钥私钥泄露)

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

服务器私钥生成jwt,利用公钥解密jwt,只要有私钥重新生成

import jwt

public = open('private.key', 'r').read()

payload={"user":"admin"}

print(jwt.encode(payload, key=public, algorithm='RS256'))

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

将RS256算法改为HS256(非对称密码算法=>对称密码算法)

HS256算法使用密钥为所有消息进行签名和验证。

而RS256算法则使用私钥对消息进行签名并使用公钥进行身份验证。

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)

2、黑盒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注入问题

例子: jwt 第一题

jwt 第二题(使用 jwttool 工具改 alg 为 none 以及 sub 为 admin 因为加密算法改成了 none

所以要把后面的签名给删掉,空加密算法签名要置空)

jwt 第三题

验证 123456 是秘钥

把秘钥输入官网进行加密

jwt 第四题跟上题一样直接爆破

posted @ 2025-02-25 14:19  TNPiper  阅读(147)  评论(0)    收藏  举报