Introdução
No domínio da cibersegurança, a compreensão das estruturas de bases de dados é um passo crítico na avaliação da postura de segurança de aplicações web. Vulnerabilidades de injeção de SQL podem expor informações sensíveis, e ferramentas como o sqlmap são indispensáveis para automatizar a descoberta e exploração de tais falhas.
Este laboratório foca-se num aspeto específico, mas crucial, das capacidades do sqlmap: a enumeração de tabelas dentro de uma base de dados. Após identificar potenciais pontos de injeção de SQL e listar as bases de dados disponíveis, o próximo passo lógico é aprofundar uma base de dados específica para compreender a sua estrutura de tabelas. Este conhecimento é vital para explorações futuras, como a extração de dados sensíveis de tabelas específicas.
Ao final deste laboratório, você estará proficiente no uso do sqlmap para direcionar uma base de dados particular e listar todas as suas tabelas associadas, uma habilidade fundamental para qualquer testador de penetração ou entusiasta de segurança.
Selecionar uma Base de Dados Alvo da Lista Enumerada
Nesta etapa, simularemos ter enumerado bases de dados anteriormente e selecionaremos uma para focar. Num cenário do mundo real, você já teria executado o sqlmap com o flag --dbs para listar todas as bases de dados disponíveis. Para este laboratório, assumiremos que você identificou uma base de dados chamada acuart como seu alvo.
Primeiro, vamos garantir que o sqlmap está disponível. Se não estiver instalado, você pode instalá-lo usando sudo apt update && sudo apt install sqlmap -y.
Usaremos uma URL vulnerável conhecida como nosso alvo. Para fins de demonstração, usaremos http://testphp.vulnweb.com/listproducts.php?cat=1.
Para começar, vamos listar as bases de dados disponíveis no nosso alvo. Este comando levará algum tempo para ser executado, pois o sqlmap realiza as suas verificações.
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --dbs
Você verá uma saída semelhante a esta, listando as bases de dados:
---
[INFO] fetching database names
[INFO] the back-end DBMS is MySQL
...
available databases [X]:
[*] acuart
[*] information_schema
[*] mysql
[*] performance_schema
...
Desta lista, escolheremos acuart para enumeração adicional.
Usar o Flag -D para Especificar a Base de Dados
Nesta etapa, aprenderemos como dizer ao sqlmap com qual base de dados específica queremos interagir. Isto é conseguido usando o flag -D (ou --db), seguido pelo nome da base de dados.
Continuando a partir da etapa anterior, onde identificamos acuart como a nossa base de dados alvo, vamos agora instruir o sqlmap a focar as suas operações nesta base de dados em particular.
A sintaxe geral para especificar uma base de dados é:
sqlmap -u "URL_ALVO" -D "NOME_DA_BASE_DE_DADOS" [OUTROS_FLAGS]
Para o nosso laboratório, usaremos acuart como o nome da base de dados. Ainda não estamos a listar tabelas, apenas a definir o contexto para o sqlmap.
Execute o seguinte comando no seu terminal:
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart --current-db
Este comando dirá ao sqlmap para ter como alvo a base de dados acuart e, em seguida, tentará identificar a base de dados atual à qual está conectado, confirmando a nossa seleção. A saída confirmará que acuart é a base de dados que está a ser alvo.
---
[INFO] fetching current database
...
current database: 'acuart'
...
Usar o Flag --tables para Listar Tabelas
Agora que especificámos a base de dados alvo usando o flag -D, o próximo passo lógico é listar as tabelas dentro dessa base de dados. É aqui que o flag --tables entra em jogo.
O flag --tables instrui o sqlmap a enumerar todas as tabelas presentes na base de dados atualmente selecionada. Quando combinado com o flag -D, fornece uma forma poderosa de mapear a estrutura de uma base de dados específica.
A sintaxe geral para listar tabelas numa base de dados específica é:
sqlmap -u "URL_ALVO" -D "NOME_DA_BASE_DE_DADOS" --tables
Para o nosso laboratório, combinaremos o URL alvo, a base de dados acuart e o flag --tables.
Execute o seguinte comando no seu terminal:
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart --tables
Este comando iniciará o processo do sqlmap a identificar e listar todas as tabelas dentro da base de dados acuart. Esta operação pode levar algum tempo, dependendo da complexidade e do tamanho da base de dados.
Executar o Comando para Enumerar Tabelas
Nesta etapa, executaremos o comando completo do sqlmap que combina todos os flags que aprendemos até agora para enumerar tabelas da nossa base de dados alvo específica.
Usaremos o URL alvo http://testphp.vulnweb.com/listproducts.php?cat=1, especificaremos a base de dados acuart usando -D acuart, e instruiremos o sqlmap a listar as suas tabelas usando --tables.
Abra o seu terminal e execute o seguinte comando:
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" -D acuart --tables
O sqlmap realizará agora as suas verificações e tentará recuperar os nomes das tabelas. Verá várias mensagens [INFO] à medida que o sqlmap avança nos seus testes.
Após algum tempo, o sqlmap apresentará uma lista de tabelas encontradas dentro da base de dados acuart. A saída será semelhante a esta:
---
[INFO] fetching tables for database 'acuart'
...
Database: acuart
[X] articles
[X] carts
[X] categories
[X] guestbook
[X] pictures
[X] products
[X] users
...
Esta saída confirma que o sqlmap enumerou com sucesso as tabelas dentro da base de dados acuart.
Analisar a Lista de Nomes de Tabelas Retornada
Nesta etapa final, analisaremos a saída do comando sqlmap anterior. Compreender a lista de nomes de tabelas retornada é crucial para planear os passos de exploração subsequentes.
Quando o sqlmap enumera tabelas com sucesso, apresenta-as numa lista clara e organizada. Para a base de dados acuart, deverá ter visto tabelas como articles, carts, categories, guestbook, pictures, products e users.
Cada um destes nomes de tabelas fornece uma pista sobre os dados armazenados na base de dados. Por exemplo:
users: Esta tabela é muito provável que contenha credenciais de utilizador (nomes de utilizador, palavras-passe, emails), que são frequentemente um alvo principal para atacantes.products: Esta tabela conteria informações sobre os produtos vendidos no website.articles,guestbook,categories: Estas tabelas provavelmente contêm dados relacionados com o conteúdo.
A presença de uma tabela users é particularmente significativa, pois muitas vezes contém informações sensíveis. Num teste de penetração real, o seu próximo passo seria tipicamente enumerar as colunas dentro da tabela users (usando --columns) e depois descarregar os dados dessas colunas (usando --dump).
Este laboratório equipou-o com a habilidade fundamental de enumerar tabelas de uma base de dados específica usando sqlmap, um passo crítico em qualquer avaliação de injeção SQL.
Resumo
Neste laboratório, aprendeu com sucesso como enumerar tabelas de uma base de dados específica usando sqlmap. Começou por compreender a importância de selecionar uma base de dados alvo, utilizou depois o flag -D para a especificar e, finalmente, empregou o flag --tables para listar todas as tabelas associadas.
Executou o comando completo do sqlmap para realizar a enumeração e analisou a lista de nomes de tabelas retornada, compreendendo a sua potencial importância numa avaliação de segurança. Esta habilidade é um elemento fundamental no processo de identificação e exploração de vulnerabilidades de injeção SQL, permitindo-lhe mapear estruturas de bases de dados e planear a extração de dados adicional.
Ao dominar esta técnica, está agora mais bem equipado para navegar e compreender as estruturas de dados subjacentes das aplicações web, um passo crucial em qualquer atividade de teste de penetração.


