Introdução
SQL injection é uma vulnerabilidade web comum que permite aos atacantes interferir nas consultas que uma aplicação faz ao seu banco de dados. 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 SQL injection e de tomada de controle de servidores de banco de dados.
Embora o sqlmap seja primariamente conhecido por suas capacidades de teste de injeção, ele também inclui recursos poderosos para descobrir potenciais pontos de injeção rastreando um site alvo. Isso é particularmente útil quando você não tem uma URL ou parâmetro específico em mente e deseja que o sqlmap explore o site e identifique todos os pontos de entrada possíveis para injeção.
Neste laboratório, você aprenderá como alavancar a funcionalidade de rastreamento do sqlmap para descobrir automaticamente URLs e formulários em um site alvo, e então testá-los para vulnerabilidades de SQL injection. Você identificará uma URL raiz, usará o flag --crawl, definirá a profundidade de rastreamento, executará a operação e, finalmente, revisará os pontos de injeção descobertos.
Identificar uma URL Raiz para o Site Alvo
Nesta etapa, você identificará a URL raiz do site alvo a partir da qual o sqlmap começará a rastrear. Este é o ponto de entrada para o sqlmap iniciar a descoberta de links e formulários. Para este laboratório, usaremos um servidor web simples rodando localmente.
Primeiro, vamos garantir que o servidor web esteja em execução e acessível. Você pode usar o curl para verificar se o servidor responde.
curl http://127.0.0.1:8000
Você deverá ver alguma saída HTML, indicando que o servidor está ativo. A URL raiz para o nosso site alvo será http://127.0.0.1:8000.
Em seguida, usaremos esta URL como ponto de partida para o sqlmap.
Usar o Flag --crawl para Descobrir Links e Formulários
Nesta etapa, você aprenderá como usar o flag --crawl com o sqlmap. Este flag instrui o sqlmap a rastrear o site alvo e descobrir novos URLs e formulários para testar vulnerabilidades de SQL injection. Sem este flag, o sqlmap testaria apenas a URL explicitamente fornecida.
A sintaxe básica para usar --crawl é:
sqlmap -u < target_url > --crawl
Vamos tentar executar o sqlmap com o flag --crawl em nossa URL alvo. Este comando iniciará o processo de rastreamento.
sqlmap -u http://127.0.0.1:8000 --crawl
Você verá o sqlmap começando a rastrear o site, identificando links e formulários. Ele fará algumas perguntas durante o processo. Para fins deste laboratório, você pode geralmente aceitar as opções padrão pressionando Enter ou digitando y quando solicitado.
Por exemplo, quando perguntado "do you want to keep the results in a CSV file?" (você quer manter os resultados em um arquivo CSV?), você pode digitar n e pressionar Enter. Quando perguntado "do you want to test for other common vulnerabilities?" (você quer testar outras vulnerabilidades comuns?), você pode digitar n e pressionar Enter.
Definir a Profundidade de Rastreamento com --crawl-depth=2
Nesta etapa, você refinará o processo de rastreamento definindo uma profundidade de rastreamento específica usando o flag --crawl-depth. A profundidade de rastreamento determina quantos níveis o sqlmap irá descer ao descobrir novos URLs. Uma profundidade de 1 significa que ele visitará apenas links diretamente da URL inicial. Uma profundidade de 2 significa que ele visitará links da URL inicial, e depois links das páginas recém-descobertas, e assim por diante.
Para o nosso pequeno site alvo, uma profundidade de 2 será suficiente para descobrir todas as páginas disponíveis.
A sintaxe para definir a profundidade de rastreamento é:
sqlmap -u <target_url> --crawl --crawl-depth=<depth_value>
Vamos executar o sqlmap novamente, desta vez especificando uma profundidade de rastreamento de 2.
sqlmap -u http://127.0.0.1:8000 --crawl --crawl-depth=2
Observe como a saída do sqlmap muda, potencialmente descobrindo mais links ou formulários à medida que ele se aprofunda na estrutura do site. Novamente, você pode aceitar os prompts padrão pressionando Enter ou digitando n para testes adicionais.
Executar a Operação de Rastreamento e Teste
Nesta etapa, você executará a operação completa de rastreamento e teste. Enquanto as etapas anteriores demonstraram os flags de rastreamento, o sqlmap, por padrão, também tentará testar pontos de injeção nos URLs descobertos. Para tornar o teste mais explícito e garantir que o sqlmap realize uma verificação completa, podemos adicionar o flag --batch para automatizar as respostas às solicitações e o flag --forms para direcionar especificamente os formulários.
O flag --batch instrui o sqlmap a rodar em modo não interativo, aceitando respostas padrão para todas as solicitações. Isso é útil para automação. O flag --forms instrui especificamente o sqlmap a analisar e testar formulários HTML no alvo.
Vamos combinar esses flags com nosso comando anterior:
sqlmap -u http://127.0.0.1:8000 --crawl --crawl-depth=2 --batch --forms
Este comando irá:
- Iniciar o rastreamento a partir de
http://127.0.0.1:8000. - Ir dois níveis de profundidade (
--crawl-depth=2). - Responder automaticamente às solicitações com valores padrão (
--batch). - Procurar e testar especificamente formulários HTML (
--forms).
Observe a saída. O sqlmap listará os URLs que descobre e os parâmetros que testa. Ele também indicará se encontra quaisquer pontos de injeção potenciais.
Revisar os URLs Descobertos e Pontos de Injeção Potenciais
Nesta etapa final, você revisará a saída do sqlmap para entender quais URLs e formulários foram descobertos e se algum ponto de injeção potencial foi identificado.
Após o sqlmap completar sua execução, ele fornecerá um resumo de suas descobertas. Procure por linhas indicando "parameter is vulnerable" (parâmetro é vulnerável) ou mensagens semelhantes.
Mesmo que o sqlmap não encontre uma vulnerabilidade de injeção SQL confirmada (o que é esperado para nosso site dummy simples), ele ainda mostrará os URLs e parâmetros que testou. Esta informação é crucial para análise manual ou testes automatizados adicionais.
Exemplos de trechos de saída que você pode ver:
...
[INFO] retrieved new form: 'http://127.0.0.1:8000/search.php' (GET)
...
[INFO] testing GET parameter 'id'
...
[INFO] testing GET parameter 'param'
...
[INFO] testing GET parameter 'query'
...
A principal conclusão é que o sqlmap rastreou com sucesso o site, identificou index.php, page.php e search.php (através do formulário), e então procedeu para testar seus respectivos parâmetros (id, name, param, query). Isso demonstra o poder do recurso de rastreamento do sqlmap em mapear automaticamente a superfície de ataque de uma aplicação alvo.
Você também pode verificar os arquivos de log do sqlmap (geralmente em ~/.sqlmap/output/) para um relatório mais detalhado, embora para este laboratório, a saída do console seja suficiente.
Resumo
Neste laboratório, você aprendeu com sucesso como usar as poderosas capacidades de rastreamento do sqlmap para descobrir potenciais pontos de injeção de SQL em um site alvo. Você começou identificando um URL raiz, depois usou o flag --crawl para instruir o sqlmap a explorar o site. Você refinou ainda mais o processo de rastreamento definindo uma profundidade específica com --crawl-depth. Finalmente, você executou uma operação abrangente de rastreamento e teste usando --batch e --forms para automatizar o processo e direcionar especificamente os formulários.
Ao concluir este laboratório, você agora entende como:
- Identificar um URL inicial para o rastreamento do sqlmap.
- Utilizar o flag
--crawlpara descobrir links e formulários. - Controlar a profundidade do rastreamento com
--crawl-depth. - Executar uma operação automatizada de rastreamento e teste com
--batche--forms. - Interpretar a saída do sqlmap para identificar URLs descobertos, parâmetros e potenciais pontos de injeção.
Esta habilidade é fundamental para a reconhecimento em testes de penetração web, permitindo que você mapeie eficientemente a superfície de ataque de uma aplicação web antes de tentar explorar vulnerabilidades específicas.


