Realizar uma Varredura Básica em um Parâmetro GET com sqlmap

Kali LinuxBeginner
Pratique Agora

Introdução

Neste laboratório, você ganhará experiência prática com o 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 injeção de SQL e a tomada de controle de servidores de banco de dados. Especificamente, você se concentrará em realizar uma varredura básica contra o parâmetro GET de uma aplicação web para identificar potenciais vulnerabilidades de injeção de SQL. Compreender como iniciar uma varredura e interpretar sua saída inicial é uma habilidade fundamental para qualquer pessoa envolvida em segurança web ou testes de penetração. Este laboratório irá guiá-lo através dos passos necessários, desde a configuração de um ambiente vulnerável até a execução do seu primeiro comando sqlmap e a análise dos resultados.

Identificar uma URL de Destino com um Parâmetro GET

Nesta etapa, você identificará a URL de destino que contém um parâmetro GET, que o sqlmap usará para testar vulnerabilidades de injeção de SQL. Um parâmetro GET é tipicamente encontrado na URL após um ponto de interrogação (?), seguido por pares chave-valor separados por "e" (&). Para este laboratório, configuramos uma aplicação PHP vulnerável simples que aceita um parâmetro id via GET.

Primeiro, abra o navegador web dentro do ambiente LabEx. Você pode acessar o navegador clicando no ícone "Web Browser" no ambiente de desktop.

Navegue para a seguinte URL: http://localhost/index.php?id=1

Observe o conteúdo da página. Você deverá ver uma saída simples indicando que a aplicação está exibindo dados com base no parâmetro id. Isso confirma que o parâmetro id é um alvo adequado para a nossa varredura com sqlmap.

Construir o Comando de Varredura Básico com a Opção -u

Nesta etapa, você aprenderá como construir o comando básico do sqlmap para direcionar uma URL específica com um parâmetro GET. A opção principal para especificar a URL de destino é -u (ou --url).

Abra um terminal no ambiente LabEx. O usuário padrão é labex, e o diretório de trabalho padrão é ~/project.

A sintaxe básica para o sqlmap escanear uma URL com um parâmetro GET é:

sqlmap -u "http://example.com/page.php?param=value"

Substitua http://example.com/page.php?param=value pela nossa URL de destino.

Para o nosso laboratório, a URL de destino é http://localhost/index.php?id=1. Portanto, o comando que você usará é:

sqlmap -u "http://localhost/index.php?id=1"

Este comando instrui o sqlmap a iniciar a varredura da URL especificada e testar o parâmetro GET id em busca de vulnerabilidades de injeção de SQL.

Executar a Varredura Contra a URL de Destino

Agora que você construiu o comando sqlmap, é hora de executá-lo no terminal. Isso iniciará a varredura automatizada de injeção de SQL.

No seu terminal, execute o comando sqlmap que você construiu na etapa anterior:

sqlmap -u "http://localhost/index.php?id=1"

O sqlmap começará a enviar vários payloads para o parâmetro id para testar diferentes tipos de vulnerabilidades de injeção de SQL. Durante a varredura, o sqlmap pode fazer algumas perguntas. Para esta varredura básica, você geralmente pode aceitar as opções padrão pressionando Enter ou digitando y para sim quando solicitado.

Por exemplo, o sqlmap pode perguntar: [INFO] o DBMS back-end é MySQL. Você quer pular payloads de teste específicos para outros DBMSs? [Y/n] Digite Y e pressione Enter.

Ele também pode perguntar: para a URL 'http://localhost/index.php?id=1', o parâmetro 'id' parece ser injetável. Você quer continuar testando outros (se houver)? [y/N] Digite N e pressione Enter para focar no parâmetro injetável identificado.

A varredura prosseguirá, e você verá várias mensagens indicando o progresso e os testes que estão sendo realizados.

        _
       ___ ___ ___ ___
      |_ -| . | . | . |
      |___|_  |_  |_  |
            |_| |_| |_|   3.7#stable
[INFO] starting @ 12:34:56 /2023-01-01/
[INFO] testing connection to the target URL
[INFO] checking if the target is protected by some kind of WAF/IPS
[INFO] the back-end DBMS is MySQL. Do you want to skip test payloads specific for other DBMSs? [Y/n] Y
[INFO] for the URL 'http://localhost/index.php?id=1', parameter 'id' appears to be injectable. Do you want to keep testing others (if any)? [y/N] N
[INFO] GET parameter 'id' is vulnerable.
... (output truncated) ...

