CVE-2025-45346 Bacula-Web 时间盲注漏洞利用与PostgreSQL版本提取

本文详细介绍了CVE-2025-45346漏洞,这是一个存在于Bacula-Web中的时间盲注漏洞,攻击者可通过该漏洞提取PostgreSQL数据库版本信息,包含完整的利用流程和缓解措施。

CVE-2025-45346 – Bacula-Web 基于时间的SQL注入(PostgreSQL版本提取)

📝 概述

漏洞标题: Bacula-Web中的基于时间的盲注SQL注入
产品: Bacula-Web
受影响版本: 确认支持PostgreSQL后端的版本
CVE ID: CVE-2025-45346
严重程度: 高
攻击向量: 远程
影响: 任意SQL执行,信息泄露


🧨 描述

此概念验证(PoC)演示了Bacula-Webjobfiles端点中存在基于时间的盲注SQL注入漏洞。
远程攻击者可利用此缺陷,通过触发使用pg_sleep()函数的故意延迟,从底层PostgreSQL数据库中提取信息——包括数据库版本。


🚀 特性

  • 通过时间延迟测试确认SQL注入存在
  • 自动逐字符提取PostgreSQL版本
  • 使用URL编码的有效载荷以提高精确度
  • 在版本提取过程中打印实时进度

📌 使用方法

⚙️ 要求

  • Python 3.x
  • requests库(pip install requests

🔧 配置

编辑脚本并设置:

1
2
base_url = "http://baculaweb.domain/jobfiles/29/1/"
cookies = {"Bacula-Web": "REPLACEME"}

替换:

  • base_url为您的Bacula-Web目标URL
  • REPLACEME为有效的Bacula-Web会话cookie

🏃 运行脚本

1
python3 extract_pgsql_version.py

🧾 漏洞利用流程

  1. 发送带有pg_sleep(2)的良性SQL有效载荷以验证注入。
  2. 如果服务器响应耗时约2秒,脚本继续提取版本。
  3. 它使用SUBSTRING()循环遍历PostgreSQL版本字符串中的位置,并逐个字符进行比较。
  4. 基于延迟的检测识别正确字符。

🔐 影响

  • 向远程攻击者暴露敏感数据库信息
  • 可能被利用以链接到进一步的基于SQL的利用
  • 破坏对备份作业可见性的Web界面的信任

🛡️ 缓解措施

  • jobfiles路由上应用输入验证
  • 在后端逻辑中使用参数化查询
  • 将Bacula-Web升级到最新的修补版本(一旦可用)

👨‍💻 发现者

安全研究员 – Kevin Suckiel – 0xsu3ks
通过负责任披露披露的CVE-2025-45346 PoC。


⚠️ 法律声明

此工具仅用于授权测试和研究目的
作者不对此PoC的任何未经授权使用或滥用负责。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计