freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

PHP phar:协议对象注入技术介绍
FreeBuf_25425 2018-08-31 15:30:48 479813
所属地 浙江省

前言

在之前的BlackHat 2018大会上公布了一款针对PHP应用程序的全新攻击技术。我们将通过这篇文章简单介绍下。

来自Secarma的安全研究员Sam Thomas发现了一种新的开发技术,它可以导致PHP对象注入漏洞——而无需使用PHPunserialize()函数。这项新技术是在BlackHat 2018大会上公布的,利用PHP反序列化漏洞升实现远程代码执行。我们在RIPS代码分析引擎中添加了对这种新型攻击的检测。

常见样式

大多数PHP文件操作允许在访问文件路径时使用各种url样式,如data://zlib://php://。这些操作通常用于远程文件,攻击者可以在其中控制文件包含完整的文件路径。

远程文件包含漏洞利用:

include($_GET['file'])
include('php://filter/convert.base64-encode/resource=index.php');
include('data://text/plain;base64,cGhwaW5mbygpCg==');

Phar元数据

但到目前为止,很少有人关注phar://这个点。Phar(PHP Archive)文件的有趣之处在于它们包含序列化格式的元数据。让我们创建一个Phar文件,并添加一个包含一些数据作为元数据的对象:

// create new Phar
$phar = new Phar('test.phar');
$phar->startBuffering();
$phar->addFromString('test.txt', 'text');
$phar->setStub('');
// add object of any class as meta data
class AnyClass {}
$object = new AnyClass;
$object->data = 'rips';
$phar->setMetadata($object);
$phar->stopBuffering();

我们新建的test.phar文件有以下内容。我们可以看到对象被存储为一个序列化的字符串。

1.png

PHP对象注入

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

class AnyClass {
    function __destruct() {
        echo $this->data;
    }
}
// output: rips
include('phar://test.phar');

利用

首先,攻击者必须能够在目标Web服务器上植入一个Phar文件。Sam Thomas发现了一个如何将Phar文件隐藏到JPG文件中的技巧,因此只要常见的图片上传功能就足够。但这并不重要,因为如果攻击者可以在ìnclude()fopen()file_get_contents()file()等操作中控制完整的文件路径,那么将会造成严重的安全漏洞。因此,通常会在用户输入中验证这些功能。但是现在攻击者可以通过phar://注入并获得代码执行。

到目前为止看起来无害的代码示例:

file_exists($_GET['file']);
md5_file($_GET['file']);
filemtime($_GET['file']);
filesize($_GET['file']);

总结

通过RIPS的分析,我们可以自动检测用户输入是否在PHP文件操作中未经验证。

这样,我们检测是否存在文件删除、文件泄露、文件写入,文件操作,文件创建、文件包含(等等)漏洞。

检测漏洞

此外,RIPS对敏感字符串分析使我们能够精确评估文件路径是完全还是由攻击者控制,以及是否可以phar://注入。最后,我们在RIPS代码分析器中添加了一个名为Phar Deserialization的新漏洞类型,以检测这种新类型的代码风险。

*参考来源:rips,由周大涛编译,转载请注明来自FreeBuf.COM

# PHP phar # 协议对象注入
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 FreeBuf_25425 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
web
FreeBuf_25425 LV.7
这家伙太懒了,还未填写个人描述!
  • 95 文章数
  • 81 关注者
红队技巧:SQL Server Extended Stored Procedures命令执行
2021-10-02
实战中常见的十种cookie漏洞
2021-03-03
红队技巧 | SharpSphere dump LSASS内存
2021-02-26
文章目录