Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
rdpscan — Un escáner rápido para la vulnerabilidad CVE-2019-0708 "BlueKeep". | Kitploit
Herramientas/GitHubGitHub/robertdavidgraham/rdpscan
Escáneres de VulnerabilidadesExplotaciónSeguridad de Redes
GitHubrobertdavidgraham/rdpscan

rdpscan

Un escáner rápido para la vulnerabilidad CVE-2019-0708 "BlueKeep".

Ver Repositorio
921237hace 7 añosRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Windows download macOS download Linux download Seguir Build

rdpscan para la vulnerabilidad CVE-2019-0708 (bluekeep)

Este es un escáner rápido y sencillo para la vulnerabilidad CVE-2019-0708 en Escritorio Remoto de Microsoft. En este momento, hay alrededor de 900.000 máquinas en Internet público vulnerables a esta vulnerabilidad, por lo que muchos esperan un gusano pronto como WannaCry y notPetya. Por lo tanto, escanea tus redes y parchea (o al menos, habilita NLA) en los sistemas vulnerables.

Esta es una herramienta de línea de comandos. Puedes descargar el código fuente y compilarlo tú mismo, o descargar uno de los binarios precompilados para Windows o macOS desde el enlace de arriba.

Esta herramienta se basa completamente en el parche de rdesktop de https://github.com/zerosum0x0/CVE-2019-0708. Simplemente he recortado el código para poder compilarlo fácilmente en macOS y Windows, además de añadir la capacidad de escanear múltiples objetivos.

Estado

Esto tiene solo unos días y es experimental. Sin embargo, lo estoy probando escaneando todo el Internet (con la ayuda de masscan), por lo que estoy resolviendo muchos problemas bastante rápido. Puedes intentar contactarme en Twitter (@erratarob) para ayuda/comentarios.

  • 2019-05-38 - Mejores descripciones de los resultados de salida, así como documentación de lo que significan (ver más abajo).
  • 2019-05-27 - Binarios para Windows y macOS publicados (haz clic en las insignias de arriba).
  • 2019-05-26 - Corrigiendo problemas de red en Windows
  • 2019-05-25 - Linux y macOS funcionan bien, Windows tiene algunos errores de red
  • 2019-05-24 - Funciona en Linux y macOS, Windows tiene algunos errores de compilación
  • 2019-05-23 - Actualmente trabajando en macOS dentro de XCode

Uso principal

Para escanear una red, ejecútalo de la siguiente manera:

root@kitploit:~
rdpscan 192.168.1.1-192.168.1.255

Esto produce uno de 3 resultados para cada dirección:

  • SAFE (SEGURO) - si el objetivo ha sido determinado como parcheado o al menos requiere CredSSP/NLA
  • VULNERABLE (VULNERABLE) - si se ha confirmado que el objetivo es vulnerable
  • UNKNOWN (DESCONOCIDO) - si el objetivo no responde o tiene algún fallo de protocolo

Cuando no hay nada en una dirección IP objetivo, las versiones antiguas imprimían el mensaje "UNKNOWN - connection timed out". Al escanear redes grandes, esto produce una sobrecarga de demasiada información sobre sistemas que no te importan. Por lo tanto, la nueva versión por defecto no produce esta información a menos que añadas -v (verbose) en la línea de comandos.

Puedes aumentar la velocidad de escaneo de redes grandes incrementando el número de workers:

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

Sin embargo, en mi computadora, solo produce alrededor de 1500 workers, debido a las limitaciones del sistema, sin importar qué tan alto configure este parámetro.

Puedes aumentar la velocidad aún más usando esto junto con masscan, descrito en la segunda sección a continuación.

Interpretación de los resultados

Hay tres respuestas generales:

  • SAFE (SEGURO) - significa que el objetivo probablemente está parcheado o de otro modo no es vulnerable al error.
  • VULNERABLE (VULNERABLE): significa que hemos confirmado que el objetivo es vulnerable a este error, y que cuando llegue el gusano, probablemente se infectará.
  • UNKNOWN (DESCONOCIDO): significa que no podemos confirmar de ninguna manera, generalmente porque el objetivo no responde o no está ejecutando RDP, que es la gran mayoría de las respuestas. Además, cuando los objetivos están sin recursos o experimentando problemas de red, obtendremos muchas de estas. Finalmente, los errores de protocolo son responsables de muchas. Mientras que las tres respuestas principales son SAFE, VULNERABLE y UNKNOWN, contienen texto adicional que explica el diagnóstico. Esta sección describe las diversas cadenas que verás.

