Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
rdpscan — Ein schneller Scanner für die CVE-2019-0708 "BlueKeep"-Sicherheitslücke. | Kitploit
Tools/GitHubGitHub/robertdavidgraham/rdpscan
SchwachstellenscannerExploitationNetzwerksicherheit
GitHubrobertdavidgraham/rdpscan

rdpscan

Ein schneller Scanner für die CVE-2019-0708 "BlueKeep"-Sicherheitslücke.

Repository anzeigen
921237vor 7 JahrenVon Kitploit geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

Windows download macOS download Linux download Follow Build

rdpscan für CVE-2019-0708 (BlueKeep-Sicherheitslücke)

Dies ist ein schneller und einfacher Scanner für die Sicherheitslücke CVE-2019-0708 in Microsoft Remote Desktop. Derzeit sind etwa 900.000 Rechner im öffentlichen Internet anfällig für diese Sicherheitslücke, daher ist zu erwarten, dass bald ein Wurm wie WannaCry oder notPetya auftaucht. Scannen Sie daher Ihre Netzwerke und patchen Sie (oder aktivieren Sie zumindest NLA) auf anfälligen Systemen.

Dies ist ein Kommandozeilenwerkzeug. Sie können den Quellcode herunterladen und selbst kompilieren, oder Sie können eine der vorkompilierten Binärdateien für Windows oder macOS über den obigen Link herunterladen.

Dieses Werkzeug basiert vollständig auf dem rdesktop-Patch von https://github.com/zerosum0x0/CVE-2019-0708. Ich habe den Code lediglich so gekürzt, dass ich ihn problemlos unter macOS und Windows kompilieren kann, und habe die Möglichkeit hinzugefügt, mehrere Ziele zu scannen.

Status

Dies ist erst wenige Tage alt und experimentell. Ich teste es jedoch durch Scannen des gesamten Internets (mit Hilfe von masscan), sodass ich recht schnell eine Menge Probleme behebe. Sie können mich auf Twitter (@erratarob) kontaktieren, um Hilfe/Kommentare zu erhalten.

  • 2019-05-38 – Bessere Ergebnisbeschreibungen sowie Dokumentation ihrer Bedeutung (siehe unten).
  • 2019-05-27 – Windows- und macOS-Binärdateien veröffentlicht (Klicken Sie auf die Badges oben).
  • 2019-05-26 – Behebung der Windows-Netzwerkprobleme
  • 2019-05-25 – Linux und macOS funktionieren gut, Windows hat einige Netzwerkfehler
  • 2019-05-24 – Funktioniert unter Linux und macOS, Windows hat einige Kompilierungsfehler
  • 2019-05-23 – Arbeitet derzeit unter macOS in XCode

Hauptverwendung

Um ein Netzwerk zu scannen, führen Sie es wie folgt aus:

root@kitploit:~
rdpscan 192.168.1.1-192.168.1.255

Dies erzeugt für jede Adresse eines von drei Ergebnissen:

  • SAFE – wenn das Ziel als gepatcht oder zumindest als CredSSP/NLA erfordernd eingestuft wurde
  • VULNERABLE – wenn das Ziel als anfällig bestätigt wurde
  • UNKNOWN – wenn das Ziel nicht antwortet oder ein Protokollfehler auftritt

Wenn an einer Ziel-IP-Adresse nichts vorhanden ist, druckten die älteren Versionen die Meldung "UNKNOWN – Verbindungszeitüberschreitung". Beim Scannen großer Netzwerke führt dies zu einer Überflutung mit Informationen über Systeme, die Sie nicht interessieren. Daher unterdrückt die neue Version diese Informationen standardmäßig, es sei denn, Sie fügen -v (für verbose) auf der Kommandozeile hinzu.

Sie können die Geschwindigkeit beim Scannen großer Netzwerke erhöhen, indem Sie die Anzahl der Worker erhöhen:

root@kitploit:~
rdpscan --workers 10000 10.0.0.0/8

Auf meinem Computer werden jedoch nur etwa 1500 Worker erzeugt, aufgrund von Systemeinschränkungen, egal wie hoch ich diesen Parameter einstelle.

