目录

一、序列化和反序列化

序列化

用途

二、Java反序列化漏洞

数据出现

函数接口

漏洞发现

漏洞利用

三、Java序列化反序列化演示

四、靶场演示


一、序列化和反序列化

序列化

把 Java 对象转换为字节序列(字节流)的过程。

反序列化

把字节序列(字节流)恢复为 Java 对象的过程。

用途

  • 把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中(持久化对象)。
  • 在网络上传送对象的字节序列(网络传输对象)

二、Java反序列化漏洞

数据出现

1、功能特性:
        反序列化操作一般应用在导入模板文件、网络通信、数据传输、日志格式化存储、对象数
据落磁盘、或 DB 存储等业务场景。因此审计过程中重点关注这些功能板块。
2、数据特性:
        一段数据以 rO0AB 开头,你基本可以确定这串就是 JAVA 序列化 base64 加密的数据;
        或者如果以 ACED 开头,那么他就是这一段 java 序列化的 16 进制。
3、出现具体:
        http 参数, cookie , sesion ,存储方式可能是 base64(rO0 ),压缩后的base64(H4s),MII 等 Servlets http,Sockets,Session 管理器,包含的协议就包括: JMX、RMI、JMS、JND1等。(/xac/Xed) xm IXstream/XmldEcoder等(http Body:Content-type: application/xml)json(jackson,fastjson)http请求中包含。

函数接口

1、Java:
        Serializable Externalizable 接口、 fastjson 、 jackson 、 gson 、ObjectInputStream.read、 ObjectObjectInputStream.readUnshared 、 XMLDecoder.read、 ObjectYaml.loadXStream.fromXML 、ObjectMapper.readValue、 JSON.parseObject 等。
2、PHP
        serialize() 、 unserialize()。
3、Python:
         pickle。

漏洞发现

1、黑盒分析:

        数据库出现地---观察数据特性。

2、白盒分析:

        组件安全&函数搜索&功能模块。

漏洞利用

Ysoserial集成的jar包配合生成,特性的专业漏洞利用工具等。

三、Java序列化反序列化演示

<第一部分>

1.演示需要用到的代码。

2.执行序列化部分的代码,可以看到在指定路径下生成了指定的文件,文件内包含序列化的内容。

3.使用工具对序列化内容进行查看,可以看到其头部内容为ACED。

4.执行反序列化部分的代码,可以看到其反序列化成功,并且将原始的内容进行了返回。

5.至此,我们可以想到,如果将反序列化的目标文件的内容进行修改,修改成具有攻击性的代码,那么就可以实现一定的攻击性行为。

<第二部分>

1.这里用到一款工具,其支持一些pyload的生成。

2.打开工具。

3.后面为空的就是不需要其它的包,只需要java的原生类。

4. 先来到下面的网站获取一个地址。

5.在工具内执行下面的命令。

6.来到目标路径下可以看到生成的文件,以及文件内的序列化内容。

7. 使用工具产看,其头部内容为ACED。

8.将a.txt放到刚刚反序列化的目录下。

9.将正常要进行反序列化的文件改成我们刚刚使用工具生成的文件。

10.执行序列化程序。

11.可以看到网站内成功获取到了数据。

12.这里发生了啥?

在这里我们将其原有的代码数据更改成了一个访问http的代码数据,当对方在进行反序列化的时候,就会将我们更改后的代码数据进行执行,就会对http进行访问。

四、靶场演示

1.启动靶场。

2.进入靶场,选择对应关卡。

3. 可以看到给出的序列化代码是以rO0AB开头的,是 JAVA 序列化 base64 加密的数据。

4.使用工具生成pyload。

5.再来目录下可以看到生成的文件。

6.生成的内容如下。

7.因为源代码会将序列化内容进行base64解密,因此我们还需要对其进行一次加密,使用下面的代码记性加密。

8.加密后的内容如下。

9.将代码粘贴到靶场。

10.点击提交后可以看到成功指定了调取计算器的命令。

