[i=s] 本帖最后由 zeke 于 2025-9-22 16:26 编辑 [/i]
WEB渗透测试工程师系统班250303期
40 节课作业
一、反序列化漏洞产生的原因
serialize() 和 unserialize() 在 PHP内部实现上是没有漏洞的,之所以会产生反序列化漏洞是因为应用程序在处理对象、魔术函数以及序列化相关问题的时候导致的。
当传给 unserialize() 的参数可控时,那么用户就可以注入精心构造的 payload。当进行反序列化的时候就有可能会触发对象中的一些魔术方法,造成意想不到的危害。
二、复现课堂的php所有魔术方法案例
1._destruct
网站源码:

POP链构造:

传参点传入O:1:"B":1:{s:3:"cmd";s:4:"calc";}
成功打开计算器

2._construct
网站源码:

POP链构造:

传入O:1:"S":1:{s:4:"test";s:30:"<script>alert('zeke')</script>";}

3.Level 1:类的实例化
第一题考察 类的实例化 —— 也就是对象的创建。
在 PHP 中,我们使用 new + 类名() 去创建一个对象。


4.Level 2: 对象中值的传递
考察对象的赋值操作,相比于面向过程,对对象中值的更改,需要通过 -> 符号来指向可修改的变量,这里的可修改指的是 控制修饰符 public 对应的值,像 protected 和 private 修饰的值,需要使用更复杂的修改方法。
对于任何可以修改的值,我们使用 $对象名 -> 对应值 = 值 .eg: $object_name->a="a"
所以在这个题目中,我们需要将 $flag_string 赋值给 $free_flag 以便我们后面的 get_free_flag() 函数将他输出出来。


三、审计以下代码,构造pop链进行漏洞利用


POP链构造:

生成的序列化字符串:
O:11:"ctfShowUser":3:{s:8:"username";s:5:"admin";s:8:"password";s:5:"admin";s:5:"isVip";b:1;}
四、审计以下代码,构造pop链进行漏洞利用


POP链构造

生产的序列化字符串:(url编码)
user=O:11:"ctfShowUser":3:{s:8:"username";s:4:"hack";s:8:"password";s:4:"hack";s:5:"isVip";b:1;}
一、笔记标题:WEB渗透系统班-反序列化漏洞-PHP(上)+反序列化漏洞-PHP(下)
二、文章内容:
1.课程内容概要
主要知识点1:反序列化漏洞原理
主要知识点2:反序列化漏洞利用
主要知识点3:魔术方法
2.重点知识与细节
概念解析
概念1:魔术方法_destruct


概念2:
关键步骤
步骤1:无
步骤2:
步骤3:
相关代码
ctf1


ctf2


3.实操练习和解析
如作业
4.个人总结
本节课最大的收获是:学习了反序列化漏洞的原理和利用
仍然存在疑问的地方:暂无
需要课后深入学习的内容:靶场