069-Web攻防-Java安全&JWT项目插件&Postman中文包等
069-Web攻防-Java安全&JWT项目插件&Postman中文包等
知识点
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,再次访问后台路径尝试进入后台。
黑盒环境下
- 在黑盒环境下 在url后面加上
druid即可查看当前是否存在
白盒发现
在项目源码配置文件中搜索
druid关键字把这里
#去除就代表要进行登录如果没有配置密码就是未授权访问
攻击点
直接拼接URL路径,尝试能否直接未授权访问系统功能点。

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

利用Cookie编辑器替换Session,再次访问后台路径尝试进入后台。
Java安全-Swagger接口-导入&联动批量测试
Swagger是一个用于生成、描述和调用RESTful接口的Web服务。就是将项目中所有(想要暴露的)接口展现在页面上,并可以进行接口调用和测试的服务。所以可以对这个接口进行漏洞测试,看是否存在未授权访问、sql注入、文件上传等漏洞。由于接口太多,一个个接口测试的话太费时间,所以一般会采用自动化接口漏洞安全测试。
黑盒情况下
查看 Swagger 文档:Swagger 提供了自动生成的 API 文档,通常可以通过 /swagger-ui/ 或类似路径访问到。通过查看这些文档,你可以了解所有可用的接口和请求的参数。
自动化发包测试
- 将网站上面的一些接口信息,显示到了页面上上面

- 菜单管理尝试着去请求如果数据能够正常回显,那就是未授权访问



黑盒情况下
实战中可以有几十个也有可能有几千个这样的接口 ,不可能一个一个去点,这个时候就要用到了工具自动化发包测试,Postman
通过这里得到api的所有接口
一般根据自己需要进项设置 我们这里默认完事
如果发生了报错点击整个文件 在变量环节将前面的双斜杠
//删除即可正常用这里还可以进行一个授权的key,因为有的接口需要登录才能使用
运行后该工具会对swagger全部接口自动发包测试,但是这里发现都是500响应,浏览器接口访问又是200
如果
postman上有出现200的响应,那么就有可能是一个未授权接口
自动化漏洞测试
联动BurpSuite Xray等
在
postman左上角文件,设置里面选中代理,开启自定义代理配置,将代理的地址和端口和burp端口设置一样。在
postman上再次运行项目后可以看到流量转发到了burp上
我们这里设置代理规则,使用Xary对burp进行流量转发,然后进行检测
使用命令对流量包进行检测
webscan --listen 127.0.0.1:7777 --html-output proxy.html1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
* 
## Java安全-[JWT](https://so.csdn.net/so/search?q=JWT&spm=1001.2101.3001.7020)令牌-空算法&未签名&密匙提取
JSON Web Token(JWT)。它遵循JSON格式,将用户信息加密到token里,服务器不保存任何用户信息,只保存密钥信息,通过使用特定加密算法验证token,通过token验证用户身份。基于token的身份验证可以替代传统的cookie+session身份验证方法。这使得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
JWT 分为三部分,每一部分都是 **Base64Url 编码** 的字符串:
1. **Header**(头部):描述 token 的类型(JWT)和签名算法(如 HS256)。
2. **Payload**(载荷):实际的数据部分,通常包括用户信息、权限、过期时间等。
3. **Signature**(签名):用于校验 token 是否被篡改。

在线解析:https://jwt.io/
BURP插件:Hae 或 JSON Web Tokens
#### 方式一:人工识别
1. 拆分为三段(按 `.`)
2. 对前两段用 Base64 解码
3. 前面两段开头都是`eyj`

#### 方式二:Burp插件识别
Hae(需要自己下载项目)
JSON Web Tokens(BP商店有,支持识别解析)




### 解析JWT数据
JWT在线解析:https://jwt.io/

### 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
1 |
|
Web350(密钥混淆攻击RS256=>HS256)
下载源码后使用Webstorm打开
从代码上看都是私钥生成签名,公钥进行验证,但是这里只能看到公钥,私钥是被删除了的,全局搜索无法找到
我们这里更换算法,把RS256更换为HS256 非对称算法改对称算法


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)