Sie können die Geschwindigkeit noch weiter erhöhen, indem Sie dies in Verbindung mit masscan verwenden, wie unten im zweiten Abschnitt beschrieben.

Interpretation der Ergebnisse

Es gibt drei allgemeine Antworten:

  • SAFE – bedeutet, dass das Ziel wahrscheinlich gepatcht oder anderweitig nicht anfällig für den Fehler ist.
  • VULNERABLE – bedeutet, dass wir bestätigt haben, dass das Ziel anfällig für diesen Fehler ist und wahrscheinlich infiziert wird, sobald der Wurm zuschlägt.
  • UNKNOWN – bedeutet, dass wir weder bestätigen noch ausschließen können, normalerweise weil das Ziel nicht antwortet oder kein RDP ausführt, was die überwiegende Mehrheit der Antworten ausmacht. Auch wenn Ziele überlastet sind oder Netzwerkprobleme auftreten, erhalten wir viele davon. Schließlich sind Protokollfehler für viele verantwortlich. Während die drei Hauptantworten SAFE, VULNERABLE und UNKNOWN sind, enthalten sie zusätzlichen Text, der die Diagnose erklärt. Dieser Abschnitt beschreibt die verschiedenen Zeichenfolgen, die Sie sehen werden.

SAFE

Es gibt drei Hauptgründe, warum wir ein Ziel für sicher halten:

  • SAFE – Target appears patched Dies tritt auf, wenn das Ziel nicht auf die auslösende Anfrage reagiert. Dies bedeutet, dass es sich um ein Windows-System handelt, das gepatcht wurde, oder um ein System, das von Anfang an nicht anfällig war, wie Windows 10 oder Unix.
  • SAFE – CredSSP/NLA required Dies bedeutet, dass das Ziel zuerst eine Netzwerkauthentifizierung auf Netzwerkebene (NLA) erfordert, bevor die RDP-Verbindung hergestellt werden kann. Das Werkzeug kann diesen Punkt ohne legitime Anmeldeinformationen nicht passieren und kann daher nicht feststellen, ob das Ziel gepatcht wurde. Allerdings können Hacker auch nicht über diesen Punkt hinausgehen, um anfällige Systeme auszunutzen, daher sind Sie wahrscheinlich "sicher". Wenn jedoch Exploits auftauchen, können Insider mit gültigen Benutzernamen/Passwörtern das System ausnutzen, wenn es nicht gepatcht ist.
  • SAFE – not RDP Dies bedeutet, dass das System kein RDP verwendet, sondern einen anderen Dienst, der zufällig denselben Port verwendet und eine Antwort erzeugt, die eindeutig nicht RDP ist. Häufige Beispiele sind HTTP und SSH. Beachten Sie jedoch, dass ein Server anstelle eines identifizierbaren Protokolls mit einem RST- oder FIN-Paket antworten kann. Diese werden als UNKNOWN identifiziert, nicht als SAFE.

VULNERABLE

Dies bedeutet, dass wir bestätigt haben, dass das System anfällig für den Fehler ist.

  • VULNERABLE – got appid Es gibt nur eine Antwort, wenn das System anfällig ist, diese.

UNKNOWN