SAFE (SEGURO)

Hay tres razones principales por las que creemos que un objetivo es seguro:

  • SAFE - Target appears patched (SEGURO - El objetivo parece parcheado) Esto sucede cuando el objetivo no responde a la solicitud desencadenante. Esto significa que es un sistema Windows que ha sido parcheado, o un sistema que no era vulnerable para empezar, como Windows 10 o Unix.
  • SAFE - CredSSP/NLA required (SEGURO - Se requiere CredSSP/NLA) Esto significa que el objetivo primero requiere Autenticación a Nivel de Red antes de que se pueda establecer la conexión RDP. La herramienta no puede pasar este punto, sin credenciales legítimas, por lo que no puede determinar si el objetivo ha sido parcheado. Sin embargo, los hackers tampoco pueden continuar más allá de este punto para explotar sistemas vulnerables, por lo que probablemente estás "seguro". Pero cuando aparezcan exploits, los internos con nombres de usuario/contraseñas válidos podrán explotar el sistema si no está parcheado.
  • SAFE - not RDP (SEGURO - no es RDP) Esto significa que el sistema no es RDP, sino que tiene algún otro servicio que utiliza este mismo puerto y produce una respuesta que claramente no es RDP. Ejemplos comunes son HTTP y SSH. Ten en cuenta que, en lugar de un protocolo identificable, un servidor puede responder con un paquete RST o FIN. Estos se identifican como UNKNOWN en lugar de SAFE.

VULNERABLE (VULNERABLE)

Esto significa que hemos confirmado que el sistema es vulnerable al error.

  • VULNERABLE - got appid (VULNERABLE - appid obtenido) Solo hay una respuesta cuando el sistema es vulnerable, esta.

UNKNOWN (DESCONOCIDO)

Hay muchísimas variaciones para desconocido

  • UNKNOWN - no connection - timeout (DESCONOCIDO - sin conexión - tiempo de espera agotado) Esta es con diferencia la respuesta más común, y ocurre cuando la dirección IP del objetivo no hace ninguna respuesta. De hecho, es tan común que al escanear grandes rangos de direcciones, normalmente se omite. Tienes que añadir la bandera -v (verbose) para habilitarlo.
  • UNKNOWN - no connection - refused (RST) (DESCONOCIDO - sin conexión - rechazado (RST)) Esta es con diferencia la segunda respuesta más común, y ocurre cuando el objetivo existe y responde al tráfico de red, pero no está ejecutando RDP, por lo que rechaza la conexión con un paquete TCP RST.
  • UNKNOWN - RDP protocol error - receive timeout (DESCONOCIDO - error de protocolo RDP - tiempo de espera de recepción) Esta es la tercera respuesta más común, y ocurre cuando hemos establecido exitosamente una conexión RDP, pero luego el servidor deja de responder a nosotros. Esto se debe a errores de red y cuando el sistema objetivo está sobrecargado por alguna razón. También podrían ser errores de red en este extremo, como cuando estás detrás de un NAT y lo sobrecargas con demasiadas conexiones.
  • UNKNOWN - no connection - connection closed (DESCONOCIDO - sin conexión - conexión cerrada) Esto significa que hemos establecido una conexión (TCP SYN-ACK), pero luego la conexión se cierra inmediatamente (con un RST o FIN). Hay muchas razones por las que esto sucede, que no podemos distinguir:
    • Está ejecutando RDP, pero por alguna razón cierra la conexión, posiblemente porque está sin recursos.
    • No es RDP, y no le gusta la solicitud RDP que le enviamos, por lo que en lugar de enviarnos un mensaje de error amigable (que provocaría SAFE - not RDP), cierra abruptamente la conexión.
    • Algún dispositivo intermediario, como un IPS, firewall o NAT, cerró la conexión porque identificó esto como hostil, o se quedó sin recursos.
    • Alguna otra razón que no he identificado, hay muchas cosas extrañas que suceden cuando escaneo Internet.
  • UNKNOWN - no connection - host unreachable (ICMP error) (DESCONOCIDO - sin conexión - host inalcanzable (error ICMP)) La red remota informa que el host no puede ser alcanzado o no está funcionando. Inténtalo de nuevo más tarde si crees que ese host debería estar activo.
  • UNKNOWN - no connection - network unreachable (ICMP error) (DESCONOCIDO - sin conexión - red inalcanzable (error ICMP)) Hay un error de red (transitorio) en el otro extremo, inténtalo de nuevo más tarde si crees que esa red debería estar funcionando.
  • UNKNOWN - RDP protocol error (DESCONOCIDO - error de protocolo RDP) Esto significa que ocurrió alguna corrupción en el protocolo RDP, ya sea porque el lado remoto lo implementa incorrectamente (no es un sistema Windows), porque está manejando mal un error de red transitorio, o por alguna otra cosa.

