【JAVA反序列化漏洞】简介、原理、工具、环境、靶场、思路

举报
黑色地带(崛起) 发表于 2023/02/17 22:11:29 2023/02/17
【摘要】 【JAVA反序列化漏洞】简介、原理、工具、环境、靶场、思路

​【JAVA反序列化漏洞】简介、原理、工具、环境、靶场、思路

目录

 

一、简介:

二、原理:

2.1、Java对象:

2.2、Java 序列化:

2.3、Java 反序列化:

三、函数:

四、工具:

4.1、ysoserial 0.0.4版

4.2、 payload生成器

4.2.1、介绍: 

4.3、提示:

五、准备:

5.1、WebGoat

5.2、 环境变量的配置:

5.2.1、方法一:手工配置

5.2.2、方法二:工具配置

5.2.3、JDK的配置:

5.2.4、JRE的生成:

5.3、错误+安装

六、WebGoat

6.1、分析:

6.2、插件

 6.2.1、Java Deserialization Scanner

6.3、漏洞利用:

6.3.1、大体思路:

6.3.2、具体思路


        编辑

(大家都在学习) 



一、简介:

序列化也就是将数据拆成一小块小块保存到文件中(每块设置编号),反序列化就是重现组合起来

(1)序列化就是将数据转化成一种可逆的字符串(利于存储或者传输),字符串还原原来结构的过程叫做反序列化

(2)序列化后,方便保存和传输(保留成员变量,不保留函数方法)


(3)数据(对象)--------序列化---------->字符串-----------反序列化-------->数据(对象)



二、原理:

2.1、Java对象:

①多种方式来创建对象,没被回收都可复用此对象(存在于JVM中的堆heap内存中),当JVM处于运行状态,对象就存在;反之,对象就不存在。

②在真实的环境中,通过序列化,实现在JVM中的对象和字节数组流之间转换,实现将这些对象持久化保存下来,在需要的时候再使用。

2.2、Java 序列化:

完整性+可传递性

①将对象转换为字符串等字节数组流过程(保存属性状态,不保存对象中的方法),从而实现对象持久化,以便传输(可移植性)或保存在本地文件中,将序列化对象写入文件之后,可从文件中读取,并且进行反序列化。


2.3、Java 反序列化:

将一个对象的字节序列(字符串)中保存的对象状态及描述信息,通过反序列化,恢复成 Java 对象的过程(重建)




三、函数:

序列化:ObjectOutputStream类–> writeObject()(写入)

反序列化:ObjectInputStream类 -->readObject() (读取)

Serializable(接口) :(序列化与反序列化的类必须使用)一个标志性接口,标识在 JVM 中进行序列化,为该类自动生成一个序列化版本号。

serialVersionUID(类属性):序列化版本号(默认提供),给 JVM 区别同名类。

transient(关键字):不希望特定属性参与序列化,使用这个关键字标注该属性。


编辑


四、工具:

4.1、ysoserial 0.0.4版

(现在最新的是0.0.6)

链接:https://pan.baidu.com/s/18q2ruwCFGI1vMvl9j7lT3w?pwd=hj12 
提取码:hj12

4.2、 payload生成器

angelwhu/ysoserial: A proof-of-concept tool for generating payloads that exploit unsafe Java object deserialization. (github.com) https://github.com/angelwhu/ysoserial


frohoff/ysoserial: A proof-of-concept tool for generating payloads that exploit unsafe Java object deserialization. (github.com) https://github.com/frohoff/ysoserial

4.2.1、介绍: 

ysoserial payload是创建了一个URLStreamHandler的子类:SilentURLStreamHandler

SilentURLStreamHandler重写了getHostAddress(URL u),屏蔽了返回值,因此在生成payload的时候、也就是序列化的时候,不会触发dns查询。





4.3、提示:

 上上述文件需要经过Maven编译,或者Gradle编译(Gradle更简单,以后应该会超过Maven)成.jar文件,后才能使用

