【WEB】Polar靶场 21-25题 详细笔记
二十一.php very nice

php又是你
,但是经过这么多次折磨后我感觉我已经有一点抗性了
老规矩,先看知识点
PHP 序列化
是将 PHP 变量(如对象、数组)转换为字符串的过程,便于存储或传输。反序列化则是将字符串还原为原始变量。这在缓存、会话管理、RPC(远程过程调用)等场景中广泛应用。
PHP 序列化的核心函数
1.
serialize(mixed $value): string将变量转换为可存储或传输的字符串格式。
2.
unserialize(string $serialized): mixed将序列化字符串还原为原始变量。
PHP 序列化字符串的基本结构:
类型:长度:值;常见类型标识
类型 标识 示例 字符串 ss:5:"hello";整数 ii:42;浮点数 dd:3.14;布尔值 bb:1;(true)或b:0;(false)空值 NN;数组 aa:2:{i:0;s:5:"apple";i:1;s:6:"banana";}对象 OO:4:"User":2:{s:4:"name";s:5:"Alice";s:3:"age";i:30;}
在这道题中unserialize($_GET['a'])程序接收 URL 参数 a(用户可控的序列化字符串),并对其反序列化。
在你提供的代码中,__destruct() 是 PHP 的一个魔术方法,当对象被销毁时会自动调用。具体来说,这个方法在以下几种情况下会被触发:
- 脚本执行完毕时,所有对象都会被销毁。
- 使用
unset()函数手动销毁对象。 - 对象被赋值为其他值,原对象的引用被覆盖。
Day7:
今天头晕,明天再补