Analisar a Saída Inicial da Varredura em Pontos de Injeção

Após a conclusão da varredura do sqlmap, ele fornecerá um resumo de suas descobertas. Nesta etapa, você analisará a saída inicial para identificar pontos de injeção de SQL confirmados.

Revise a saída em seu terminal. Procure por linhas que indiquem que o sqlmap encontrou um parâmetro vulnerável. Um indicador chave é uma mensagem semelhante a:

[INFO] GET parameter 'id' is vulnerable.

Esta mensagem confirma que o sqlmap identificou com sucesso uma vulnerabilidade de injeção de SQL no parâmetro GET id da URL de destino. A saída também mostrará tipicamente o tipo de injeção encontrado (por exemplo, baseada em booleanos cega, baseada em erros, baseada em tempo cega, consultas empilhadas, etc.) e o sistema de gerenciamento de banco de dados (DBMS) back-end identificado (por exemplo, MySQL, PostgreSQL, etc.).

Compreender esta saída inicial é crucial, pois ela informa onde reside a vulnerabilidade e com que tipo de banco de dados você está lidando, o que pode informar etapas de exploração adicionais.

... (previous output) ...
[INFO] GET parameter 'id' is vulnerable.
[INFO] the back-end DBMS is MySQL.
[INFO] fetched data:
[INFO] retrieved: 'ID: 1'
[INFO] retrieved: 'ID: 2'
... (truncated output) ...

Localizar o Arquivo de Sessão no Diretório de Saída

O sqlmap salva automaticamente todos os resultados da varredura, incluindo vulnerabilidades identificadas, dados recuperados e informações de sessão, em um diretório de saída dedicado. Nesta etapa, você aprenderá como localizar este arquivo de sessão.

Por padrão, o sqlmap armazena sua saída no diretório ~/.sqlmap/output/. Dentro deste diretório, você encontrará subdiretórios nomeados após o host de destino.

Navegue até o diretório de saída do sqlmap:

cd ~/.sqlmap/output/localhost/

Em seguida, liste o conteúdo deste diretório para ver os arquivos de sessão e outros dados relacionados à varredura:

ls -l

Você deverá ver um diretório nomeado após a URL específica ou um hash dela, e dentro dele, arquivos como session.sqlite, log e potencialmente diretórios dump se dados foram extraídos. O arquivo session.sqlite contém os dados da sessão, que permitem ao sqlmap retomar varreduras ou revisar descobertas anteriores sem re-escanear.

labex@labex-ubuntu:~/project$ cd ~/.sqlmap/output/localhost/
labex@labex-ubuntu:~/.sqlmap/output/localhost$ ls -l
total 12
drwxr-xr-x 2 labex labex 4096 Jan  1 12:35 http%3A%2F%2Flocalhost%2Findex.php%3Fid%3D1
labex@labex-ubuntu:~/.sqlmap/output/localhost$ cd http%3A%2F%2Flocalhost%2Findex.php%3Fid%3D1/
labex@labex-ubuntu:~/.sqlmap/output/localhost/http%3A%2F%2Flocalhost%2Findex.php%3Fid%3D1$ ls -l
total 12
-rw-r--r-- 1 labex labex 1234 Jan  1 12:35 log
-rw-r--r-- 1 labex labex 8192 Jan  1 12:35 session.sqlite

Esta etapa é importante para entender onde o sqlmap armazena seus dados persistentes, o que é útil para revisar varreduras anteriores ou continuar operações complexas.

Resumo

Neste laboratório, você realizou com sucesso uma varredura básica de injeção de SQL em um parâmetro GET usando sqlmap. Você aprendeu como identificar uma URL de destino, construir o comando sqlmap com a opção -u, executar a varredura e interpretar a saída inicial para confirmar um ponto de injeção. Além disso, você localizou o arquivo de sessão e o diretório de saída onde o sqlmap armazena seus resultados. Este conhecimento fundamental é crucial para qualquer pessoa que deseje aprofundar-se em testes de segurança de aplicações web e nas capacidades do sqlmap.