Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
rdpscan — Um scanner rápido para a vulnerabilidade CVE-2019-0708 "BlueKeep". | Kitploit
Ferramentas/GitHubGitHub/robertdavidgraham/rdpscan
Scanners de VulnerabilidadesExploraçãoSegurança de Rede
GitHubrobertdavidgraham/rdpscan

rdpscan

Um scanner rápido para a vulnerabilidade CVE-2019-0708 "BlueKeep".

Ver Repositório
921237há 7 anosRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Windows download macOS download Linux download Follow Build

rdpscan para a vulnerabilidade BlueKeep CVE-2019-0708

Este é um scanner rápido e sujo para a vulnerabilidade CVE-2019-0708 no Remote Desktop da Microsoft. Neste momento, existem cerca de 900.000 máquinas na Internet pública vulneráveis a esta vulnerabilidade, portanto, é de se esperar que em breve surja um worm como WannaCry e notPetya. Portanto, escaneie suas redes e aplique patches (ou pelo menos, ative a NLA) nos sistemas vulneráveis.

Esta é uma ferramenta de linha de comando. Você pode baixar o código-fonte e compilá-lo você mesmo, ou pode baixar um dos binários pré-compilados para Windows ou macOS a partir do link acima.

Esta ferramenta é totalmente baseada no patch rdesktop de https://github.com/zerosum0x0/CVE-2019-0708. Eu simplesmente reduzi o código para poder compilar facilmente no macOS e no Windows, além de adicionar a capacidade de escanear vários alvos.

Status