Java反序列化漏洞及实例详解相关推荐

  1. tcp网络通信教程 java_基于java TCP网络通信的实例详解

    JAVA中设计网络编程模式的主要有TCP和UDP两种,TCP是属于即时通信,UDP是通过数据包来进行通信,UDP当中就会牵扯到数据的解析和传送.在安全性能方面,TCP要略胜一筹,通信过程中不容易出现数 ...

  2. Java并发编程最佳实例详解系列

    Java并发编程最佳实例详解系列: Java并发编程(一)线程定义.状态和属性 Java并发编程(一)线程定义.状态和属性 线程是指程序在执行过程中,能够执行程序代码的一个执行单元.在java语言中, ...

  3. java中将json字符串_Java中JSON字符串与java对象的互换实例详解

    在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JSON等,JSON作为一个轻量级的数据格式比xml效率要高,XML需要很多的标签,这无疑占据了网络流量,JSON在这方面则做的很好, ...

  4. Java中JSON字符串与java对象的互换实例详解

    这篇文章主要介绍了在java中,JSON字符串与java对象的相互转换实例详解,非常不错,具有参考借鉴价值,需要的朋友可以参考下 在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JS ...

  5. java stopwatch_Spring StopWatch使用实例详解

    这篇文章主要介绍了Spring StopWatch使用实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 StopWatch简单的秒表,允许多个 ...

  6. Java依赖注入(DI)实例详解

    Java依赖注入模式允许我们摆脱硬编码,使我们的应用更加松耦合.增强扩展性以及可维护性.通过依赖注入我们可以降低从编译到运行时的依赖性. Java依赖注入 Java的依赖注入仅仅通过理论是很难解明白的 ...

  7. POI以SAX方式解析Excel2007大文件(包含空单元格的处理) Java生成CSV文件实例详解...

    http://blog.csdn.net/l081307114/article/details/46009015 http://www.cnblogs.com/dreammyle/p/5458280. ...

  8. Java 包分布_实例详解Java编程实现beta分布的采样或抽样

    Java编程实现beta分布的采样或抽样实例代码 本文研究的主要是Java编程实现beta分布的采样或抽样,具体如下. 本文将使用math3提供的工具包,对beta分布进行采样.如下程序是对alpha ...

  9. java中匿名内部类详解_java 中匿名内部类的实例详解

    搜索热词 java 中匿名内部类的实例详解 原来的面貌: class TT extends Test{ void show() { System.out.println(s+"~~~哈哈&q ...

最新文章

  1. 基于HTML5的Google水下搜索
  2. ios 证书更新需要重新发布么_福利站证书更新,自己有空余时间一定要学会自己用电脑签名!...
  3. oracle 分区表
  4. buu [BJDCTF 2nd]签到-y1ng
  5. CM: 如何通过attachment的physical instance id反查到所属的business object ID
  6. 驱动框架8——将驱动集成到内核中
  7. javascript知识点总结----Function定义
  8. 带你读AI论文:基于Transformer的直线段检测
  9. html span标签 不换行(有时span带中文时候是可以自动换行的)
  10. 实现文件中名词的统计计数_Python中的统计数据展示
  11. mysql版本更新之后忘记登录密码_MySQL 密码遗忘和登陆报错问题
  12. 驰声科技推出AI对话考辅系统 将VR引入语音评测
  13. 《最优化理论》:运输问题(一)求最小运费【西北角法、最小元素法、伏格尔法】
  14. Chrome网页设置眼睛保护色
  15. 2008.12.8希世软件杭州公司
  16. 新世纪音乐——天籁之音
  17. 图像处理--最大内接圆
  18. 光电自动避障小车_凌鸟智能总结了一下激光导航反射板AGV小车的优缺点!
  19. hackthissite 闯关日记
  20. html注册新浪邮箱代码,新浪博客美化代码:邮箱快速登录

热门文章

  1. 江苏省计算机考试准考证号忘了怎么办
  2. java scribe_scribe-java库怎么用
  3. b camp;amp;b-c 什么意思在c语言里,大工20春《camp;c++语言程序设计》复习资料二...
  4. Qt开发CAN通信的环境配置
  5. devstack mysql_安装和使用devstack的笔记
  6. Unity Color Lerp
  7. 编码如作文:写出高可读 JS 的 7 条原则
  8. apache karaf quick start
  9. 可视化随机森林的特征重要性
  10. ADIDAS阿里纳斯励志广告语