Uso con masscan

Esta herramienta rdpscan es bastante lenta, escaneando solo unos pocos cientos de objetivos por segundo. Puedes usar masscan para acelerar las cosas. La herramienta masscan es aproximadamente 1000 veces más rápida, pero solo da información limitada sobre el objetivo.

Los pasos son:

  • Primero escanea los rangos de direcciones con masscan para encontrar rápidamente hosts que respondan en el puerto 3389 (o el puerto que uses).
  • Segundo, alimenta la salida de masscan en rdpscan, para que solo tenga que escanear los objetivos que sabemos que están activos.

La forma sencilla de ejecutar esto es simplemente combinarlos en la línea de comandos:

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

La forma en que lo hago es en dos pasos:

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

Compilación

La parte difícil es instalar las bibliotecas OpenSSL, y que no entren en conflicto con otras versiones en el sistema. Algunos ejemplos para versiones de Linux en las que he probado son los siguientes, pero los nombres de los paquetes cambian constantemente de una distribución a otra. Además, hay muchas opciones para una API compatible con OpenSSL, como BoringSSL y LibreSSL.

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

Una vez que hayas resuelto ese problema, simplemente compila todos los archivos .c juntos así:

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

He puesto un Makefile en el directorio que hace esto, por lo que probablemente puedas hacer simplemente:

root@kitploit:~
$ make

El código está escrito en C, por lo que necesita un compilador de C instalado, como por ejemplo haciendo lo siguiente:

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

Errores comunes de compilación

Esta sección describe los errores de compilación más obvios.

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

Esto significa que no tienes los encabezados de OpenSSL instalados, o no están en alguna ruta. Recuerda que incluso si tienes los binarios de OpenSSL instalados, esto no significa que tengas instalado el material de desarrollo. Necesitas tanto los encabezados como las bibliotecas instalados.

Para instalar estas cosas en Debian, haz:

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

Para solucionar el problema de la ruta, añade una bandera de compilación -I/usr/local/include, o algo similar.

Un ejemplo de problema del enlazador es el siguiente:

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

Obtengo esto en macOS porque hay múltiples versiones de OpenSSL. Lo soluciono codificando las rutas:

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

Según comentarios de otros, la siguiente línea de comandos podría funcionar en macOS si has usado Homebrew para instalar cosas. Sin embargo, todavía obtengo los errores de enlace anteriores, porque he instalado otros componentes de OpenSSL que están en conflicto.

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

Ejecución

La sección anterior da consejos de inicio rápido para ejecutar el programa. Esta sección da ayuda más detallada.

Para escanear un solo objetivo, simplemente pasa la dirección del objetivo:

root@kitploit:~
./rdpscan 192.168.10.101

Puedes pasar direcciones IPv6 y nombres DNS. Puedes pasar múltiples objetivos. Un ejemplo de esto sería:

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

También puedes escanear rangos de direcciones, usando direcciones IPv4 inicio-fin, o especificación CIDR IPv4. Los rangos IPv6 no son compatibles porque son demasiado grandes.

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

Por defecto, escanea solo 100 objetivos a la vez. Puedes aumentar este número con el parámetro --workers. Sin embargo, no importa cuán alto configures este parámetro, en la práctica obtendrás un máximo de alrededor de 500 a 1500 workers ejecutándose a la vez, dependiendo de tu sistema.

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

En lugar de especificar objetivos en la línea de comandos, puedes cargarlos desde un archivo, usando el parámetro --file bien nombrado:

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

El formato del archivo es una dirección, nombre o rango por línea. También puede consumir el texto generado por masscan. Los espacios en blanco adicionales se recortan, las líneas en blanco se ignoran y cualquier línea de comentario se ignora. Un comentario es una línea que comienza con el carácter #, o los caracteres //.

La salida se envía a stdout dando el estado de VULNERABLE, SAFE, o UNKNOWN. Podría haber razones adicionales para cada uno. Estas razones se describen arriba.

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

Puedes procesar esto con comandos unix adicionales como grep y cut. Para obtener una lista solo de máquinas vulnerables:

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