Isso tem apenas alguns dias e é experimental. No entanto, estou testando-o escaneando toda a Internet (com a ajuda do masscan, então estou resolvendo muitos problemas rapidamente. Você pode entrar em contato comigo no Twitter (@erratarob) para ajuda/comentários.

  • 2019-05-38 - Melhores descrições de resultados, bem como documentação sobre o que significam (veja abaixo).
  • 2019-05-27 - Binários para Windows e macOS lançados (clique nos badges acima).
  • 2019-05-26 - Corrigindo problemas de rede no Windows
  • 2019-05-25 - Linux e macOS funcionando bem, Windows tem alguns erros de rede
  • 2019-05-24 - Funciona no Linux e macOS, Windows tem alguns bugs de compilação
  • 2019-05-23 - Atualmente trabalhando no macOS dentro do XCode

Uso principal

Para escanear uma rede, execute-o da seguinte forma:

root@kitploit:~
rdpscan 192.168.1.1-192.168.1.255

Isso produz um dos 3 resultados para cada endereço:

  • SEGURO (SAFE) - se o alvo foi determinado como corrigido (patched) ou pelo menos requer CredSSP/NLA
  • VULNERÁVEL (VULNERABLE) - se o alvo foi confirmado como vulnerável
  • DESCONHECIDO (UNKNOWN) - se o alvo não responde ou tem alguma falha de protocolo

Quando não existe nada em um endereço IP de destino, as versões antigas exibiam a mensagem "DESCONHECIDO - conexão expirou". Ao escanear redes grandes, isso produz uma sobrecarga de informações demais sobre sistemas pelos quais você não se importa. Portanto, a nova versão, por padrão, não produz essa informação a menos que você adicione -v (para verbose) na linha de comando.

Você pode aumentar a velocidade com que escaneia redes grandes aumentando o número de workers:

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

No entanto, no meu computador, ele só produz cerca de 1500 workers, devido a limitações do sistema, independentemente de quão alto eu configure este parâmetro.

Você pode aumentar ainda mais a velocidade usando isso em conjunto com o masscan, conforme descrito na seção abaixo.

Interpretando os resultados

Existem três respostas gerais:

  • SEGURO (SAFE) - significa que o alvo provavelmente está corrigido ou de outra forma não vulnerável ao bug.
  • VULNERÁVEL (VULNERABLE): significa que confirmamos que o alvo está vulnerável a este bug, e que quando o worm chegar, provavelmente será infectado.
  • DESCONHECIDO (UNKNOWN): significa que não podemos confirmar de nenhuma forma, geralmente porque o alvo não responde ou não está executando RDP, que é a grande maioria das respostas. Além disso, quando os alvos estão sem recursos ou com problemas de rede, obteremos muitas dessas. Finalmente, erros de protocolo são responsáveis por muitas. Embora as três respostas principais sejam SEGURO, VULNERÁVEL e DESCONHECIDO, elas contêm texto adicional explicando o diagnóstico. Esta seção descreve as várias strings que você verá.

SEGURO (SAFE)

Existem três principais razões pelas quais acreditamos que um alvo é seguro:

  • SEGURO - Alvo parece corrigido Isso acontece quando o alvo não responde à solicitação de gatilho. Isso significa que é um sistema Windows que foi corrigido, ou um sistema que não era vulnerável desde o início, como Windows 10 ou Unix.
  • SEGURO - CredSSP/NLA exigido Isso significa que o alvo primeiro requer Autenticação de Nível de Rede (Network Level Authentication) antes que a conexão RDP possa ser estabelecida. A ferramenta não pode passar deste ponto, sem credenciais legítimas, portanto não pode determinar se o alvo foi corrigido. No entanto, os hackers também não podem continuar além deste ponto para explorar sistemas vulneráveis, então você provavelmente está "seguro". Contudo, quando exploits surgirem, insiders com nomes de usuário/senhas válidos poderão explorar o sistema se ele não estiver corrigido.
  • SEGURO - não é RDP Isso significa que o sistema não é RDP, mas tem algum outro serviço que por acaso usa esta mesma porta e produz uma resposta que claramente não é RDP. Exemplos comuns são HTTP e SSH. Observe que, em vez de um protocolo identificável, um servidor pode responder com um pacote RST ou FIN. Estes são identificados como DESCONHECIDO em vez de SEGURO/

VULNERÁVEL (VULNERABLE)

Isso significa que confirmamos que o sistema está vulnerável ao bug.

  • VULNERÁVEL - obteve appid Há apenas uma resposta quando o sistema está vulnerável, esta.

DESCONHECIDO (UNKNOWN)

Há uma infinidade de variações para desconhecido

  • DESCONHECIDO - sem conexão - tempo esgotado Esta é de longe a resposta mais comum e acontece quando o endereço IP alvo não faz nenhuma resposta. Na verdade, é tão comum que ao escanear grandes faixas de endereços, geralmente é omitida. Você precisa adicionar a flag -v (verbose) para habilitá-la.
  • DESCONHECIDO - sem conexão - recusada (RST) Esta é de longe a segunda resposta mais comum e acontece quando o alvo existe e responde ao tráfego de rede, mas não está executando RDP, então recusa a conexão com um pacote TCP RST.
  • DESCONHECIDO - erro de protocolo RDP - tempo de recebimento esgotado Esta é a terceira resposta mais comum e acontece quando estabelecemos com sucesso uma conexão RDP, mas então o servidor para de responder a nós. Isso se deve a erros de rede e quando o sistema alvo está sobrecarregado por algum motivo. Também pode ser erro de rede nesta extremidade, como quando você está atrás de um NAT e o sobrecarrega com muitas conexões.
  • DESCONHECIDO - sem conexão - conexão fechada Isso significa que estabelecemos uma conexão (TCP SYN-ACK), mas então a conexão é imediatamente fechada (com um RST ou FIN). Existem muitas razões para isso acontecer, que não podemos distinguir:
    • Está executando RDP, mas por algum motivo fecha a conexão, possivelmente por estar sem recursos.
    • Não é RDP e não gosta da solicitação RDP que enviamos, então, em vez de nos enviar uma mensagem de erro adequada (o que acionaria SEGURO - não é RDP), ele fecha abruptamente a conexão.
    • Algum dispositivo intermediário, como IPS, firewall ou NAT, fechou a conexão porque a identificou como hostil, ou ficou sem recursos.
    • Alguma outra razão que não identifiquei, há muitas coisas estranhas acontecendo quando escaneio a Internet.
  • DESCONHECIDO - sem conexão - host inacessível (erro ICMP) A rede remota informa que o host não pode ser alcançado ou não está funcionando. Tente novamente mais tarde se você acha que esse host deveria estar ativo.
  • DESCONHECIDO - sem conexão - rede inacessível (erro ICMP) Há um erro de rede (transitório) na extremidade remota; tente novamente mais tarde se você acredita que essa rede deveria estar funcionando.
  • DESCONHECIDO - erro de protocolo RDP Isso significa que ocorreu alguma corrupção no protocolo RDP, seja porque o lado remoto o implementa incorretamente (não é um sistema Windows), porque está lidando mal com um erro de rede transitório, ou algo mais.
  • DESCONHECIDO - erro de protocolo SSL Desde o Windows Vista, o RDP usa o protocolo STARTTLS para rodar sobre SSL. Esta camada tem seus próprios problemas como os acima, que incluem lidar mal com erros de rede subjacentes, ou tentar se comunicar com sistemas que têm algum tipo de incompatibilidade. Se você obtiver uma mensagem de erro muito longa aqui (como SSL3_GET_RECORD:wrong version), é porque o outro lado tem um bug no SSL, ou a sua própria biblioteca SSL que você está usando tem um bug.

Usando com masscan

Esta ferramenta rdpscan é relativamente lenta, escaneando apenas algumas centenas de alvos por segundo. Você pode usar o masscan para acelerar as coisas. A ferramenta masscan é aproximadamente 1000 vezes mais rápida, mas fornece apenas informações limitadas sobre o alvo.

Os passos são:

  • Primeiro, escaneie as faixas de endereços com masscan para encontrar rapidamente hosts que respondem na porta 3389 (ou qualquer porta que você use).
  • Segundo, alimente a saída do masscan no rdpscan, para que ele apenas tenha que escanear alvos que sabemos que estão ativos.

A maneira simples de executar isso é apenas combiná-los na linha de comando:

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

A maneira como faço é em duas etapas:

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

Compilando

A parte difícil é obter as bibliotecas OpenSSL instaladas e não conflitar com outras versões no sistema. Alguns exemplos para versões do Linux que testei são os seguintes, mas eles mudam os nomes dos pacotes de uma distribuição para a próxima. Além disso, existem muitas opções para uma API compatível com OpenSSL, como BoringSSL e LibreSSL.

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

Depois de resolver esse problema, você compila todos os arquivos .c juntos assim:

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

Coloquei um Makefile no diretório que faz isso, então você provavelmente pode fazer apenas:

root@kitploit:~
$ make

O código é escrito em C, então precisa de um compilador C instalado, como fazer o seguinte:

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

Erros comuns de compilação

Esta seção descreve os erros de compilação mais óbvios.

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

Isso significa que você não tem os cabeçalhos do OpenSSL instalados, ou eles não estão em algum caminho. Lembre-se de que, mesmo que você tenha os binários do OpenSSL instalados, isso não significa que você tenha os arquivos de desenvolvimento instalados. Você precisa tanto dos cabeçalhos quanto das bibliotecas instalados.

Para instalar essas coisas no Debian, faça:

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

Para corrigir o problema do caminho, adicione uma flag de compilação -I/usr/local/include, ou algo semelhante.

Um exemplo de problema de linker é o seguinte:

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

Eu recebo isso no macOS porque existem múltiplas versões do OpenSSL. Eu corrijo isso codificando os caminhos:

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

De acordo com comentários de outros, a seguinte linha de comando pode funcionar no macOS se você usou o Homebrew para instalar as coisas. Eu ainda recebo os erros de linkagem acima, no entanto, porque instalei outros componentes OpenSSL que estão em conflito.

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

Executando

A seção acima fornece dicas de início rápido para executar o programa. Esta seção fornece ajuda mais aprofundada.

Para escanear um único alvo, basta passar o endereço do alvo:

root@kitploit:~
./rdpscan 192.168.10.101

Você pode passar endereços IPv6 e nomes DNS. Você pode passar múltiplos alvos. Um exemplo disso seria:

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

Você também pode escanear faixas de endereços, usando endereços IPv4 início-fim, ou especificações IPv4 CIDR. Faixas IPv6 não são suportadas porque são muito grandes.

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

Por padrão, ele escaneia apenas 100 alvos por vez. Você pode aumentar este número com o parâmetro --workers. No entanto, não importa o quão alto você defina este parâmetro, na prática você obterá no máximo cerca de 500 a 1500 workers rodando ao mesmo tempo, dependendo do seu sistema.

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

Em vez de especificar alvos na linha de comando, você pode carregá-los de um arquivo, usando o bem-nomeado parâmetro --file:

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

O formato do arquivo é um endereço, nome ou faixa por linha. Ele também pode consumir o texto gerado pelo masscan. Espaços em branco extras são cortados, linhas em branco ignoradas e quaisquer linhas de comentário são ignoradas. Um comentário é uma linha que começa com o caractere #, ou caracteres //.

A saída é enviada para stdout dando o status de VULNERÁVEL, SEGURO, ou DESCONHECIDO. Pode haver razões adicionais para cada um. Essas razões são descritas acima.

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

Você pode processar isso com comandos unix adicionais como grep e cut. Para obter uma lista apenas de máquinas vulneráveis:

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

O parâmetro -dddd significa informação diagnóstica, onde quanto mais ds você adicionar, mais detalhes são impressos. Isso é enviado para stderr em vez de stdout para que você possa separar os fluxos. Usando bash, isso é feito assim:

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

Informação de diagnóstico

Adicionar o parâmetro -d despeja informações de diagnóstico sobre as conexões em 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

No macOS/Linux, você pode redirecionar stdout e stderr separadamente para diferentes arquivos da maneira usual:

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

SOCKS5 e Tor lulz

Ele inclui suporte a SOCKS5:

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

Isso piora os problemas de conexão, então você obtém muito mais resultados "DESCONHECIDO".

Vincular estaticamente o OpenSSL

Para lançar os binários Windows e macOS anexados como releases a este projeto, eu vinculo estaticamente o OpenSSL, para que não precise ser incluído separadamente, e os programas funcionem imediatamente. Esta seção descreve algumas notas sobre como fazer isso, especialmente porque a descrição na própria página do OpenSSL parece estar desatualizada.

Ambos os passos começam baixando o código-fonte do OpenSSL e colocando-o ao lado do diretório rdpscan:

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

Windows

Para Windows, você precisa primeiro instalar alguma versão do Perl. Eu uso a do ActiveState.

Em seguida, você precisará de um "assembler" especial. Eu uso o recomendado chamado NASM)

