En este módulo, aprenderemos sobre la explotación de vulnerabilidades web, una de las áreas más críticas y comunes en el pentesting. Nos enfocaremos en identificar, entender y explotar diferentes tipos de vulnerabilidades que pueden existir en aplicaciones web.

Contenido

  1. Introducción a las Vulnerabilidades Web
  2. Tipos Comunes de Vulnerabilidades Web
    • Inyección SQL
    • Cross-Site Scripting (XSS)
    • Cross-Site Request Forgery (CSRF)
    • File Inclusion
  3. Herramientas para la Explotación de Vulnerabilidades Web
  4. Ejemplos Prácticos
  5. Ejercicios y Soluciones
  6. Resumen y Conclusión

  1. Introducción a las Vulnerabilidades Web

Las vulnerabilidades web son fallos o debilidades en una aplicación web que pueden ser explotadas por atacantes para comprometer la seguridad de la aplicación, acceder a datos sensibles o tomar control del sistema. Estas vulnerabilidades pueden surgir debido a errores en el diseño, implementación o configuración de la aplicación.

  1. Tipos Comunes de Vulnerabilidades Web

Inyección SQL

Descripción: La inyección SQL ocurre cuando un atacante puede insertar o "inyectar" una consulta SQL maliciosa a través de la entrada de la aplicación, lo que permite manipular la base de datos subyacente.

Ejemplo de Código Vulnerable:

<?php
// Código vulnerable a inyección SQL
$username = $_POST['username'];
$password = $_POST['password'];
$query = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
$result = mysqli_query($conn, $query);
?>

Explicación: En este ejemplo, si un atacante ingresa ' OR '1'='1 como el nombre de usuario y cualquier contraseña, la consulta SQL se convierte en:

SELECT * FROM users WHERE username = '' OR '1'='1' AND password = ''

Esto siempre será verdadero y puede permitir el acceso no autorizado.

Mitigación:

  • Utilizar consultas preparadas y declaraciones parametrizadas.
  • Validar y sanitizar todas las entradas del usuario.

Ejemplo Seguro:

<?php
// Código seguro utilizando consultas preparadas
$stmt = $conn->prepare("SELECT * FROM users WHERE username = ? AND password = ?");
$stmt->bind_param("ss", $username, $password);
$stmt->execute();
$result = $stmt->get_result();
?>

Cross-Site Scripting (XSS)

Descripción: XSS ocurre cuando un atacante puede inyectar scripts maliciosos en el contenido que se envía a otros usuarios. Esto puede permitir al atacante robar cookies, sesiones o realizar acciones en nombre del usuario.

Ejemplo de Código Vulnerable:

<!-- Código vulnerable a XSS -->
<p>Hola, <?php echo $_GET['name']; ?>!</p>

Explicación: Si un atacante envía ?name=<script>alert('XSS');</script>, el script se ejecutará en el navegador del usuario.

Mitigación:

  • Escapar y sanitizar todas las entradas del usuario antes de mostrarlas.
  • Utilizar funciones de escape específicas para el contexto (HTML, JavaScript, etc.).

Ejemplo Seguro:

<?php
// Código seguro utilizando escape de HTML
$name = htmlspecialchars($_GET['name'], ENT_QUOTES, 'UTF-8');
?>
<p>Hola, <?php echo $name; ?>!</p>

Cross-Site Request Forgery (CSRF)

Descripción: CSRF permite a un atacante realizar acciones en nombre de un usuario autenticado sin su consentimiento, aprovechando la confianza que el sitio tiene en el navegador del usuario.

Ejemplo de Código Vulnerable:

<!-- Código vulnerable a CSRF -->
<form action="update_profile.php" method="POST">
    <input type="text" name="email" value="[email protected]">
    <input type="submit" value="Actualizar">
</form>

Explicación: Un atacante puede engañar al usuario para que envíe esta solicitud sin su conocimiento.

Mitigación:

  • Utilizar tokens CSRF en formularios y validar estos tokens en el servidor.
  • Verificar la referencia de la solicitud.

Ejemplo Seguro:

