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