Skip to content

Resumo Enumeracao

Checklist

Enumeracao de servicos

Nmap basico

sudo nmap_enum <hostname> | tee nmap_output.txt

Vide Referências Para obter o script nmap_enum.

Scan UDP básico

sudo nmap -sU -p 53,161,111,137,139,500,2049 -Pn <hostname> | tee nmap_udp_output.txt

Full TCP scan

sudo nmap -p- -Pn -T5 -n <ip> | tee nmap_fullportstcp_output.txt

Better performance

sudo nmap -p- --max-retries 0 -Pn -T5 -n <ip> | tee nmap_fullportstcp_output2.txt

Scan de vulnerabilidade nmap

sudo nmap -sS --script vuln -n -T5 -Pn <ip> -p <ports> | tee nmap_vulns.txt

Referência em vídeo

Script nmap_enum
UDP scan somente portas de serviços exploráveis na OSCP
TCP scan full (todas as portas)
Scan de vulnerabilidades com nmap

Enumeracao HTTP e HTTPS

Analisar o site

Vide Referências para obter o script urlExtract.

urlExtract -r 4 https://<hostname>

Sendo -r a profundidade (em níveis de diretórios) que a ferramenta deve alcançar.

Analisar o código do front end baixado e verificar todas as URLs existentes no site

httrack http://<hostname>
cd hts-cache
cat new.txt | cut -f 8

CVEs

Obter o nome da aplicação por meio da navegação ou cabeçalhos na resposta do servidor e procurar por CVEs:

searchsploit <versão_da_aplicação>

Verifica cabecalhos

Verificar os headers com curl

curl -v http://<hostname> -H "User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0" -o /dev/null

(Passível de customização a depender do caso, como alterar o User-Agent ou alterar os métodos de consulta HTTP)

URL bruteforce

URL brute force common sem extensões:

gobuster dir --useragent "Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0" -u http://<hostname> -w /usr/share/seclists/Discovery/Web-Content/common.txt -k -t 16 -o "tcp_port_protocol_s_ext_gobuster.txt"

URL brute force common com extensões

feroxbuster -w /usr/share/seclists/Discovery/Web-Content/common.txt -x "txt,html,asp,aspx" -u http://<hostname>

Caso precise filtrar:

--filter-status 500,403
--filter-code
--filter-words

URL brute force com o dicionário médio sem extensões

gobuster dir --useragent "Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0" -u http://<hostname> -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -k -t 16 -o "tcp_port_protocol_s_ext_medium_gobuster.txt"

URL brute force medium com extensões utilizando ffuf

ffuf -u http://<hostname>/FUZZ -ic -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -e ".txt,.html,.php,.asp,.aspx,.jsp" -fs <filtros> -H "User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0" -x http://127.0.0.1:8080

Enumerar subdominios e virtual hosts

 ffuf -c -ic -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt -H "Host: FUZZ.<hostname>" -H "User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0" -u http://<hostname> -fs xxx

Web scan nikto

nikto -host http://<hostname> -T x 6 -useragent "Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/115.0" | tee nikto_output.txt

sslscan

Dessa forma podemos obter subdomínios identificados em certificados:

sslscan https://<hostname>

Enumeracao de usuario e brute force

OBS: Para alterar o User-Agent deve ser informado o cabeçalho via H:.... Segue exemplo abaixo. Vale ressaltar que para o basic authentication essa feature não é suportada e tem que ser feito ajustes via proxy (no burp, por exemplo)

Verificar as credenciais padrão das páginas web (sistemas já conhecidos)

hydra -l root@locahost -P /usr/share/wordlist/rockyou.txt 10.11.1.39 http-post-form "/otrs/index.pl:H=User-Agent\: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv\:88.0) Gecko/20100101 Firefox/88.0':Action=Login&RequestedURL=&Lang=en&TimeOffset=300&User=root@localhost&Password=^PASS^:Login failed!"

get basic authentication

hydra -C /usr/share/seclists/Passwords/Default-Credentials/tomcat-betterdefaultpasslist.txt 10.11.1.209 -s 8080 http-get /manager/html

onde -s é a porta http-get é o método a ser utilizado /manager/html é o diretório pelo qual estamos tentando nos autenticar e - C colon separated "login:pass" format, instead of -L/-P options

COM SSL

proxychains hydra -L usernames.txt -P passwords.txt 10.10.10.7 -s 443 -S http-get /admin/config.php

post (Form authentication)

