El propósito de este laboratorio es enseñar cómo funciona la vulnerabilidad SQL Injection (SQLi) a través de un ejemplo práctico en un entorno local utilizando MariaDB, Apache y PHP. A través de varios métodos, como el Error Based SQLi, Union Based SQLi y Time-Based SQLi, aprenderemos a identificar y explotar esta vulnerabilidad para obtener información confidencial de una base de datos.
Para comenzar con este laboratorio, debemos instalar los siguientes paquetes en una máquina con Ubuntu/Debian.
sudo apt install mariadb-server apache2 php-mysql
Una vez instalados los paquetes, procedemos a iniciar los servicios de Apache y MySQL:
sudo service apache2 start
sudo service mysql start
Verificamos que el servidor de Apache esté escuchando en el puerto 80 con el siguiente comando:
lsof -i:80
El siguiente código PHP simula una consulta a una base de datos usando el parámetro id pasado por GET. Este es un ejemplo clásico de SQL Injection debido a que la entrada no está saneada, permitiendo que un atacante ejecute código SQL malicioso.
<?php
$server = "localhost";
$username = "moltengama";
$password = "louise";
$database = "hack4u";
// Conexión a la base de datos
$conn = new mysqli($server, $username, $password, $database);
$id = mysqli_real_escape_string($conn, $_GET['id']);
# echo "El comando esjecutado es '$id'";
#echo "______________________________________";
$data = mysqli_query($conn, "select nombre from users where id = $id");
$response = mysqli_fetch_array($data);
if (!isset($response['nombre'])){
http_response_code(404);
}
?>
Explicación del código:
users basándose en el parámetro id que se pasa a través de la URL.