Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
rdpscan — Uno scanner rapido per la vulnerabilità CVE-2019-0708 "BlueKeep". | Kitploit
Strumenti/GitHubGitHub/robertdavidgraham/rdpscan
Scanner di VulnerabilitàExploitSicurezza di Rete
GitHubrobertdavidgraham/rdpscan

rdpscan

Uno scanner rapido per la vulnerabilità CVE-2019-0708 "BlueKeep".

Vedi Repository
9212377 anni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Windows download macOS download Linux download Follow Build

rdpscan per la vulnerabilità CVE-2019-0708 bluekeep

Questo è uno scanner rapido e sporco per la vulnerabilità CVE-2019-0708 in Microsoft Remote Desktop. Al momento, circa 900.000 macchine su Internet pubblico sono vulnerabili a questa vulnerabilità, quindi molti si aspettano presto un worm come WannaCry e notPetya. Perciò, scansiona le tue reti e applica la patch (o almeno, abilita NLA) sui sistemi vulnerabili.

Questo è uno strumento a riga di comando. Puoi scaricare il sorgente e compilarlo da solo, oppure scaricare uno dei binari precompilati per Windows o macOS dal link sopra.

Questo strumento è basato interamente sulla patch di rdesktop da https://github.com/zerosum0x0/CVE-2019-0708. Ho semplicemente tagliato il codice per poter compilare facilmente su macOS e Windows, oltre ad aver aggiunto la possibilità di scansionare più target.

Stato

Questo è sperimentale e ha solo pochi giorni. Tuttavia, lo sto testando scansionando l'intero Internet (con l'aiuto di masscan), quindi sto risolvendo molti problemi abbastanza rapidamente. Puoi contattarmi su Twitter (@erratarob) per aiuto/commenti.

  • 2019-05-38 - Descrizioni dei risultati migliorate, oltre a documentazione su cosa significano (vedi sotto).
  • 2019-05-27 - Rilasciati binari per Windows e macOS (clicca sui badge sopra).
  • 2019-05-26 - Risolti problemi di rete su Windows
  • 2019-05-25 - Linux e macOS funzionano bene, Windows ha alcuni errori di rete
  • 2019-05-24 - Funziona su Linux e macOS, Windows ha alcuni bug di compilazione
  • 2019-05-23 - Attualmente in lavorazione su macOS con XCode

Utilizzo principale

Per scansionare una rete, esegui come segue:

root@kitploit:~
rdpscan 192.168.1.1-192.168.1.255

Questo produce uno di 3 risultati per ogni indirizzo:

  • SAFE - se il target è stato determinato come patchato o almeno richiede CredSSP/NLA
  • VULNERABLE - se il target è stato confermato vulnerabile
  • UNKNOWN - se il target non risponde o ha qualche fallimento di protocollo

Quando non c'è nulla a un indirizzo IP target, le versioni precedenti stampavano il messaggio "UNKNOWN - connection timed out". Quando si scansionano grandi reti, questo produce un sovraccarico di informazioni sui sistemi che non ti interessano. Pertanto, la nuova versione per impostazione predefinita non produce queste informazioni a meno che non si aggiunga -v (verbose) sulla riga di comando.

Puoi aumentare la velocità di scansione delle grandi reti incrementando il numero di worker:

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

Tuttavia, sul mio computer produce solo circa 1500 worker, a causa delle limitazioni di sistema, indipendentemente da quanto alto io configuri questo parametro.

Puoi aumentare ulteriormente la velocità usando questo in combinazione con masscan, descritto nella seconda sezione sotto.

Interpretazione dei risultati

Ci sono tre risposte generali:

  • SAFE - significa che il target è probabilmente patchato o altrimenti non vulnerabile al bug.
  • VULNERABLE: significa che abbiamo confermato che il target è vulnerabile a questo bug, e che quando il worm colpirà, probabilmente verrà infettato.
  • UNKNOWN: significa che non possiamo confermare in un senso o nell'altro, di solito perché il target non risponde o non sta eseguendo RDP, che è la stragrande maggioranza delle risposte. Inoltre, quando i target sono a corto di risorse o hanno problemi di rete, otterremo molti di questi. Infine, gli errori di protocollo sono responsabili di molti. Mentre le tre risposte principali sono SAFE, VULNERABLE e UNKNOWN, contengono testo aggiuntivo che spiega la diagnosi. Questa sezione descrive le varie stringhe che vedrai.

