PHP - RCE abusing object creation: new $_GET["a"]($_GET["b"])
Last updated
Last updated
学习与实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习与实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)
这基本上是对 https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/ 的总结
创建新的任意对象,例如 new $_GET["a"]($_GET["a"])
,可能导致远程代码执行 (RCE),详细信息见 写作。本文档强调了实现 RCE 的各种策略。
语法 new $a($b)
用于实例化一个对象,其中 $a
代表类名,$b
是传递给构造函数的第一个参数。这些变量可以来自用户输入,如 GET/POST,它们可以是字符串或数组,或来自 JSON,它们可能呈现为其他类型。
考虑下面的代码片段:
在这种情况下,将 $a
设置为 App
或 App2
,并将 $b
设置为系统命令(例如,uname -a
)会导致该命令的执行。
自动加载函数 可以被利用,如果没有这样的类可以直接访问。这些函数在需要时会自动从文件加载类,并使用 spl_autoload_register
或 __autoload
定义:
autoloading的行为因PHP版本而异,提供不同的RCE可能性。
在缺乏自定义类或自动加载器的情况下,内置PHP类可能足以实现RCE。这些类的数量根据PHP版本和扩展的不同而在100到200之间。可以使用get_declared_classes()
列出它们。
可以通过反射API识别感兴趣的构造函数,如以下示例和链接所示 https://3v4l.org/2JEGF。
通过特定方法进行RCE包括:
SplFileObject
类通过其构造函数启用SSRF,允许连接到任何URL:
SSRF 可以导致在 PHP 8.0 之前的版本中使用 Phar 协议的反序列化攻击。
PDO 类构造函数允许通过 DSN 字符串连接到数据库,可能会启用文件创建或其他交互:
PHP 版本高达 5.3.22 和 5.4.12 易受通过 SoapClient
和 SimpleXMLElement
构造函数的 XXE 攻击,具体取决于 libxml2 的版本。
在对 项目依赖 的分析中,发现 Imagick 可以通过实例化新对象来实现 命令执行。这为利用漏洞提供了机会。
识别到 VID 解析器具有将内容写入文件系统中任何指定路径的能力。这可能导致在可通过网络访问的目录中放置 PHP shell,从而实现远程代码执行 (RCE)。
注意到 PHP 会将上传的文件临时存储在 /tmp/phpXXXXXX
中。Imagick 中的 VID 解析器利用 msl 协议,可以处理文件路径中的通配符,便于将临时文件转移到选定位置。这种方法提供了在文件系统内实现任意文件写入的额外途径。
在 原始写作 中描述的方法涉及上传触发服务器崩溃的文件,然后再删除。通过暴力破解临时文件的名称,Imagick 可以执行任意 PHP 代码。然而,发现这种技术仅在过时的 ImageMagick 版本中有效。
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)