【Maven使用】IDEA使用Maven进行文件打包+命令含义+错误分析 https://blog.csdn.net/qq_53079406/article/details/124322125?spm=1001.2014.3001.5501

【Gradle】问题解析+下载安装+环境配置+验证安装 https://blog.csdn.net/qq_53079406/article/details/124312186?spm=1001.2014.3001.5502

IntelliJ IDEA中也包含Maven、Gradle

(里面也可以配置自己的maven、Gradle)

官网:

IntelliJ IDEA:JetBrains 功能强大、符合人体工程学的 Java IDE https://www.jetbrains.com/zh-cn/idea/编辑

编辑

激活: 

网上有很多激活脚本(容易找到)





五、准备:

5.1、WebGoat

 链接:https://github.com/WebGoat/WebGoat/releases


5.2、 环境变量的配置:

5.2.1、方法一:手工配置

3分钟复制粘贴配置java环境变量,验证配置是否成功,java文件运行方法 https://blog.csdn.net/qq_53079406/article/details/123482726?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165028109016780261979271%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=165028109016780261979271&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-4-123482726.nonecase&utm_term=jdk&spm=1018.2226.3001.4450

5.2.2、方法二:工具配置

【jdk快速设置/切换工具】一键设置/切换、附带插件链接、使用教程 https://blog.csdn.net/qq_53079406/article/details/124252949?spm=1001.2014.3001.5501


5.2.3、JDK的配置:

【jdk快速设置/切换工具】一键设置/切换、附带插件链接、使用教程 https://blog.csdn.net/qq_53079406/article/details/124252949?spm=1001.2014.3001.5501

5.2.4、JRE的生成:

【高版本JRE生成】JRE版本不够,生成JRE失败,高版本JDK生成JRE过程 https://blog.csdn.net/qq_53079406/article/details/124262183?spm=1001.2014.3001.5501



5.3、错误+安装


全面的错误解决

【WebGoat安装错误合集】WebGoat8.2.2每一步出现的错误整理,最后附带正确的安装教程 https://blog.csdn.net/qq_53079406/article/details/124297362?spm=1001.2014.3001.5501



编辑



六、WebGoat

6.1、分析:

下面的输入框存在反序列化的漏洞,我们要生成含有可执行代码的序列化字符串,在输入框提交,进行反序列化,从而执行我们构造的代码,让页面延迟5s就完成题目了

以 rO0AB 开头, JAVA 序列化 base64 加密的。

以 aced 开头, java 序列化的 16 进制。

编辑



解码看看

无任何有用信息

编辑





6.2、插件

 6.2.1、Java Deserialization Scanner

是一个Burp套件插件,用于检测和利用Java Deserialization(java反序列化)漏洞

【JAVA反序列扫描工具】简介、下载、安装、使用 https://blog.csdn.net/qq_53079406/article/details/124336323?spm=1001.2014.3001.5501这个工具的扫描,也得依靠我们对他进行配置文件ysoserial.jar




6.3、漏洞利用:

(由于僵持了好多天,我要去补充亿多点知识点去了,先把思路放这里)

6.3.1、大体思路:

构造恶意语句----->序列化------>进行编码------>最终的payload------>提交进去执行


6.3.2、具体思路

(前提:知道源码)

第一步:

提交,抓包,找到数据包中包含的目录(可能是发往反序列化函数的地方)

第二步:

在源码里搜索,找到反序列化的位置

第三步:

分析解码函数(即它的编码方法)及其接口

第四步:

查看ysoserial支持的插件,对应查找WebGoat是否安装了对应的.jar包(名含有core,与ysoserial支持的版本一致),并复制到ysoserial目录下

第五步:

根据这个.jar包,利用ysoserial生成反序列化漏洞的payload,执行calc.exe,将payload保存在token.bin文件中

第六步:

采用python脚本对payload进行base64编码(根据所使用的序列化编码方法)

第七步:

在反序列化框提交构造的序列化字符串(触发反序列化)



(前提:不知道源码)

可以就要通过其他方法去分析到编码方式、含有的.jar包

接口测试、回显数据分析……

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。