hydra -l root@locahost -P /usr/share/wordlist/rockyou.txt 10.11.1.39 http-post-form "/otrs/index.pl:Action=Login&RequestedURL=&Lang=en&TimeOffset=300&User=root@localhost&Password=^PASS^:Login failed!"

Referencia em video

Enumeração diretórios via URL escondidas com ffuf
Enumeração de arquivos escondidos via URL com ffuf
Inspecionando o código da página
Procura por CVE da aplicação
Verificar cabeçalhos da aplicação
Scan de vulnerabilidade com nikto
Brute Force com hydra par autenticação HTTP básica
Brute Force com hydra par autenticação HTTP básica com SSL/TLS
Brute force via requisição POST com Burpsuite
Brute force via requisição POST com Hydra

Enumeracao SMB e RPC

Null session

Embora pareça ser redundante os testes, o comportamento de cada comando abaixo difere e pode trazer resultados diferentes:

SMB Null session 1

smbclient -L //<hostname>

SMB Null session 2

smbclient -L //<hostname> -U '' -N

SMB Null session 3

smbclient -L //<hostname> -U ''
netexec smb <hostname> -u '' -p '' --shares
sudo nmap -p 445,139 -Pn -T5 10.10.10.179 --script smb-enum-shares

Guest session

netexec smb <hostname> -u 'guest' -p '' --shares

Acesso de escrita

Tente escrever algum arquivo no compartilhamento. Funcionando, utilize essa referência para saber como proceder: Improvável, mas vale o teste

impacket-samrdump <hostname>

RPC Null session

rpcclient -U '' -N <hostname>
    srvinfo
    enumdomusers
    getdompwinfo
    querydominfo
    netshareenum
    netshareenumall

Enum4linux

enum4linux -a <hostname>

Enumeracao LDAP

ldapsearch -x -H ldap://<hostname> -D '' -w '' -b "DC=<domain_name>,DC=<tld>"
ldapsearch -x -H ldap://10.10.10.179 -s base

Enumeracao DNS

Transferência de zona com dig

dig axfr <hostname> @<ip_dns_server>

DNSEnum

dnsenum -dnsserver <ip_dns_server> <hostname>

Aqui o dnsenum utiliza do /etc/resolv.conf para fazer transferência de zona

dnsrecon

dnsrecon -d <hostname> -n <ip_dns_server>

Referência em vídeo

Identificando servidores DNS com nmap
Configurando o DNS correto no seu Kali Linux no resolv.conf
Enumeração manual com o comando host dos tipos a,mx,any,axfr (transferência de zona) e txt
Enumeração automatizada com dnsenum
Enumeração automatizada com dnsrecon
Enumeração automatizada com dig

Enumeracao SMTP

nmap -sS -p 25 -n -sV --version-10.11.1.25
nc -nv 10.11.1.217 25

Geralmente funciona melhor com telnet

telnet 10.11.1.217 25
VRFY root
VRFY idontexist
VRFY <username>
user <username>
pass <password>
list

retr 1
retr 2

Enumeracao de usuarios

smtp-user-enum -M EXPN -U usernames.txt -t <hostname>    
smtp-user-enum -M VRFY -U usernames.txt -t <hostname>
smtp-user-enum -M RCPT -U usernames.txt -t <hostname>
smtp-user-enum -M RCPT -D dominio.com.br -U usernames.txt -t <hostname>
sendEmail -t hr@dominio.com.br -f atacante@teste.com.br -a arquivo_malicioso.doc -s 10.10.10.10 

Enumeracao SNMP

Bruteforce de nomes de comunidades

onesixtyone <hostname> -c communities.txt

Checa acesso de escrita

snmp-check -w -c public <hostname>

Enumeração snmp com nmap

sudo nmap -sU -p 161 --script "snmp*" <hostname>

snmpwalk

snmpwalk -c public -v 2c <hostname>

Importante notar que este comando consegue obter mais informações a respeito do serviço SNMP, do servidor, inclusive enumerar usuários e arquivos do sistema*

snmpwalk -c public -v2c <hostname> . | tee /tmp/snmpwalk_full.txt
snmpwalk -c public -v1 <hostname> . | tee /tmp/snmpwalk_full.txt

Vale considerar que temos que observar as pastas que conseguirmos ver de webservers, por exemplo, além de credenciais em texto claro em linha de comando, também. Foram os cenários que observei no hack the box. Vale considerar que os comandos anterior já contemplam os resultados dos comandos abaixo, mas deixo como alternativa.