<?php
// Generar un token CSRF
$csrf_token = bin2hex(random_bytes(32));
$_SESSION['csrf_token'] = $csrf_token;
?>
<form action="update_profile.php" method="POST">
    <input type="hidden" name="csrf_token" value="<?php echo $csrf_token; ?>">
    <input type="text" name="email" value="[email protected]">
    <input type="submit" value="Actualizar">
</form>

File Inclusion

Descripción: La inclusión de archivos ocurre cuando un atacante puede incluir archivos locales o remotos en la aplicación, lo que puede llevar a la ejecución de código arbitrario.

Ejemplo de Código Vulnerable:

<?php
// Código vulnerable a inclusión de archivos
$page = $_GET['page'];
include($page . ".php");
?>

Explicación: Si un atacante envía ?page=../../etc/passwd, puede incluir archivos sensibles del sistema.

Mitigación:

  • Validar y sanitizar las entradas del usuario.
  • Utilizar listas blancas para permitir solo archivos específicos.

Ejemplo Seguro:

<?php
// Código seguro utilizando listas blancas
$allowed_pages = ['home', 'about', 'contact'];
$page = $_GET['page'];
if (in_array($page, $allowed_pages)) {
    include($page . ".php");
} else {
    echo "Página no permitida.";
}
?>

  1. Herramientas para la Explotación de Vulnerabilidades Web

  • Burp Suite: Una herramienta integral para pruebas de seguridad web.
  • OWASP ZAP: Un proxy de interceptación y análisis de seguridad.
  • SQLMap: Una herramienta automatizada para la detección y explotación de inyecciones SQL.
  • XSSer: Una herramienta para detectar y explotar vulnerabilidades XSS.

  1. Ejemplos Prácticos

Ejemplo 1: Explotación de Inyección SQL

Paso 1: Identificar un formulario de inicio de sesión vulnerable.

Paso 2: Probar con entradas maliciosas como ' OR '1'='1.

Paso 3: Utilizar herramientas como SQLMap para automatizar la explotación.

Ejemplo 2: Explotación de XSS

Paso 1: Identificar un campo de entrada que refleje la entrada del usuario.

Paso 2: Inyectar un script malicioso como <script>alert('XSS');</script>.

Paso 3: Observar la ejecución del script en el navegador del usuario.

  1. Ejercicios y Soluciones

Ejercicio 1: Identificar y Explotar una Inyección SQL

Instrucciones:

  1. Encuentra un formulario de inicio de sesión vulnerable en una aplicación de prueba.
  2. Intenta iniciar sesión utilizando ' OR '1'='1.
  3. Documenta tus hallazgos y explica cómo se podría mitigar esta vulnerabilidad.

Solución:

  1. Identificación: El formulario de inicio de sesión permite la entrada de usuario sin validación adecuada.
  2. Explotación: Utilizando ' OR '1'='1, se puede omitir la autenticación.
  3. Mitigación: Utilizar consultas preparadas y declaraciones parametrizadas para evitar la inyección SQL.

Ejercicio 2: Identificar y Explorar una Vulnerabilidad XSS

Instrucciones:

  1. Encuentra un campo de entrada en una aplicación de prueba que refleje la entrada del usuario.
  2. Inyecta un script malicioso como <script>alert('XSS');</script>.
  3. Documenta tus hallazgos y explica cómo se podría mitigar esta vulnerabilidad.

Solución:

  1. Identificación: El campo de entrada refleja la entrada del usuario sin escape adecuado.
  2. Explotación: Inyectando <script>alert('XSS');</script>, el script se ejecuta en el navegador del usuario.
  3. Mitigación: Escapar y sanitizar todas las entradas del usuario antes de mostrarlas.

  1. Resumen y Conclusión

En este módulo, hemos explorado algunas de las vulnerabilidades web más comunes y cómo explotarlas. También hemos aprendido sobre las mejores prácticas para mitigar estas vulnerabilidades y proteger nuestras aplicaciones web. Es crucial que los pentesters comprendan estas técnicas para identificar y resolver problemas de seguridad antes de que los atacantes puedan explotarlos.

Próximos Pasos:

En el siguiente módulo, nos adentraremos en la explotación de vulnerabilidades de red, donde aprenderemos a identificar y explotar debilidades en la infraestructura de red.

© Copyright 2024. Todos los derechos reservados