---
# System prepended metadata

title: SQL Injection

---

# SQL Injection

![](https://i.imgur.com/ItYo3Au.png)



- **Que es SQL Injection?**

SQLi es una vulnerabilidad web que permite a un atacante a interferir con las peticiones que una aplicacion web hace a una base de datos. Generalmente permite a un atacante a ver data que no deberian de ser capaces de ver. Esto puede incluir datos que son de otros usuarios, o de la aplicacion directamente. En muchos casos, un atacante puede modificar o eliminar estos datos, causando cambios persistentes en el comportamiento o en el contenido de la aplicacion.


- **Cual es el impacto de una SQLi exitosa?**

Un ataque SQLi exitoso puede ser que nos de lugar a acceso de datos los cuales no deberiamos de ser capaces de ver, como contraseñas, tarjetas de credito, o datos personales. Muchas data breaches en los ultimos años ha sido por culpa de ataques SQL, subiendo la reputacion del mismo. En algunos casos, un atacante puede obtener una backdoor persistente.

- **Sacando Data Oculta/Payloads Basicos**

Pongamos como ejemplo que tenemos esta url:

```
 https://insecure-website.com/products?category=Gifts 
 ```
 
Como podemos ver, el parametro Gifts, seria vulnerable a SQLi, ya que indexa la busqueda en el servidor, y muestra en la pagina web, lo que se ha solicitado, en este caso, los Gifts. Esta seria la query a la db:

```
 SELECT * FROM products WHERE category = 'Gifts' AND released = 1 
```

Esta seria la query que hace la pagina web a la base de datos. Esta query, pedira todos los detalles, donde la categoria es gift , y released 1, este "parametro" es debido a que utiliza una restriccion, ya que released = 1 se utilizaria para esconder los productos que no han salido a la venta, y released = 0 serian los productos que no han salido a la venta, pero se enseñan.

Podriamos hacer una SQLi tal que:

```
https://insecure-website.com/products?category=Gifts'-- 
```

La quey a la db entonces seria:

```
 SELECT * FROM products WHERE category = 'Gifts'--' AND released = 1 
```

A partir de --, SQL marca que lo siguiente es un comentario, con lo cual, el released se omitiria, y se enseñarian los productos ocultos:

------------------------------

### Lab 1

![](https://i.imgur.com/2rCHLy2.png)



Este laboratorio seria muy sencillo, solamente tendremos que cerrar la query, poner nuestro "payload" y marcar lo demas como comentario, sera tan sencillo como seleccionar cualquier categoria para que se nos seleccione el parametro

`
category=
`

Y inyectariamos nuestro payload: 'or 1 = 1-- -


--------------------------------------------------


### Lab 2


![](https://i.imgur.com/0TksHec.png)


En este laboratorio lo que tendremos que hacer, es escalar a administrador, basicamente, en el login, usariamos el usuario administrator, y de contraseña, la siguiente query:

```
' or 1 = 1-- -
```

----------------------------------------

- **Blind SQLi**

Muchas instancias de las SQLi son vulnerabilidades ciegas. Esto significa que la aplicacion no devuelve los resultados de la query SQL, o los detalles de cualquier error de la db. Las vulnerabilidades ciegas, pueden ser explotadas de todas formas, consiguiendo acceso a datos no autorizados, aunque las tecnicas utilizadas suelen ser mas complejas y dificiles de hacer.

Dependiendo de la naturaleza de la vulnerabilidad y la base de datos que estemos tratando, las siguientes tecnicas pueden llevar a explotar un blind SQLi.

1 - Se puede cambiar la logica de la query para que desencadene a una diferencia detectable en la respuesta de la aplicacion. Esto puede condicionar a usar alguna logica booleana, o condicionalmente desencadenar un error como el divide-by-zero.

2 - Puedes desencadenar un time delay en el procesamiento de la query   (sleep 5) , lo que te permite interferir en el tiempo de respuesta de la base de datos

3 - Puedes desencadenar una interaccion fuera de la banda de red, utilizando tecnicas OAST. Esta tecnica es extremadamente potente y funciona en situaciones donde otras tecnicas no funcionan. Normalmente, puedes directamente exfiltrar datos via out-of-band channel, por ejemplo colocando los datos en el DNS lookup en un dominio que tu controlas.

--------------------------

- Cheatsheet utiles:

http://pentestmonkey.net/cheat-sheet/sql-injection/mssql-sql-injection-cheat-sheet

https://pentestlab.blog/2012/12/24/sql-injection-authentication-bypass-cheat-sheet/

https://ironhackers.es/herramientas/sqli/

https://portswigger.net/web-security/sql-injection/cheat-sheet