Yii框架反序列化RCE漏洞利用分析

需积分: 0 2 下载量 61 浏览量 更新于2024-08-05 收藏 1.87MB PDF 举报
"Yii框架中的反序列化漏洞利用链,主要涉及`yii\rest\IndexAction`类和Symfony组件的`UnicodeString`和`LazyString`类,利用反序列化机制触发远程代码执行(RCE)" 在Yii框架中,反序列化漏洞是一种常见的安全问题,它允许攻击者通过构造特定的序列化数据来控制程序流程,从而可能执行任意代码。此文章关注的是一个未修复的漏洞利用链,具体涉及到Yii框架的`yii\rest\IndexAction`类和Symfony组件的`UnicodeString`与`LazyString`类。 1. **寻找反序列化点** - 在这个场景中,`UnicodeString`类的`__wakeup`方法被找到,它调用了`normalizer_is_normalized`方法,而该方法的参数必须是字符串。由于`this->string`是可以控制的,所以可以通过构造特殊的序列化数据来影响执行流程。 2. **利用链构造** - `__toString`方法被用来构造利用链的关键部分。找到`LazyString`类的`__toString`方法,其中`($this->value)()`形式表明函数名是可控的。 - 结合`IndexAction`类的`run`方法,可以创建一个反序列化利用链,即`IndexAction`实例化后,其`run`方法被调用,这进一步导致`UnicodeString`的`__toString`和`__wakeup`方法执行。 3. **最终利用链** - 首先,实例化`IndexAction`类,并设置`$checkAccess`、`$id`和`$config`变量。 - 然后,创建一个`LazyString`实例,将它的`$value`变量设置为包含`IndexAction`类和`run`方法的数组。 - 最后,创建`UnicodeString`实例,将它的`$string`变量设置为`LazyString`类。 4. **payload构造** - 文章提供了PHP代码示例,创建了命名空间和类的定义,用于模拟漏洞利用链。实际的exploit(payload)可能需要根据具体的环境和目标进行调整。 这个漏洞利用链展示了如何通过精心设计的序列化数据来触发RCE。由于官方未提供补丁,开发者需要自行评估风险并采取相应的安全措施,比如限制不受信任的数据源的反序列化,或者在应用层面上进行输入验证和过滤。此外,定期更新框架和依赖库以获取最新的安全修复也是防范此类问题的重要手段。