SAFE

Ci sono tre motivi principali per cui riteniamo che un target sia sicuro:

  • SAFE - Target appears patched Questo accade quando il target non risponde alla richiesta di attivazione. Significa che è un sistema Windows che è stato patchato, o un sistema che non era vulnerabile in partenza, come Windows 10 o Unix.
  • SAFE - CredSSP/NLA required Significa che il target richiede prima l'Autenticazione a Livello di Rete prima che la connessione RDP possa essere stabilita. Lo strumento non può superare questo punto, senza credenziali legittime, quindi non può determinare se il target è stato patchato. Tuttavia, gli hacker non possono proseguire oltre questo punto per sfruttare i sistemi vulnerabili, quindi probabilmente sei "sicuro". Ma quando appariranno exploit, utenti interni con username/password validi potranno sfruttare il sistema se non è patchato.
  • SAFE - not RDP Significa che il sistema non è RDP, ma ha qualche altro servizio che casualmente usa questa stessa porta e produce una risposta chiaramente non RDP. Esempi comuni sono HTTP e SSH. Nota però che invece di un protocollo identificabile, un server può rispondere con un pacchetto RST o FIN. Questi vengono identificati come UNKNOWN invece di SAFE.

VULNERABLE

Questo significa che abbiamo confermato che il sistema è vulnerabile al bug.

  • VULNERABLE - got appid C'è solo una risposta quando il sistema è vulnerabile, questa.

UNKNOWN

Ci sono un'infinità di varianti per UNKNOWN

  • UNKNOWN - no connection - timeout Questa è di gran lunga la risposta più comune, e accade quando l'indirizzo IP target non produce alcuna risposta. In effetti, è così comune che quando si scansionano grandi intervalli di indirizzi, di solito viene omessa. Devi aggiungere il flag -v (verbose) per abilitarla.
  • UNKNOWN - no connection - refused (RST) Questa è di gran lunga la seconda risposta più comune, e accade quando il target esiste e risponde al traffico di rete, ma non sta eseguendo RDP, quindi rifiuta la connessione con un pacchetto TCP RST.
  • UNKNOWN - RDP protocol error - receive timeout Questa è la terza risposta più comune, e accade quando abbiamo stabilito con successo una connessione RDP, ma poi il server smette di rispondere. Ciò è dovuto a errori di rete e quando il sistema target è sovraccarico per qualche motivo. Potrebbero anche essere errori di rete dalla nostra parte, ad esempio se sei dietro un NAT e lo sovraccarichi con troppe connessioni.
  • UNKNOWN - no connection - connection closed Significa che abbiamo stabilito una connessione (TCP SYN-ACK), ma poi la connessione viene immediatamente chiusa (con RST o FIN). Ci sono molte ragioni per cui ciò accade, che non possiamo distinguere:
    • Sta eseguendo RDP, ma per qualche motivo chiude la connessione, possibilmente perché è a corto di risorse.
    • Non è RDP e non gradisce la richiesta RDP che gli inviamo, quindi invece di inviarci un bel messaggio di errore (che avrebbe attivato SAFE - not RDP), chiude bruscamente la connessione.
    • Qualche dispositivo intermedio, come un IPS, firewall o NAT, ha chiuso la connessione perché l'ha identificata come ostile, oppure ha esaurito le risorse.
    • Qualche altra ragione che non ho identificato, ci sono molte cose strane che accadono quando scansiono Internet.
  • UNKNOWN - no connection - host unreachable (ICMP error) La rete remota segnala che l'host non può essere raggiunto o non è in esecuzione. Riprova più tardi se pensi che quell'host dovrebbe essere attivo.
  • UNKNOWN - no connection - network unreachable (ICMP error) C'è un errore di rete (transitorio) dall'altra parte, riprova più tardi se credi che quella rete dovrebbe essere funzionante.
  • UNKNOWN - RDP protocol error Significa che si è verificato un danneggiamento nel protocollo RDP, sia perché la parte remota lo implementa male (non un sistema Windows), perché gestisce male un errore di rete transitorio, o per qualcos'altro.
  • UNKNOWN - SSL protocol error Da Windows Vista in poi, RDP utilizza il protocollo STARTTLS per funzionare su SSL. Questo strato ha i suoi problemi come sopra, che includono la gestione errata degli errori di rete sottostanti, o il tentativo di comunicare con sistemi che hanno una sorta di incompatibilità. Se ottieni un messaggio di errore molto lungo qui (come SSL3_GET_RECORD:wrong version), è perché l'altra parte ha un bug in SSL, o la tua stessa libreria SSL che stai usando ha un bug.