Es gibt unzählige Variationen für UNKNOWN

  • UNKNOWN – no connection – timeout Dies ist bei weitem die häufigste Antwort und tritt auf, wenn die Ziel-IP-Adresse überhaupt nicht antwortet. Tatsächlich ist sie so häufig, dass sie beim Scannen großer Adressbereiche normalerweise weggelassen wird. Sie müssen das Flag -v (verbose) hinzufügen, um sie zu aktivieren.
  • UNKNOWN – no connection – refused (RST) Dies ist bei weitem die zweithäufigste Antwort und tritt auf, wenn das Ziel existiert und auf Netzwerkverkehr antwortet, aber kein RDP ausführt, sodass es die Verbindung mit einem TCP-RST-Paket ablehnt.
  • UNKNOWN – RDP protocol error – receive timeout Dies ist die dritthäufigste Antwort und tritt auf, wenn wir erfolgreich eine RDP-Verbindung hergestellt haben, der Server dann aber nicht mehr antwortet. Dies liegt an Netzwerkfehlern oder daran, dass das Zielsystem aus irgendeinem Grund überlastet ist. Es könnten auch Netzwerkfehler auf unserer Seite sein, zum Beispiel wenn Sie hinter einem NAT sitzen und dieses mit zu vielen Verbindungen überlasten.
  • UNKNOWN – no connection – connection closed Dies bedeutet, dass wir eine Verbindung hergestellt haben (TCP SYN-ACK), diese aber dann sofort geschlossen wird (mit einem RST oder FIN). Dafür gibt es viele Gründe, die wir nicht unterscheiden können:
    • Es läuft RDP, aber die Verbindung wird aus irgendeinem Grund geschlossen, möglicherweise aufgrund von Ressourcenknappheit.
    • Es ist nicht RDP und die gesendete RDP-Anfrage wird nicht akzeptiert, sodass die Verbindung abrupt geschlossen wird, anstatt eine nette Fehlermeldung zu senden (was SAFE – not RDP auslösen würde).
    • Ein zwischengeschaltetes Gerät wie ein IPS, eine Firewall oder ein NAT schließt die Verbindung, weil es diese als feindselig identifiziert hat oder weil ihm die Ressourcen ausgehen.
    • Ein anderer Grund, den ich nicht identifiziert habe – es passiert viel Seltsames beim Scannen des Internets.
  • UNKNOWN – no connection – host unreachable (ICMP error) Das entfernte Netzwerk meldet, dass der Host nicht erreichbar ist oder nicht läuft. Versuchen Sie es später erneut, wenn Sie glauben, dass der Host aktiv sein sollte.
  • UNKNOWN – no connection – network unreachable (ICMP error) Es liegt ein (vorübergehender) Netzwerkfehler auf der Gegenseite vor; versuchen Sie es später erneut, wenn Sie glauben, dass dieses Netzwerk laufen sollte.
  • UNKNOWN – RDP protocol error Dies bedeutet, dass eine Beschädigung des RDP-Protokolls aufgetreten ist, entweder weil die Gegenseite es falsch implementiert (kein Windows-System), weil sie einen vorübergehenden Netzwerkfehler schlecht verarbeitet, oder aus einem anderen Grund.
  • UNKNOWN – SSL protocol error Seit Windows Vista verwendet RDP das STARTTLS-Protokoll, um über SSL zu laufen. Diese Ebene hat ihre eigenen Probleme wie oben, einschließlich der schlechten Verarbeitung von zugrunde liegenden Netzwerkfehlern oder des Versuchs, mit Systemen zu kommunizieren, die eine Inkompatibilität aufweisen. Wenn Sie hier eine sehr lange Fehlermeldung erhalten (wie SSL3_GET_RECORD:wrong version), liegt es daran, dass die andere Seite einen Fehler in SSL hat, oder Ihre eigene verwendete SSL-Bibliothek einen Fehler aufweist.

Verwendung mit masscan

Dieses rdpscan-Werkzeug ist recht langsam – es scannt nur einige hundert Ziele pro Sekunde. Sie können stattdessen masscan verwenden, um die Dinge zu beschleunigen. Das masscan-Werkzeug ist etwa 1000-mal schneller, liefert aber nur begrenzte Informationen über das Ziel.

Die Schritte sind:

  • Scannen Sie zuerst die Adressbereiche mit masscan, um schnell Hosts zu finden, die auf Port 3389 (oder einem anderen von Ihnen verwendeten Port) antworten.
  • Füttern Sie dann die Ausgabe von masscan in rdpscan, sodass es nur noch Ziele scannen muss, die wir als aktiv kennen.

Die einfache Methode, dies auszuführen, ist, sie auf der Kommandozeile zu kombinieren:

root@kitploit:~
masscan 10.0.0.0/8 -p3389 | rdpscan --file -

Die Art und Weise, wie ich es mache, ist in zwei Schritten:

root@kitploit:~
masscan 10.0.0.0/8 -p3389 > ips.txt
rdpscan --file ips.txt --workers 10000 >results.txt

Bauen

