想象一下,有一个带有给定(简化)代码的框架:
$serialized = serialize($_POST);
// ... save $serialized to database
$unserialized = unserialize($serialized);
foreach ($unserialized as $key => $value) {
echo $key . ': ' . $value . PHP_EOL;
}
攻击者可以控制一个$ _POST键/值对,例如
$_POST['exploit'] = "Exploit Value";
攻击者只能将值设置为字符串。攻击者仍然可以使用PHP Object Injection吗?如果可以,怎么办?
我试图这样设置值
$_POST['exploit'] = 'O:17:"foo\data\Example1":1:{s:10:"cache_file";s:4:"test";}';
,但是最终被序列化为s:58:"O:17:"foo\data\Example1":1:{s:10:"cache_file";s:4:"test";}"
,无法用于利用脚本。