Utilizzo con masscan

Questo strumento rdpscan è piuttosto lento, scansiona solo poche centinaia di target al secondo. Puoi invece usare masscan per velocizzare le cose. Lo strumento masscan è circa 1000 volte più veloce, ma fornisce solo informazioni limitate sul target.

I passaggi sono:

  • Prima scansione gli intervalli di indirizzi con masscan per trovare rapidamente host che rispondono sulla porta 3389 (o qualunque porta tu usi).
  • Poi alimenta l'output di masscan in rdpscan, in modo che debba scansionare solo target che sappiamo essere attivi.

Il modo semplice per eseguire questo è combinarli sulla riga di comando:

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

Il modo in cui lo faccio io è in due passaggi:

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

Compilazione

La parte difficile è ottenere le librerie OpenSSL installate e non in conflitto con altre versioni sul sistema. Alcuni esempi per versioni di Linux su cui ho testato sono i seguenti, ma i nomi dei pacchetti cambiano continuamente da una distribuzione all'altra. Inoltre, ci sono molte opzioni per un'API compatibile con OpenSSL, come BoringSSL e LibreSSL.

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

Una volta risolto quel problema, puoi compilare tutti i file .c insieme così:

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

Ho messo un Makefile nella directory che fa questo, quindi probabilmente puoi fare semplicemente:

root@kitploit:~
$ make

Il codice è scritto in C, quindi necessita di un compilatore C installato, ad esempio eseguendo:

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

Errori di compilazione comuni

Questa sezione descrive gli errori di compilazione più ovvi.

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

Questo significa che non hai gli header di OpenSSL installati, oppure non sono in un percorso da qualche parte. Ricorda che anche se hai i binari di OpenSSL installati, questo non significa che hai installato i file di sviluppo. Hai bisogno sia degli header che delle librerie installati.

Per installare queste cose su Debian, fai:

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

Per risolvere il problema del percorso, aggiungi un flag di compilazione -I/usr/local/include, o qualcosa di simile.

Un esempio di problema di linking è il seguente:

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

Ottengo questo su macOS perché ci sono più versioni di OpenSSL. Lo risolvo codificando duramente i percorsi:

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

Secondo i commenti di altri, la seguente riga di comando potrebbe funzionare su macOS se hai usato Homebrew per installare le cose. Tuttavia, ricevo ancora gli errori di linking sopra, perché ho installato altri componenti OpenSSL in conflitto.

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

Esecuzione

La sezione sopra fornisce suggerimenti rapidi per eseguire il programma. Questa sezione fornisce un aiuto più approfondito.

Per scansionare un singolo target, passa semplicemente l'indirizzo del target:

root@kitploit:~
./rdpscan 192.168.10.101

Puoi passare indirizzi IPv6 e nomi DNS. Puoi passare più target. Un esempio potrebbe essere:

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

Puoi anche scansionare intervalli di indirizzi, usando indirizzi IPv4 inizio-fine, o specifica CIDR IPv4. Gli intervalli IPv6 non sono supportati perché sono troppo grandi.

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

Per impostazione predefinita, scansiona solo 100 target alla volta. Puoi aumentare questo numero con il parametro --workers. Tuttavia, non importa quanto alto imposti questo parametro, in pratica otterrai un massimo di circa 500 a 1500 worker in esecuzione contemporaneamente, a seconda del sistema.

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

Invece di specificare i target sulla riga di comando, puoi caricarli da un file usando l'appropriato parametro --file:

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

Il formato del file è un indirizzo, nome o intervallo per riga. Può anche consumare il testo generato da masscan. Gli spazi bianchi extra vengono rimossi, le righe vuote ignorate e le righe di commento ignorate. Un commento è una riga che inizia con il carattere # o i caratteri //.

