Skip to content

Commit 80e017b

Browse files
committed
fastjson
1 parent 15cd033 commit 80e017b

File tree

2 files changed

+65
-6
lines changed

2 files changed

+65
-6
lines changed

README.md

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,13 @@
1818

1919
## 分类
2020

21-
当前问题总数:58
21+
当前问题总数:62
2222

2323
[Java本身的安全问题 - 15个](https://github.com/4ra1n/JavaSecInterview/tree/master/java)
2424

2525
[Shiro框架相关的安全问题 - 8个](https://github.com/4ra1n/JavaSecInterview/tree/master/shiro)
2626

27-
[Fastjson组件相关的安全问题 - 8个](https://github.com/4ra1n/JavaSecInterview/tree/master/fastjson)
27+
[Fastjson组件相关的安全问题 - 12个](https://github.com/4ra1n/JavaSecInterview/tree/master/fastjson)
2828

2929
[Log4j2组件相关的安全问题 - 7个](https://github.com/4ra1n/JavaSecInterview/tree/master/log4j2)
3030

@@ -48,5 +48,4 @@ https://www.cnpanda.net/
4848

4949
https://gv7.me/
5050

51-
52-
51+
https://github.com/safe6Sec/Fastjson

fastjson/README.md

Lines changed: 62 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444

4545

4646

47-
- 谈谈1.2.47版本之前的绕过(★★★)
47+
- 谈谈1.2.47版本之前各个小版本的绕过(★★★)
4848

4949
首先是利用解析问题可以加括号或大写L绕过低版本,高版本利用了哈希黑名单,之所以要哈希是因为防止黑客进行分析。但黑名单还是被破解了,有师傅找到可以绕过了类。在1.2.47版本中利用缓存绕过
5050

@@ -56,4 +56,64 @@
5656

5757
除了这种方式,还可以自行实现虚假的`JNDI Server`作为反连平台,用`JdbcRowSetImpl`这样的`Payload`来触发
5858

59-
如果不能出网,可以结合不出网的利用方式和中间件的回显手段,执行无害命令检测,或利用报错回显
59+
如果不能出网,可以结合不出网的利用方式和中间件的回显手段,执行无害命令检测,或利用报错回显
60+
61+
62+
63+
- 谈谈1.2.68版本的绕过(★★)
64+
65+
1.2.68之前的66和67可以利用`JNDI`相关类,比如`Shiro``JndiObjectFactory``ignite`项目的类
66+
67+
1.2.68中有一个期望类属性,实现了期望接口的类可以被反序列化
68+
69+
利用类必须是`expectClass`类的子类或实现类,并且不在黑名单中,即可直接绕过`AutoType`检测,例如常见的`AutoCloseable`
70+
71+
这样的Payload通常第一个`@type``AutoCloseable`等合法类,第二个`@type`是恶意类,后续参数是恶意类需要的参数
72+
73+
74+
75+
- 谈谈Fastjson的WAF Bypass手段(★★★)
76+
77+
Fastjson默认会去除键值外的空格、\b、\n、\r、\f等字符,同时还会自动将键值进行`unicode`与十六进制解码
78+
79+
例如针对`@type`的绕过:`\u0040\u0074\u0079\u0070\u0065`
80+
81+
加入特殊字符的绕过:`{\n"@type":"com.sun.rowset.JdbcRowSetImpl"...}`
82+
83+
84+
85+
- 除了RCE还能有什么利用(★★★)
86+
87+
信息泄露或者ReDoS,参考下方Payload
88+
89+
```json
90+
{
91+
"regex":{
92+
"$ref":"$[\blue = /\^[a-zA-Z]+(([a-zA-Z ])?[a-zA-Z]*)*$/]"
93+
},
94+
"blue":"aaaaaaaaaaaaaaaaaaaaaaaaaaaa!"
95+
}
96+
```
97+
98+
还可以实现写文件,例如以下这个针对1.2.68写文件的Payload
99+
100+
```json
101+
{
102+
"@type": "java.lang.AutoCloseable",
103+
"@type": "java.io.FileOutputStream",
104+
"file": "/tmp/nonexist",
105+
"append": "false"
106+
}
107+
```
108+
109+
110+
111+
- 是否了解自动挖掘Fastjson利用链的方式(★★★★)
112+
113+
利用链主要集中在`getter``setter`方法中,如果`getter`或者`setter`的方法中存在一些危险操作比如`JNDI`查询,如果参数可控就可以导致`JNDI`注入
114+
115+
简单来说,直接搜对应项目中`JNDI``lookup`方法,可以基于`ASM`解压分析`Jar`包,这种半自动结合人工审核的方式其实很好用(之前挖到过几个)
116+
117+
进一步来说,全自动的方式可以使用`codeql``gadget-inspector`工具来做,主要是加入了污点传递,分析`getter/setter`参数如何传递到`lookup`
118+
119+
关闭全自动分析原理,一般面试官不会问太深入,因为可能涉及到静态分析相关的技术,普通安服崽的面试不会太过深入,如果是实验室可能需要再学习一下

0 commit comments

Comments
 (0)