发帖
 找回密码
 立即注册
搜索
0 1

分享 WEB渗透系统班-反序列化漏洞-php 靶场+反序列化漏洞-java 简介

技术分享 1119 0 2025-9-23 16:29:19
[i=s] 本帖最后由 zeke 于 2025-9-23 16:29 编辑 [/i]

WEB渗透测试工程师系统班250303期

41节课作业

一、 java反序列化漏洞产生的函数
以下代码皆为java

  1. readObject() - 最核心的漏洞入口

ObjectInputStream ois = new ObjectInputStream(inputStream);
Object obj = ois.readObject(); // 漏洞触发点

  1. readUnshared() - 类似readObject但更严格

Object obj = ois.readUnshared();

  1. XML反序列化相关

// XStream
XStream xstream = new XStream();
xstream.fromXML(xmlString); // 危险操作

// XMLDecoder
XMLDecoder decoder = new XMLDecoder(input);
Object obj = decoder.readObject();

  1. JSON反序列化(某些库)

// Jackson的enableDefaultTyping(已废弃)
objectMapper.enableDefaultTyping();

// FastJSON的autoType
JSON.parse(jsonString);
JSON.parseObject(jsonString, Class.class);

  1. YAML反序列化

Yaml yaml = new Yaml();
yaml.load(yamlString); // SnakeYAML漏洞点

  1. 重写的readObject()方法

private void readObject(java.io.ObjectInputStream stream)
throws IOException, ClassNotFoundException {
stream.defaultReadObject(); // 先正常反序列化
Runtime.getRuntime().exec(this.command); // 恶意代码
}

  1. 其他魔术方法

// 反序列化过程中自动调用的方法
private void readObjectNoData()
private void readResolve()
private Object readExternal()

二、 java序列化的数据特征有哪些

  1. 魔数签名(Magic Number)
    固定开头:AC ED 00 05(十六进制)
    这是Java序列化数据最明显的特征,几乎100%标识这是Java序列化流。
  2. 十六进制特征

AC ED 00 05 73 72 00 ...

AC ED:魔数
00 05:版本号(通常为5)
73:TC_OBJECT,表示对象开始
72:TC_CLASSDESC,表示类描述

  1. base64编码特征为rO0AB开头

三、 复现课堂序列化案例代码,了解序列化和反序列化的过程

Level 3: 对象中值的权限

考察 控制修饰符:

public(公有): 公有的类成员可以在任何地方被访问。
protected(受保护): 受保护的类成员则可以被其自身以及其子类和父类访问。(可继承)
private(私有): 私有的类成员则只能被其定义所在的类访问。(不可继承)
这里 SubFLAG 继承了 FLAG,除开 public 修饰的值,对于另外两个:

protected $protected_flag 可以通过 get_protected_flag() / get_private_flag() 访问,因为受保护的变量是可以被继承的。
private $private_flag则只能通过 get_private_flag() 进行访问,因为私有变量不能被继承。
而对象中函数的调用和值的访问类似,也通过 -> 符号实现:$对象名 -> 函数名();

POST提交:

code=echo $target->public_flag.$target->get_protected_flag().$target->get_private_flag();

code=echo $target->public_flag.$sub_target->show_protected_flag().$target->get_private_flag();

1.1.png

1.2.png

Level 4: 序列化初体验
一道用来考察序列化的套壳题目,序列化虽然不会标记函数,但是会完整的输出变量和变量内容。

题目已经使用 $flag_is_here = new FLAG(); 实例化创建了一个对象,所以我们只需要序列化并且打印出来这一段字符串。

POST提交:
code=echo serialize($flag_is_here);

序列化数据:
O:4:"FLAG":3:{s:18:"FLAGflag1_string";s:8:"ser4l1ze";s:18:"FLAGflag2_number";i:2;s:18:"FLAGflag3_object";O:5:"FLAG3":1:{s:25:"FLAG3flag3_object_array";a:2:{i:0;s:3:"se3";i:1;s:2:"me";}}}

2.1.png

2.2.png

Level 5: 序列化的普通值规则
演示和考察序列化中 不同类型变量的不同格式。

而从结果上理解,反序列化其实和参数创建是一个等同的过程 —— 比如下面的例子:

$a_string = "HelloCTF"; /*<=等价于=>*/ $a_string = unserialize('s:8:"HelloCTF";');
所以该题目按照后面部分的要求编写对应的变量进行序列化,将字符串赋给对应参数即可。
3.1.png