Der schwierige Teil ist die Installation der OpenSSL-Bibliotheken, ohne dass sie mit anderen Versionen auf dem System in Konflikt geraten. Einige Beispiele für von mir getestete Linux-Versionen sind die folgenden, aber die Paketnamen ändern sich von einer Distribution zur nächsten. Außerdem gibt es viele Optionen für eine OpenSSL-kompatible API, wie BoringSSL und LibreSSL.

root@kitploit:~
$ sudo apt install libssl-dev
$ sudo yum install openssl-devel

Wenn Sie dieses Problem gelöst haben, kompilieren Sie einfach alle .c-Dateien zusammen wie folgt:

root@kitploit:~
$ gcc *.c -lssl -lcrypto -o rdpscan

Ich habe ein Makefile im Verzeichnis abgelegt, das dies erledigt, sodass Sie wahrscheinlich einfach

root@kitploit:~
$ make

ausführen können. Der Code ist in C geschrieben, benötigt also einen installierten C-Compiler, z. B. durch die folgende Aktion:

root@kitploit:~
$ sudo apt install build-essential

Häufige Build-Fehler

Dieser Abschnitt beschreibt die offensichtlicheren Build-Fehler.

root@kitploit:~
ssl.h:24:25: fatal error: openssl/rc4.h: No such file or directory

Dies bedeutet, dass Sie entweder die OpenSSL-Header nicht installiert haben oder sie sich nicht in einem Pfad befinden. Denken Sie daran: Selbst wenn Sie OpenSSL-Binärdateien installiert haben, bedeutet das nicht, dass Sie die Entwicklungspakete installiert haben. Sie benötigen sowohl die Header als auch die Bibliotheken.

Um diese Dinge unter Debian zu installieren, führen Sie Folgendes aus:

root@kitploit:~
$ sudo apt install libssl-dev

Um das Pfadproblem zu beheben, fügen Sie ein Compilierungs-Flag wie -I/usr/local/include oder ähnlich hinzu.

Ein Beispiel für ein Linker-Problem ist das folgende:

root@kitploit:~
Undefined symbols for architecture x86_64:
"_OPENSSL_init_ssl", referenced from:
    _tcp_tls_connect in tcp-fac73c.o
"_RSA_get0_key", referenced from:
    _rdssl_rkey_get_exp_mod in ssl-d5fdf5.o
"_SSL_CTX_set_options", referenced from:
    _tcp_tls_connect in tcp-fac73c.o
"_X509_get_X509_PUBKEY", referenced from:
    _rdssl_cert_to_rkey in ssl-d5fdf5.o

Dies erhalte ich unter macOS, weil es mehrere OpenSSL-Versionen gibt. Ich behebe dies, indem ich die Pfade fest kodiere:

root@kitploit:~
$ gcc *.c -lssl -lcrypto -I/usr/local/include -L/usr/local/lib -o rdpscan

Laut Kommentaren anderer könnte die folgende Befehlszeile unter macOS funktionieren, wenn Sie Homebrew zur Installation verwendet haben. Ich erhalte die obigen Linker-Fehler dennoch, weil ich andere OpenSSL-Komponenten installiert habe, die in Konflikt stehen.

root@kitploit:~
gcc $(brew --prefix)/opt/openssl/lib/libssl.a $(brew --prefix)/opt/openssl/lib/libcrypto.a -o rdpscan *.c

Ausführung

Der obige Abschnitt enthält Schnellstarttipps zum Ausführen des Programms. Dieser Abschnitt bietet detailliertere Hilfe.

Um ein einzelnes Ziel zu scannen, übergeben Sie einfach die Adresse des Ziels:

root@kitploit:~
./rdpscan 192.168.10.101

Sie können IPv6-Adressen und DNS-Namen übergeben. Sie können mehrere Ziele übergeben. Ein Beispiel wäre:

root@kitploit:~
./rdpscan 192.168.10.101 exchange.example.com 2001:0db8:85a3::1

Sie können auch Adressbereiche scannen, entweder mit Start-End-IPv4-Adressen oder mit IPv4-CIDR-Angabe. IPv6-Bereiche werden nicht unterstützt, da sie zu groß sind.

