PHP - RCE abusing object creation: new $_GET["a"]($_GET["b"])
这基本上是https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/的摘要
简介
创建新的任意对象,例如new $_GET["a"]($_GET["a"])
,可能导致远程代码执行(RCE),详细信息请参阅writeup。本文档突出了实现RCE的各种策略。
通过自定义类或自动加载实现RCE
语法new $a($b)
用于实例化一个对象,其中**$a
表示类名,$b
**是传递给构造函数的第一个参数。这些变量可以来自用户输入,如GET/POST,其中它们可能是字符串或数组,或来自JSON,其中它们可能呈现为其他类型。
考虑下面的代码片段:
在这个例子中,将$a
设置为App
或App2
,将$b
设置为系统命令(例如uname -a
)会导致该命令被执行。
如果没有直接访问这些类,自动加载函数就可以被利用。这些函数在需要时会自动从文件中加载类,并且是使用spl_autoload_register
或__autoload
来定义的:
通过内置类实现RCE
缺乏自定义类或自动加载程序时,内置PHP类可能足以实现RCE。这些类的数量在100到200之间不等,取决于PHP版本和扩展。可以使用get_declared_classes()
列出它们。
可以通过反射API识别感兴趣的构造函数,如下例和链接https://3v4l.org/2JEGF所示。
通过特定方法实现RCE包括:
SSRF + Phar反序列化
SplFileObject
类通过其构造函数实现SSRF,允许连接到任何URL:
利用PDOs
PDO类构造函数允许通过DSN字符串连接到数据库,可能会启用文件创建或其他交互:
SoapClient/SimpleXMLElement XXE
PHP版本在5.3.22和5.4.12及以下存在对SoapClient
和SimpleXMLElement
构造函数的XXE攻击漏洞,取决于libxml2的版本。
通过Imagick扩展实现RCE
在分析项目的依赖关系时,发现可以通过实例化新对象来利用Imagick执行命令执行。这为利用漏洞提供了机会。
VID解析器
发现VID解析器具有将内容写入文件系统中任意指定路径的能力。这可能导致在可通过web访问的目录中放置PHP shell,从而实现远程代码执行(RCE)。
VID解析器 + 文件上传
注意到PHP会将上传的文件临时存储在/tmp/phpXXXXXX
中。Imagick中的VID解析器,利用msl协议,可以处理文件路径中的通配符,从而促进将临时文件传输到所选位置。这种方法提供了另一种实现文件系统内任意文件写入的途径。
PHP崩溃 + 暴力破解
在原始文档中描述了一种方法,涉及上传触发服务器崩溃的文件。通过对临时文件名进行暴力破解,Imagick可以执行任意PHP代码。然而,这种技术只在过时版本的ImageMagick中有效。
参考资料
最后更新于