L'output viene inviato su stdout fornendo lo stato di VULNERABLE, SAFE, o UNKNOWN. Potrebbero esserci ragioni aggiuntive per ciascuno. Queste ragioni sono descritte sopra.

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

Puoi elaborare questo con ulteriori comandi unix come grep e cut. Per ottenere un elenco solo delle macchine vulnerabili:

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

Il parametro -dddd significa informazioni diagnostiche, dove più d aggiungi, più dettagli vengono stampati. Questo viene inviato su stderr invece che su stdout in modo che tu possa separare i flussi. Usando bash si fa così:

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

Informazioni diagnostiche

Aggiungendo il parametro -d vengono stampate informazioni diagnostiche sulle connessioni su stderr.

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

Su macOS/Linux, puoi reindirizzare stdout e stderr separatamente in file diversi nel modo usuale:

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

SOCKS5 e Tor per divertimento

Include anche il supporto SOCKS5:

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

Peggiora i problemi di connessione, quindi ottieni molti più risultati "UNKNOWN".

Collegamento statico di OpenSSL

Per rilasciare i binari per Windows e macOS allegati come release a questo progetto, ho collegato staticamente OpenSSL, in modo che non debba essere incluso separatamente, e i programmi funzionino e basta. Questa sezione descrive alcune note su come fare ciò, specialmente poiché la descrizione sulla stessa pagina di OpenSSL sembra essere obsoleta.

Entrambi questi passaggi iniziano scaricando il sorgente di OpenSSL e mettendolo accanto alla directory rdpscan:

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

Windows

Per Windows, devi prima installare una qualche versione di Perl. Io uso quella di ActiveState.

Successivamente, ti servirà un "assembler" speciale. Io uso quello raccomandato chiamato NASM).

Poi ti servirà un compilatore. Io uso VisualStudio 2010. Puoi scaricare l'ultima "Visual Studio Community Edition" (che è la 2019) invece da Microsoft.

Ora devi costruire il makefile. Questo si fa andando nella directory di OpenSSL ed eseguendo il programma Perl Configure:

root@kitploit:~
perl Configure VC-WIN32

Ho scelto 32-bit per Windows perché c'è molto vecchio Windows in giro, e voglio rendere il programma il più compatibile possibile con versioni vecchie.

Voglio una build completamente statica, incluso il runtime C. Per fare ciò, ho aperto il makefile risultante in un editor e ho cambiato il flag di compilazione C da /MD (che significa usa DLL) a /MT. Mentre ero lì, ho aggiunto quanto segue ai CPPFLAGS -D_WIN32_WINNT=0x501, che limita OpenSSL a funzionalità che funzionano su Windows XP e Server 2003. Altrimenti, ottieni errori che bcrypt.dll non è stata trovata se esegui su quei sistemi più vecchi.

Ora devi assicurarti che tutto sia nel tuo PATH. Ho copiato nasm.exe in una directory nel PATH. Per Visual Studio 2010, ho eseguito il programma vcvars32.bat per impostare le variabili d'ambiente per il compilatore.

A questo punto, sulla riga di comando, ho digitato:

root@kitploit:~
nmake

Questo crea le librerie. Quelle statiche sono libssl_static.lib e libcrypto_static.lib, che uso per collegare in rdpscan.

macOS

Prima di tutto, devi installare un compilatore. Io uso gli Strumenti per Sviluppatori di Apple, installando XCode e il compilatore. Penso che tu possa usare Homebrew per installare gcc invece.

Poi vai nella directory del sorgente di OpenSSL e crea un makefile:

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

Ora semplicemente crealo:

root@kitploit:~
make depend
make

A questo punto, ha creato sia librerie dinamiche (.dylib) che statiche (.lib). Io ho eliminato le librerie dinamiche in modo che prenda quelle statiche per impostazione predefinita.

Ora in rdpscan, costruisci semplicemente il makefile per macOS:

root@kitploit:~
make -f Makefile.macos

Questo compilerà tutti i file sorgente di rdpscan, poi linkerà con le librerie OpenSSL nella directory ../openssl che hai appena costruito.

Questo dovrebbe produrre un eseguibile di 3 megabyte. Se invece ottieni solo un eseguibile di 200 kilobyte, allora hai commesso un errore e hai linkato alle librerie dinamiche.

Scarica lo strumento