PHP反序列化漏洞POP链详解 - Yii框架案例分析 (②)

POP链的第二条路:从Faker\Generator开始

现在,让我们一步步解析这条攻击链。我们将从Faker\Generator类的__call魔术方法开始,追踪到最终执行危险函数的地方。

第一步:触发__call魔术方法

在PHP中,当你尝试调用一个对象中不存在的方法时,如果该对象定义了__call魔术方法,PHP会自动调用它。

假设我们有一个Faker\Generator对象:

$generator = new Faker\Generator();
$generator->nonExistentMethod();  // 这个方法不存在

因为nonExistentMethod()方法不存在,PHP会自动调用:

$generator->__call('nonExistentMethod', []);

这就是我们的链条起点。

第二步:__call方法调用format方法

__call魔术方法被触发后,它会做什么呢?根据Faker库的代码,__call方法实现如下:

public function __call($method, $attributes)
{
    return $this->format($method, $attributes);
}

这段代码非常简单:它接收被调用的方法名和参数,然后调用自己的format方法,并将方法名和参数传递过去。

你可能感兴趣的:(android,前端,javascript)