root@kitploit:~
./rdpscan 10.0.0.1-10.0.0.25 192.168.0.0/16

Standardmäßig werden nur 100 Ziele gleichzeitig gescannt. Sie können diese Anzahl mit dem Parameter --workers erhöhen. Allerdings erhalten Sie in der Praxis höchstens etwa 500 bis 1500 Worker, die gleichzeitig laufen, unabhängig davon, wie hoch Sie diesen Parameter einstellen.

root@kitploit:~
./rdpscan --workers 1000 10.0.0.0/24

Anstatt Ziele auf der Kommandozeile anzugeben, können Sie sie auch aus einer Datei laden, mithilfe des gut benannten Parameters --file:

root@kitploit:~
./rdpscan --file ips.txt

Das Format der Datei ist eine Adresse, ein Name oder ein Bereich pro Zeile. Es kann auch den von masscan erzeugten Text verarbeiten. Zusätzliche Leerzeichen werden entfernt, leere Zeilen ignoriert und Kommentarzeilen werden ignoriert. Ein Kommentar ist eine Zeile, die mit dem Zeichen # oder den Zeichen // beginnt.

Die Ausgabe wird nach stdout gesendet und gibt den Status VULNERABLE, SAFE oder UNKNOWN an. Es können zusätzliche Gründe für jeden Status vorliegen. Diese Gründe werden oben beschrieben.

root@kitploit:~
211.101.37.250 - SAFE - CredSSP/NLA required
185.11.124.79 - SAFE - not RDP - SSH response seen
125.121.137.42 - UNKNOWN - no connection - refused (RST)
40.117.191.215 - SAFE - CredSSP/NLA required
121.204.186.182 - SAFE - CredSSP/NLA required
99.8.11.148 - SAFE - CredSSP/NLA required
121.204.186.114 - SAFE - CredSSP/NLA required
49.50.145.236 - SAFE - CredSSP/NLA required
106.12.74.155 - VULNERABLE - got appid
222.84.253.26 - SAFE - CredSSP/NLA required
144.35.133.109 - UNKNOWN - RDP protocol error - receive timeout
199.212.226.196 - UNKNOWN - RDP protocol error - receive timeout
183.134.58.152 - UNKNOWN - no connection - refused (RST)
83.162.246.149 - VULNERABLE - got appid

Sie können dies mit weiteren Unix-Befehlen wie grep und cut verarbeiten. Um nur eine Liste der anfälligen Maschinen zu erhalten:

root@kitploit:~
./rdpscan 10.0.0.0/8 | grep 'VULN' | cut -f1 -d'-'

Der Parameter -dddd steht für Diagnoseinformationen, wobei mit jedem zusätzlichen d mehr Details ausgedruckt werden. Diese werden an stderr statt an stdout gesendet, sodass Sie die Streams trennen können. In bash geschieht dies wie folgt:

root@kitploit:~
./rdpscan --file myips.txt -ddd 2> diag.txt 1> results.txt

Diagnoseinformationen

Das Hinzufügen des Parameters -d gibt Diagnoseinformationen zu den Verbindungen auf stderr aus.

root@kitploit:~
./rdpscan 62.15.34.157 -d

[+] [62.15.34.157]:3389 - connecting...
[+] [62.15.34.157]:3389 - connected from [10.1.10.133]:49211
[+] [62.15.34.157]:3389 - SSL connection
[+] [62.15.34.157]:3389 - version = v4.8
[+] [62.15.34.157]:3389 - Sending MS_T120 check packet
[-] [62.15.34.157]:3389 - Max sends reached, waiting...
62.15.34.157    - SAFE - Target appears patched

Unter macOS/Linux können Sie stdout und stderr wie üblich getrennt in verschiedene Dateien umleiten:

root@kitploit:~
./rdpscan --file ips.txt 2> diag.txt 1> results.txt

SOCKS5 und Tor – für den Spaß

Es enthält SOCKS5-Unterstützung:

root@kitploit:~
./rdpscan --file ips.txt --socks5 localhost --socks5port 9050

