🐈‍⬛
H4CKdotCL
Laboratorio
  • 🪅Bienvenidos al Book
  • Certificaciones
    • ⏳Junior Penetration Tester - eJPTv2
    • 🥉Ethical Hacking Professional Certification - CEHPC
    • 🥉Cybersecurity Awareness Professional Certification - CAPC
  • Metodología y Fases de Hacking Ético
    • Metodologías
      • Metodología OWASP (Open Web Application Security Project)
      • Metodología PTES
      • Metodología ISSAF
      • Metodología OSSTMM
    • Recopilación Pasiva de Información
      • Sublist3r
      • Httpx
      • theHarvester
      • Google Dorks
      • Wafw00f
      • Shodan
      • Whatweb
    • Recopilación Activa de Información
      • enum4linux
      • Guía de uso para Gobuster
      • Nmap (Network Mapper)
      • Wfuzz
      • SecList
      • FFUF
      • SMBClient
      • CrackMapExec
      • SMBMap
      • WPScan
      • Steghide
      • subfinder
    • SQLMap
    • Hydra
  • Utilidades
    • Docker: Potenciando Laboratorios de Pentesting
    • 📖Ejemplos de informes de Hacking Ético y auditoría de seguridad
  • Vulnerabilidades Web
    • IDOR (Insecure Direct Object Reference)
    • SSRF (Server-Side Request Forgery)
    • CSRF (Cross-Site Request Forgery)
    • File Upload Vulnerabilities
    • LFI (Local File Inclusion)
    • RFI (Remote File Inclusion)
    • XSS (Cross-Site Scripting)
    • XXE (XML External Entity)
    • Template Injections
    • Clickjacking
    • Broken Access Control
    • SQL Injection (Inyección SQL)
    • NoSQL Injection (Inyección NoSQL)
    • LDAP Injection (Inyección LDAP)
    • Log Poisoning
    • Open Redirect Bypass
Con tecnología de GitBook
En esta página

¿Te fue útil?

  1. Vulnerabilidades Web

SQL Injection (Inyección SQL)

🌐 Vulnerabilidad: SQL Injection (Inyección SQL)


🕵️‍♂️ ¿Qué es SQL Injection?

SQL Injection (SQLi) es una vulnerabilidad que ocurre cuando un atacante manipula entradas del usuario para alterar consultas SQL en una aplicación. Esto permite ejecutar comandos maliciosos en la base de datos, exfiltrar datos sensibles, modificar registros, o incluso comprometer el sistema.


⚙️ ¿Cómo se produce?

  1. Entrada no validada: El usuario introduce datos que se utilizan directamente en una consulta SQL.

  2. Inyección en la consulta: Los datos inyectados manipulan la consulta SQL original.

  3. Ejecución del código malicioso: La base de datos procesa el comando inyectado como si fuera legítimo.


🛠️ Mecanismo de ataque

Ejemplo de código vulnerable en PHP:

<?php
    $username = $_GET['username'];
    $query = "SELECT * FROM users WHERE username = '$username'";
    $result = $db->query($query);
?>

Ataque: Un atacante introduce:

username=admin' OR '1'='1

Esto convierte la consulta SQL original:

SELECT * FROM users WHERE username = 'admin' OR '1'='1';

El condicional 1='1' siempre es verdadero, lo que permite al atacante acceder a todos los registros de la tabla.


🎯 Impacto

  • Exposición de datos sensibles: Robo de datos personales, credenciales o información financiera.

  • Modificación de datos: Cambiar o eliminar registros.

  • Toma de control del sistema: En casos extremos, los atacantes pueden obtener acceso administrativo al servidor.

  • Denegación de servicio (DoS): Uso de consultas pesadas para sobrecargar la base de datos.


📉 Puntaje CVSS v3

  • Vector de ataque: Red (Explotable remotamente)

  • Complejidad del ataque: Baja

  • Impacto en confidencialidad: Alto

  • Impacto en integridad: Alto

  • Impacto en disponibilidad: Alto

  • Puntaje CVSS v3: 9.0 - 10.0 (Crítico) 🔥


🧑‍💻 Ejemplo práctico

Código vulnerable:

<?php
    $password = $_POST['password'];
    $query = "SELECT * FROM users WHERE password = '$password'";
    $result = $db->query($query);
?>

Ataque para evadir autenticación:

password=' OR '1'='1

Consulta resultante:

SELECT * FROM users WHERE password = '' OR '1'='1';

📌 Esto permite al atacante acceder sin conocer la contraseña real.


🛡️ ¿Cómo prevenir SQL Injection?

1️⃣ Uso de consultas parametrizadas

Utiliza sentencias preparadas para separar los datos de la lógica de la consulta:

<?php
    $stmt = $db->prepare("SELECT * FROM users WHERE username = ?");
    $stmt->bind_param("s", $username);
    $stmt->execute();
?>

2️⃣ Validar y sanitizar entradas

Verifica que las entradas de usuario cumplan con los formatos esperados:

if (!preg_match('/^[a-zA-Z0-9_]+$/', $username)) {
    die("Entrada inválida.");
}

3️⃣ Límite de privilegios

Configura la base de datos para que el usuario que accede desde la aplicación tenga permisos mínimos necesarios.

4️⃣ Usar ORM seguros

Frameworks como Laravel, Django o SQLAlchemy manejan automáticamente las consultas de manera segura.

5️⃣ Escapar caracteres especiales

Escapa manualmente las entradas cuando no se usan sentencias preparadas:

$username = mysqli_real_escape_string($db, $_GET['username']);

6️⃣ Auditorías y pruebas de seguridad

Realiza pruebas de penetración regularmente para detectar vulnerabilidades de inyección.

7️⃣ Deshabilitar funciones peligrosas

En algunos casos, deshabilitar funciones como xp_cmdshell en bases de datos como SQL Server puede prevenir la ejecución de comandos.


💡 Dato extra: Las vulnerabilidades de SQL Injection son unas de las más antiguas y comunes en aplicaciones web, pero también unas de las más prevenibles.

🚨 Nota importante: Nunca confíes en las entradas del usuario, incluso si provienen de fuentes internas o de administradores.

AnteriorBroken Access ControlSiguienteNoSQL Injection (Inyección NoSQL)

Última actualización hace 6 meses

¿Te fue útil?