snmpbulkwalk e snmp_process_list.py

(Esses últimos comandos não foram documentados em vídeo, dado redundância dele com os demais comandos já mostrados)

sudo apt update
sudo apt install snmp-mibs-downloader
snmpbulkwalk -c public -v2c <hostname> | tee snmpbulk.txt
python snmp_process_list.py snmpbulk.txt

Referência em vídeo

Identificação do serviço SNMP
Enumeração SNMP utilizando nmap
Descobrir o nome da community com onesixtyone e wordlists utililzadas
Enumerando com snmpwalk
Enumerando com snmp-check

Enumeracao NFS

Enumeração com nmap do NFS

nmap -Pn -sV -p 111,2049 --script="banner,(rpcinfo or nfs*) and not (brute or broadcast or dos or external or fuzzer)" -oN "tcp_111_2049_nfs_nmap.txt" <hostname>

Mostra informações de compartilhamento da máquina alvo

showmount -e

Montando o compartilhamento na máquina

sudo mount -o rw,vers=2 <hostname>:/home /mnt

No entanto, no momento de montar o compartilhamento é necessário uma configuração de usuário para exploração desta falha. Vide esta referência

Enumeracao FTP

ftp -a <hostname>

ou para transferência de arquivos em modo ativo:

ftp -a -A <hostname>

Se atentar ao fato de possíveis arquivos escondidos

ls -al

Active Directory

Primeiro precisamos de informações básicas a respeito do domínio ou quem é o DC (Domain Controller) para sabermos quem devemos ter como alvo para extração de hashes e afins...

IP dos domain controllers

linux

nslookup -type=srv _ldap._tcp.dc._msdcs.<dominio.com.br>
nslookup -type=srv _kerberos._tcp.<dominio.com.br>
nslookup -type=srv _kpasswd._tcp.<dominio.com.br>
nslookup -type=srv _ldap._tcp.<dominio.com.br>

windows

nslookup
set type=all
_ldap._tcp.dc._msdcs.<dominio.com.br>

Outra opção seria:

nltest /dclist:<dominio.local>

Vale considerar que este útlimo comando só funciona se a máquina já está no domínio.

Obter nome dominio

SEM ACESSO INICIAL NA MÁQUINA

No Linux

enum4linux -a <hostname_dc>

Utilizar também

netexec smb <hostname_dc>

COM ACESSO NA MÁQUINA

No Windows

[System.DirectoryServices.ActiveDirectory.Domain]::GetCurrentDomain()

ou

Vale considerar que este comando só funciona se a máquina já está no domínio

whoami

Enumerar usuarios

SEM ACESSO INICIAL NA MÁQUINA

kerbrute userenum -d dominio.local /usr/share/seclists/Usernames/xato-net-10-million-usernames.txt

ou

rpcclient -U <domain>/<usuario> <hostname_dc>
enumdomusers
srvinfo
querydominfo
enumdomgroups
querygroup 0x200
netshareenum
netshareenumall

ou

enum4linux -a <hostname_dc>

Via SMB

netexec smb <hostname> --users

Ldapsearch

ldapsearch -x -H ldap://<hostname> -D '' -w '' -b "DC=<domain_name>,DC=<tld>"

COM ACESSO NA MÁQUINA

 net user
 net user /domain

 net user username /domain

AsRep Roasting

impacket-GetNPUsers -usersfile usernames.txt domain.local/ --dc-host <hostname_dc>

Com base nessa enumeração, provável que já teremos alguma credencial válida no domínio, então seguimos para os próximos passos aqui.

Observação abaixo, caso tenha uma máquina fora do domínio

runas /netonly /user:domain.br\user powershell

(será solicitado credencial e pode ser informado uma credencial inválida que o comando funcionará, mas por motivos óbvios, quaisquer comando que utilizemos não se autenticará na rede)

Outros

Verificar as credenciais (as default e as que conseguimos via enumeração) obtidas e realizar o bruteforce em TODOS os outros SERVIÇOS encontrados na máquina

Caso algum serviço identificado não mencionado neste resumo, verifique esta referência

Referencias

script nmap_enum

Basta copiar para um arquivo em um diretório da sua máquina e relacioná-lo no /usr/bin com link simbólico, por exemplo:

sudo ln -s /home/user/Downloads/nmap_enum /usr/bin/nmap_enum

urlExtract

Para instalar, basta seguir as instruções do README.