Es verschlimmert Verbindungsprobleme, sodass Sie viel mehr "UNKNOWN"-Ergebnisse erhalten.

Statisches Linken von OpenSSL

Für die Veröffentlichung der Windows- und macOS-Binärdateien, die als Releases an dieses Projekt angehängt sind, linke ich OpenSSL statisch, sodass es nicht separat mitgeliefert werden muss und die Programme einfach funktionieren. Dieser Abschnitt enthält einige Hinweise zur Vorgehensweise, insbesondere da die Beschreibung auf der OpenSSL-eigenen Seite veraltet zu sein scheint.

Beide Schritte beginnen mit dem Herunterladen des OpenSSL-Quellcodes und dem Platzieren neben dem rdpscan-Verzeichnis:

root@kitploit:~
git clone https://github.com/openssl/openssl

Windows

Für Windows müssen Sie zuerst eine Perl-Version installieren. Ich verwende die von ActiveState.

Als nächstes benötigen Sie einen speziellen "Assembler". Ich verwende den empfohlenen NASM).

Dann benötigen Sie einen Compiler. Ich verwende VisualStudio 2010. Sie können stattdessen die neueste "Visual Studio Community Edition" (2019) von Microsoft herunterladen.

Jetzt müssen Sie das Makefile erstellen. Dazu gehen Sie in das OpenSSL-Verzeichnis und führen das Perl-Programm Configure aus:

root@kitploit:~
perl Configure VC-WIN32

Ich habe mich für 32-Bit unter Windows entschieden, weil es noch viele alte Windows-Systeme gibt und ich das Programm so kompatibel wie möglich mit alten Versionen halten möchte.

Ich möchte einen vollständig statischen Build, einschließlich der C-Laufzeit. Dazu habe ich das resultierende Makefile in einem Editor geöffnet und das C-Compilierungs-Flag von /MD (bedeutet DLLs verwenden) auf /MT geändert. Gleichzeitig habe ich zu den CPPFLAGS -D_WIN32_WINNT=0x501 hinzugefügt, was OpenSSL auf Funktionen beschränkt, die unter Windows XP und Server 2003 funktionieren. Andernfalls erhalten Sie die Fehlermeldung, dass bcrypt.dll nicht gefunden wurde, wenn Sie auf diesen älteren Systemen ausführen.

Jetzt müssen Sie sicherstellen, dass alles in Ihrem Pfad ist. Ich habe nasm.exe in ein Verzeichnis im PATH kopiert. Für Visual Studio 2010 habe ich das Programm vcvars32.bat ausgeführt, um die Pfadvariablen für den Compiler einzurichten.

An diesem Punkt habe ich auf der Kommandozeile eingegeben:

root@kitploit:~
nmake

Dies erstellt die Bibliotheken. Die statischen sind libssl_static.lib und libcrypto_static.lib, die ich zum Linken in rdpscan verwende.

macOS

Zuerst müssen Sie einen Compiler installieren. Ich verwende die Developer Tools von Apple, indem ich XCode und den Compiler installiere. Ich denke, Sie können stattdessen Homebrew verwenden, um gcc zu installieren.

Dann gehen Sie in das Quellverzeichnis von OpenSSL und erstellen ein Makefile:

root@kitploit:~
perl Configure darwin64-x86_64-cc

Jetzt einfach bauen:

root@kitploit:~
make depend
make

An diesem Punkt wurden sowohl dynamische (.dylib) als auch statische (.a) Bibliotheken erstellt. Ich habe die dynamischen Bibliotheken gelöscht, damit standardmäßig die statischen verwendet werden.

Jetzt in rdpscan einfach das macOS-Makefile bauen:

root@kitploit:~
make -f Makefile.macos

Dies kompiliert alle rdpscan-Quelldateien und linkt dann gegen die OpenSSL-Bibliotheken im Verzeichnis ../openssl, die Sie gerade erstellt haben.

Dies sollte eine ausführbare Datei von etwa 3 Megabyte erzeugen. Wenn Sie stattdessen nur eine 200-Kilobyte-Datei erhalten haben, haben Sie einen Fehler gemacht und gegen die dynamischen Bibliotheken gelinkt.

Tool herunterladen