Enumerar Bancos de Dados em um Servidor Alvo com sqlmap

Kali LinuxBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá a usar o sqlmap para enumerar bancos de dados em um servidor alvo. A enumeração de bancos de dados é uma etapa crucial no processo de teste de penetração, permitindo que você descubra os nomes dos bancos de dados presentes em um servidor que pode ser vulnerável a injeção de SQL. O sqlmap automatiza esse processo, tornando-o eficiente e direto. Começaremos garantindo uma injeção bem-sucedida de um escaneamento anterior (simulado), em seguida, usaremos o flag --dbs para listar todos os bancos de dados, executaremos o comando, interpretaremos os resultados e, finalmente, diferenciaremos entre bancos de dados do sistema e do usuário.

Confirmar uma Injeção Bem-sucedida de um Escaneamento Anterior

Nesta etapa, simularemos a confirmação de uma injeção de SQL bem-sucedida de um escaneamento anterior. Antes de enumerar bancos de dados, é essencial garantir que a URL alvo seja realmente vulnerável a injeção de SQL e que o sqlmap possa explorá-la com sucesso. Para fins deste laboratório, assumiremos que um escaneamento anterior identificou uma URL vulnerável. Usaremos uma URL de placeholder para demonstrar a estrutura do comando sqlmap.

Abra seu terminal no diretório ~/project.

sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --banner

Este comando usa o sqlmap para se conectar à URL especificada e tenta recuperar o banner do banco de dados. Uma recuperação bem-sucedida do banner indica uma injeção bem-sucedida.

Exemplo de saída:

        _
       ___ ___ ___ ___
      |_ -| . | . | . |
      |___|_  |_  |_  |
        |_|   |_|   |_|   3.7-1#stable

    [!] aviso legal: O uso do sqlmap para atacar alvos sem consentimento mútuo prévio é ilegal. Você é responsável por suas próprias ações.
    [!] você deseja habilitar suporte completo para proxy HTTP(S)? [y/N] N
    [!] você deseja retomar a sessão anterior? [Y/n/q] n

    ... (saída truncada) ...

    sistema operacional do servidor web: Linux Debian
    tecnologia da aplicação web: Apache 2.2.14, PHP 5.3.2
    SGBD back-end: MySQL >= 5.0.12
    banner: '5.1.73-0ubuntu0.10.04.1'

A linha banner na saída confirma que o sqlmap conseguiu interagir com sucesso com o banco de dados e recuperar suas informações de versão, indicando uma injeção bem-sucedida.

Usar o Flag --dbs para Listar Todos os Bancos de Dados

Nesta etapa, aprenderemos sobre o flag --dbs no sqlmap, que é especificamente usado para enumerar e listar todos os bancos de dados disponíveis no servidor alvo. Este flag é essencial para descobrir os nomes dos bancos de dados que podem conter informações confidenciais.

O flag --dbs instrui o sqlmap a realizar uma enumeração de bancos de dados. Quando o sqlmap explora com sucesso uma vulnerabilidade de injeção de SQL, ele pode então consultar o servidor de banco de dados para obter uma lista de todos os bancos de dados que ele hospeda.

A estrutura do comando será semelhante à etapa anterior, mas com a adição de --dbs:

sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --dbs

Este comando instruirá o sqlmap a identificar e listar todos os bancos de dados acessíveis através da vulnerabilidade de injeção de SQL no URL fornecido.

Executar o Comando de Enumeração de Banco de Dados

Nesta etapa, executaremos o comando sqlmap com o flag --dbs para enumerar os bancos de dados. Esta é a ação principal deste laboratório.

Execute o seguinte comando no seu terminal:

sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --dbs

O sqlmap agora realizará seus testes e, se bem-sucedido, exibirá uma lista de nomes de bancos de dados. Este processo pode levar algum tempo, pois o sqlmap executa várias técnicas de injeção.

Exemplo de saída:

        _
       ___ ___ ___ ___
      |_ -| . | . | . |
      |___|_  |_  |_  |
        |_|   |_|   |_|   3.7-1#stable

    [!] aviso legal: O uso do sqlmap para atacar alvos sem consentimento mútuo prévio é ilegal. Você é responsável por suas próprias ações.
    [!] você deseja habilitar suporte completo para proxy HTTP(S)? [y/N] N
    [!] você deseja retomar a sessão anterior? [Y/n/q] n

    ... (saída truncada) ...

    bancos de dados disponíveis [4]:
    [*] information_schema
    [*] mysql
    [*] performance_schema
    [*] acuart

