理论知识:
https://portswigger.net/web-security/deserialization
Lab: Modifying serialized objects——实验室:修改序列化对象
原理:
基于序列化的会话机制:实验室使用了序列化的对象来存储用户的会话信息。这些对象通常包含用户的身份和权限等信息。
序列化对象:在 PHP 中,可以使用 serialize() 函数将对象转换为字符串表示形式,方便存储和传输。反过来,unserialize() 函数可以将字符串还原为原始对象。
漏洞点:实验中,序列化对象包含了用户的权限信息(例如 admin 属性)。攻击者可以通过修改序列化对象的内容(如将 admin 属性从 b:0 更改为 b:1),来伪造管理员权限。
实验记录:

登录用户

dashboard发现反序列化漏洞

将cookie处base64解码后,修改s:5:”admin”;b:1;


对比可发现存在admin panel
/admin/delete?username=carlos修改请求路径发包

总结:
改个参数而已
Lab: Modifying serialized data types——实验室:修改序列化数据类型
原理:
在 PHP 7.x 及更早版本中,PHP 对不同类型的数据进行比较时有特殊的行为。当进行比较时,PHP 会将字符串 "0" 和整数 0 视为相等(即 "0" == 0 为 true),这可能被用来绕过身份验证机制。
实验记录:

登录

将username改为administrator,access_token改为int类型且为0,修改id为administrator重新发包

可以看到admin panel,修改请求路径为/admin/delete?username=carlos

总结:
根据php版本的特性导致的判断绕过
Lab: Using application functionality to exploit insecure deserialization——实验室:使用应用程序功能来利用不安全的反序列化
原理:
反序列化后的对象包含一个 avatar_link 属性,指向用户的头像文件路径。攻击者可以通过修改这个属性,指向系统上的其他文件(例如,卡洛斯的 morale.txt 文件)。
实验记录:

登录,发现存在一个头像上传功能(可以不用上传内容),功能点是思路是:账户存在,然后用户可以上传图片,图片被保存,下面一个delete account功能,删除用户后,服务器将用户上传的图片删除,我们通过删除用户功能抓包修改图片的地址即可

删除/home/carlos/morale.txt

总结:
需要对系统功能进行理解,删除用户的同时删除头像,将头像路径替换即可删除其他文件
Lab: Arbitrary object injection in PHP——实验室:PHP 中的任意对象注入
原理:
利用编辑器生成的备份文件(通过在文件名后加 ~),读取源代码 /libs/CustomTemplate.php。 发现 CustomTemplate 类包含 __destruct() 方法,调用了 unlink(),删除了由 $lock_file_path 属性指定的文件。根据 PHP 序列化语法构造对象,使 $lock_file_path 指向目标文件 /home/carlos/morale.txt
实验记录:

登录后查看源代码发现引用文件

通过在文件名后附加波形符(~ )来读取源代码

本来想展示一下高端操作,结果还要考虑绕过什么的,不会。遂放弃

根据上面生成的序列化内容改写为如下的payload
O:14:"CustomTemplate":1:{s:14:"lock_file_path";s:23:"/home/carlos/morale.txt";}
放到cookie中发包即可,反序列化的结果为lock_file_path文件路径为/home/carlos/morale.txt,

总结:
按照我浅薄的理解,__destruct() 方法会在对象销毁时自动执行,而内容为检测锁文件是否存在以及删除锁文件,这段代码的含义为在修改模板文件时创建一个锁文件.lock,当修改完毕后删除锁文件。我们将序列化的内容中锁文件的路径指定为其他文件路径,当其进行反序列化时,触发__destruct()方法,被指定的路径文件将被删除