用于对象注入的PHP serialize()
我目前正在分析名为PHP对象注入的PHP攻击方法,该方法允许由于unserialize()函数中未初始化的输入而修改已定义的对象 代码如下:用于对象注入的PHP serialize(),php,object,serialization,code-injection,exploit,Php,Object,Serialization,Code Injection,Exploit,我目前正在分析名为PHP对象注入的PHP攻击方法,该方法允许由于unserialize()函数中未初始化的输入而修改已定义的对象 代码如下: <?php class foo {} class SuperClass {} $ss = 'O:3:"foo":2:{s:4:"test";b:1;s:2:"fg";O:10:"SuperClass":0:{}};'; print_r(unserialize($ss)); ?> 我的问题是,如何重新创建可以传递给serialize()
<?php
class foo {}
class SuperClass {}
$ss = 'O:3:"foo":2:{s:4:"test";b:1;s:2:"fg";O:10:"SuperClass":0:{}};';
print_r(unserialize($ss));
?>
我的问题是,如何重新创建可以传递给serialize()函数以创建相同输入字符串的对象结构?PHP不允许嵌套类,所以我对是否可以用serialize()生成这样的字符串感到困惑
以下是我的做法,但由于PHP不允许嵌套类,因此无法工作:
class foo {
public $test = 1;
public $fg = class SuperClass {
}
}
echo serialize(new foo);
这些字段可能需要是类的实例
class foo {
public $test = 1;
public $fg = new SuperClass();
}
var_dump(serialize(new foo()));
除了语法之外,PHP7还提供匿名类功能
public $fg = new class() extends SuperClass {
// some additional implementation here
}
因此,您可以添加稍后将在序列化字符串中显示的字段。在当前示例中,不存在任何 如果您想了解PHP将如何序列化这样的类结构,而这正是我假设您要问的问题,那么请像这样创建您的类
<?php
class SuperClass
{
public $name = 'SuperClass';
}
class foo
{
public $name = 'foo';
public $test = 1;
}
$s = new SuperClass();
$f = new foo();
$s->fg = $f;
$ss = serialize($s);
echo $ss . PHP_EOL;
$hydrated = unserialize($ss);
print_r($hydrated);
您可以玩这个游戏,看看如何操作序列化字符串,将任何内容添加到字符串中,以使对象包含您想要的任何内容。只是为了澄清您想将
$ss
与非序列化($ss)
转换回对象,但它不工作?或者您试图重新创建什么?它不应该是这样的:public$fg=new SuperClass(){};您是否尝试拆分newfoo
snd并尝试类似$foo=newfoo()的操作;echo序列化($foo)代码>PHP7允许匿名类非常感谢您!这正是我想要的。我不认为我可以在序列化之前修改已定义类中的属性。
<?php
class SuperClass
{
public $name = 'SuperClass';
}
class foo
{
public $name = 'foo';
public $test = 1;
}
$s = new SuperClass();
$f = new foo();
$s->fg = $f;
$ss = serialize($s);
echo $ss . PHP_EOL;
$hydrated = unserialize($ss);
print_r($hydrated);
O:10:"SuperClass":2:{s:4:"name";s:10:"SuperClass";s:2:"fg";O:3:"foo":2:{s:4:"name";s:3:"foo";s:4:"test";i:1;}}
SuperClass Object
(
[name] => SuperClass
[fg] => foo Object
(
[name] => foo
[test] => 1
)
)