A saída mostra o progresso do sqlmap e, eventualmente, uma lista de "bancos de dados disponíveis". Neste exemplo, information_schema, mysql, performance_schema e acuart são listados.

Interpretar a Lista de Nomes de Bancos de Dados Retornados

Nesta etapa, interpretaremos a lista de nomes de bancos de dados retornados pelo sqlmap. Compreender o que esses nomes representam é crucial para as próximas etapas de testes de penetração.

Da saída da etapa anterior, você pode ter visto uma lista semelhante a esta:

bancos de dados disponíveis [4]:
[*] information_schema
[*] mysql
[*] performance_schema
[*] acuart

Cada item [*] representa um banco de dados encontrado no servidor alvo.

  • information_schema: Este é um banco de dados padrão no MySQL (e outros bancos de dados SQL) que fornece acesso a metadados do banco de dados. Ele contém informações sobre todos os outros bancos de dados, tabelas, colunas e privilégios de acesso. É um banco de dados de sistema.
  • mysql: Este é outro banco de dados de sistema padrão no MySQL que armazena informações necessárias para a operação do servidor MySQL. Ele contém contas de usuário, privilégios e outros dados de configuração do servidor.
  • performance_schema: Este é um banco de dados de sistema no MySQL usado para monitorar a execução do servidor MySQL em um nível baixo. Ele fornece insights sobre o desempenho do servidor.
  • acuart: O nome deste banco de dados é provavelmente um banco de dados criado pelo usuário, específico para a aplicação web em execução no servidor. Este é frequentemente o banco de dados que contém os dados da aplicação, como credenciais de usuário, informações de produtos ou outros dados comerciais confidenciais.

Identificar bancos de dados criados pelo usuário, como acuart, é frequentemente o objetivo principal, pois estes são mais propensos a conter informações valiosas para um atacante.

Diferenciar Bancos de Dados de Sistema de Bancos de Dados de Usuário

Nesta etapa final, diferenciaremos explicitamente entre bancos de dados de sistema e bancos de dados de usuário com base nos resultados da enumeração. Essa distinção é importante para priorizar suas próximas etapas em um teste de penetração.

Conforme observado na etapa anterior, bancos de dados como information_schema, mysql e performance_schema são tipicamente bancos de dados de nível de sistema. Eles fazem parte da funcionalidade principal do sistema de gerenciamento de banco de dados e geralmente contêm metadados, contas de usuário para o próprio SGBD e estatísticas de desempenho. Embora às vezes possam ser explorados, raramente contêm os dados confidenciais específicos da aplicação que os atacantes geralmente procuram.

Por outro lado, bancos de dados com nomes que não são nomes de sistema padrão (por exemplo, acuart em nosso exemplo, ou webapp_db, users, products, etc.) são geralmente bancos de dados criados pelo usuário. Esses bancos de dados armazenam os dados reais da aplicação web, como:

  • Credenciais de usuário (nomes de usuário, senhas com hash)
  • Informações de clientes
  • Catálogos de produtos
  • Registros financeiros
  • Outros dados comerciais proprietários

Ao realizar um teste de penetração, após enumerar os bancos de dados, seu foco deve mudar para esses bancos de dados criados pelo usuário. O próximo passo lógico seria enumerar tabelas dentro desses bancos de dados de usuário, depois colunas dentro dessas tabelas e, finalmente, extrair os dados.

Ao entender essa distinção, você pode direcionar eficientemente seus comandos sqlmap subsequentes para extrair as informações mais valiosas. Por exemplo, para enumerar tabelas no banco de dados acuart, você usaria um comando como:

sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart --tables

Este comando demonstra como você prosseguiria para a próxima fase de extração de dados, focando no banco de dados de usuário identificado.

Resumo

Neste laboratório, você aprendeu com sucesso como enumerar bancos de dados em um servidor alvo usando sqlmap. Você começou entendendo a importância de confirmar uma injeção SQL bem-sucedida. Em seguida, usou a flag --dbs para listar todos os bancos de dados disponíveis e executou o comando para ver os resultados. Finalmente, você aprendeu a interpretar os nomes dos bancos de dados retornados, distinguindo entre bancos de dados de sistema e bancos de dados criados pelo usuário, potencialmente mais valiosos. Essa habilidade é fundamental para qualquer testador de penetração que busca extrair informações de aplicações web vulneráveis.