El parámetro -dddd significa información de diagnóstico, donde cuantas más ds añadas, más detalles se imprimen. Esto se envía a stderr en lugar de stdout para que puedas separar los flujos. Usando bash esto se hace así:

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

Información de diagnóstico

Añadir el parámetro -d vuelca información de diagnóstico sobre las conexiones a 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

En macOS/Linux, puedes redirigir stdout y stderr por separado a diferentes archivos de la manera habitual:

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

SOCKS5 y Tor por diversión

Incluye soporte SOCKS5:

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

Empeora los problemas de conexión, por lo que obtienes muchos más resultados "UNKNOWN".

Enlazar estáticamente OpenSSL

Para publicar los binarios de Windows y macOS adjuntos como lanzamientos a este proyecto, enlazo estáticamente OpenSSL, para que no necesite ser incluido por separado y los programas simplemente funcionen. Esta sección describe algunas notas sobre cómo hacer esto, especialmente dado que la descripción en la propia página de OpenSSL parece estar desactualizada.

Ambos pasos comienzan descargando el código fuente de OpenSSL y colocándolo junto al directorio de rdpscan:

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

Windows

Para Windows, primero necesitas instalar alguna versión de Perl. Yo uso el de ActiveState.

A continuación, necesitarás un "ensamblador" especial. Uso el recomendado llamado NASM.

A continuación, necesitarás un compilador. Yo uso VisualStudio 2010. Puedes descargar la última "Visual Studio Community Edition" (que es 2019) en su lugar desde Microsoft.

Ahora necesitas construir el makefile. Esto se hace yendo al directorio de OpenSSL y ejecutando el programa Perl Configure:

root@kitploit:~
perl Configure VC-WIN32

Elegí 32 bits para Windows porque hay muchos Windows antiguos por ahí, y quiero que el programa sea lo más compatible posible con versiones antiguas.

Quiero una construcción completamente estática, incluyendo el runtime de C. Para hacer eso, abrí el makefile resultante en un editor y cambié la bandera de compilación de C de /MD (que significa usar DLLs) a /MT. Mientras estaba allí, añadí lo siguiente a CPPFLAGS -D_WIN32_WINNT=0x501, que restringe OpenSSL a características que funcionan en Windows XP y Server 2003. De lo contrario, obtienes errores de que bcrypt.dll no se encontró si ejecutas en esos sistemas más antiguos.

Ahora necesitarás asegurarte de que todo esté en tu PATH. Copié nasm.exe a un directorio en el PATH. Para Visual Studio 2010, ejecuté el programa vcvars32.bat para configurar las variables de ruta para el compilador.

En este punto, en la línea de comandos, escribí:

root@kitploit:~
nmake

Esto crea las bibliotecas. Las estáticas son libssl_static.lib y libcrypto_static.lib, que uso para enlazar en rdpscan.

macOS

Primero, necesitas instalar un compilador. Yo uso las Herramientas de Desarrollador de Apple, instalando XCode y el compilador. Creo que puedes usar Homebrew para instalar gcc en su lugar.

Luego ve al directorio de código fuente de OpenSSL y crea un makefile:

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

Ahora simplemente hazlo:

root@kitploit:~
make depend
make

En este punto, ha creado bibliotecas tanto dinámicas (.dylib) como estáticas (.lib). Eliminé las bibliotecas dinámicas para que tome las estáticas por defecto.

Ahora en rdpscan, simplemente construye el makefile de macOS:

root@kitploit:~
make -f Makefile.macos

Esto compilará todos los archivos fuente de rdpscan, y luego enlazará con las bibliotecas OpenSSL en el directorio ../openssl que acabas de construir.

Esto debería producir un ejecutable de 3 megabytes. Si en su lugar solo obtuviste un ejecutable de 200 kilobytes, entonces cometiste un error y enlazaste con las bibliotecas dinámicas.

Descargar herramienta
  • UNKNOWN - SSL protocol error (DESCONOCIDO - error de protocolo SSL) Desde Windows Vista, RDP usa el protocolo STARTTLS para ejecutarse sobre SSL. Esta capa tiene sus propios problemas como los anteriores, que incluyen manejar mal los errores de red subyacentes, o intentar comunicarse con sistemas que tienen algún tipo de incompatibilidad. Si obtienes un mensaje de error muy largo aquí (como SSL3_GET_RECORD:wrong version), es porque el otro lado tiene un error en SSL, o tu propia biblioteca SSL que estás usando tiene un error.