phar:// 导致的反序列化漏洞

2018-08-22 10:21:49
漏洞曝光时间:2018-08-22漏洞风险程度:高危漏洞曝光程度:已经公开受漏洞影响软件以及版本: PHP > 5.3缓解或修复方案: 1、对PHAR档案进行签名检测。2、如果不需要,禁用PHAR扩展。漏洞描述: Untitled 大多数PHP文件操作允许使用各种URL协议去访问文件路径:如data://,zlib://或php://。其中一些通常用于利用远程文件包含漏洞,攻击者可以利用它们
漏洞曝光时间:2018-08-22
漏洞风险程度:高危
漏洞曝光程度:已经公开
受漏洞影响软件以及版本:

PHP > 5.3

缓解或修复方案:
1、对PHAR档案进行签名检测。
2、如果不需要,禁用PHAR扩展。
漏洞描述:

Untitled

大多数PHP文件操作允许使用各种URL协议去访问文件路径:如data://,zlib://或php://。其中一些通常用于利用远程文件包含漏洞,攻击者可以利用它们控制文件包含的完整路径,但是很少人关注 phar://,Phar(PHP Archive)文件的有趣之处在于它包含序列化格式的元数据。
通过以下代码创建phar

<?php
class TestObject
{
}
@unlink("phar.phar");
$phar = new Phar("phar.phar");
$phar->startBuffering();
$phar->addFromString("test.txt","test");
$phar->setStub("<?php __HALT_COMPILER(); ?>");
$o = new TestObject();
$phar->setMetadata($o);
$phar->stopBuffering();
?>

通过以下代码进行测试:

<?php
class TestObject
{
function __destruct()
{
echo "DESTRUCT!\n";
}
}
echo(file_get_contents("phar://phar.phar/test.txt"));
?>

通过执行结果可以看到,如果现在通过phar://对我们现有的Phar文件进行文件操作,则其序列化元数据将被反序列化。这意味着我们在元数据中注入的对象将被加载到应用程序中。如果此应用程序具有已命名的类TestObject,并且具有魔术函数destruct()wakeup(),则会自动调用这些方法。这意味着我们可以在代码库中触发任何析构函数或唤醒方法,如果这些魔法函数对我们注入的数据进行操作,那么这可能会导致进一步的漏洞。

攻击者如果可以控制诸如include(),fopen(),file_get_contents(),file()等文件操作的函数,则可以造成严重的漏洞。因此,通常需要在这些函数使用前验证用户的输入。

到目前为止,攻击者如果可以控制诸如include(),fopen(),file_get_contents(),file()等文件操作的函数,则可以造成严重的漏洞。因此,通常需要在这些函数使用前验证用户的输入。

最新资讯