Em seguida, você precisará de um compilador. Eu uso o VisualStudio 2010. Você pode baixar a versão mais recente "Visual Studio Community Edition" (que é 2019) em vez disso, da Microsoft.

Agora você precisa construir o makefile. Isso é feito entrando no diretório do OpenSSL e executando o programa Perl Configure:

root@kitploit:~
perl Configure VC-WIN32

Eu escolhi 32 bits para Windows porque existem muitos sistemas Windows antigos por aí, e quero tornar o programa o mais compatível possível com versões antigas.

Eu quero uma compilação totalmente estática, incluindo o runtime C. Para fazer isso, abri o makefile resultante em um editor e mudei a flag de compilação C de /MD (significa usar DLLs) para /MT. Enquanto estava lá, adicionei o seguinte ao CPPFLAGS -D_WIN32_WINNT=0x501, que restringe o OpenSSL a recursos que funcionam de volta no Windows XP e Server 2003. Caso contrário, você obtém erros de que bcrypt.dll não foi encontrado se você executar nesses sistemas mais antigos.

Agora você precisará garantir que tudo esteja no seu PATH. Copiei nasm.exe para um diretório no PATH. Para o Visual Studio 2010, executei o programa vcvars32.bat para configurar as variáveis de PATH para o compilador.

Neste ponto, na linha de comando, digitei:

root@kitploit:~
nmake

Isso cria as bibliotecas. As estáticas são libssl_static.lib e libcrypto_static.lib, que eu uso para vincular no rdpscan.

macOS

Primeiro de tudo, você precisa instalar um compilador. Eu uso as Developer Tools da Apple, instalando XCode e o compilador. Acho que você pode usar o Homebrew para instalar gcc em vez disso.

Em seguida, vá para o diretório de código-fonte do OpenSSL e crie um makefile:

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

Agora simplesmente compile:

root@kitploit:~
make depend
make

Neste ponto, ele criou bibliotecas dinâmicas (.dylib) e estáticas (.lib). Deletei as bibliotecas dinâmicas para que ele pegue as estáticas por padrão.

Agora no rdpscan, basta compilar o makefile do macOS:

root@kitploit:~
make -f Makefile.macos

Isso compilará todos os arquivos fonte do rdpscan e depois vinculará com as bibliotecas OpenSSL no diretório ../openssl que você acabou de construir.

Isso deve produzir um executável de 3 megabytes. Se, em vez disso, você obteve apenas um executável de 200 kilobytes, então você cometeu um erro e vinculou com as bibliotecas dinâmicas.

Baixar ferramenta