序列化数据:
o=O:7:"a_class":1:{s:7:"a_value";s:4:"FLAG";}&s=s:5:"IWANT";&a=a:2:{s:1:"a";s:3:"Plz";s:1:"b";s:6:"Give_M3";}&i=i:1;&b=b:1;&n=N;

POST传参
3.2.png

3.3.png

JAVA反序列化-readobject
①准备:搭建靶场(java8环境)
4.1.png

②yakit开启DNSLog服务(测试过了所以有记录,这里默认没有)
4.2.png

③开启yakit自带的java生成利用链,生成dnslog的利用链
4.3.png

④利用链打入
4.4.png

⑤DNSLog有记录,测试成功
4.5.png

四、复现Shiro反序列化漏洞,并说明漏洞的流量特征
①准备:java漏洞靶场
5.1.png
集成工具ONE-FOX的shiro反序列化利用工具
5.2.png

②特点:有记住密码这样的选项

③打开该工具,填入url地址,检测利用链并爆破利用链及回显
5.3.png

④爆破找到了一个CB183的利用链,直接切到命令执行,输入一个命令calc,成功打开
5.4.png

Shiro反序列化漏洞流量特征

  1. 最核心的特征:RememberMe Cookie
    http
    Cookie: rememberMe=删除我rO0ABXQABkhlbGxv...
    Cookie名称固定:rememberMe
    值特征:Base64编码的Java序列化数据
    开头标识:通常以rO0开头(Base64编码的AC ED 00 05)
  2. 完整的HTTP请求特征
    http
    POST /admin/login HTTP/1.1
    Host: target.com
    User-Agent: Mozilla/5.0
    Cookie: rememberMe=rO0ABXQABkhlbGxv...(很长的一串Base64)
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 0
  3. 不同攻击阶段的流量特征

探测阶段:
http
#发送简单的序列化对象探测
Cookie: rememberMe=rO0ABXQABkhlbGxv...(短payload)
#响应特征:可能返回500错误或特定的Shiro错误页面

利用阶段:
http
#包含恶意反序列化链的payload
Cookie: rememberMe=基编码的CommonsCollections5/6链...(很长)
#长度特征:通常超过1000字符的Base64

  1. 加密后的特征(AES加密)
    Shiro默认使用AES加密RememberMe值:

密钥硬编码:kPH+bIxk5D2deZiIxcaaaA==(默认)
加密模式:AES-CBC
识别特征:虽然是加密的,但Cookie名和长度仍可识别

  1. 响应特征

成功利用的特征:
http
HTTP/1.1 200 OK
Set-Cookie: rememberMe=deleteMe
Content-Type: text/html
#可能包含命令执行结果或内存马响应

失败的特征:
http
HTTP/1.1 500 Internal Server Error
#或者Shiro特定的错误信息

一、笔记标题:WEB渗透系统班-反序列化漏洞-php 靶场+反序列化漏洞-java 简介

二、文章内容:

1.课程内容概要

主要知识点1:反序列化漏洞php靶场
主要知识点2:反序列化漏洞java靶场
主要知识点3:shiro反序列化
主要知识点4:修复防御

2.重点知识与细节

概念解析
概念1:无
概念2:
关键步骤
步骤1:无
步骤2:
步骤3:
相关代码
Less-3
1.3.png
1.4.png

Less-4
2.3.png

Less-5
3.4.png
3.5.png

3.实操练习和解析

如作业

4.个人总结

本节课最大的收获是:练习了反序列化漏洞的php靶场,java靶场的漏洞集成工具
仍然存在疑问的地方:暂无
需要课后深入学习的内容:php靶场更深层次的关

──── 1人觉得很赞 ────

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
免责声明:
1、本论坛中所有用户发布的内容仅代表作者个人观点,与本网站立场无关,本站不对其真实性、完整性或观点承担任何责任。
2、本论坛所提供的全部信息与内容,不保证其准确性、完整性或时效性。因阅读或使用本站内容而产生的任何误导、损失或风险,本站概不承担任何连带或法律责任。
3、当国家司法、行政机关依照法定程序要求本论坛披露用户信息时,本站予以配合并因此免责。
4、因网络线路故障、技术问题、不可抗力或本站无法控制的其他原因导致的服务中断或暂停,本站不承担由此造成的任何直接或间接损失。
5、对于任何通过技术手段破坏、攻击本论坛系统或扰乱正常秩序的行为,本站有权采取包括但不限于限制账号、封禁账号、追究法律责任等措施。
您需要登录后才可以回帖 立即登录
高级模式
返回