SQL injection UNION attacks Portswigger
https://portswigger.net/web-security/sql-injection/union-attacks
Primer Reto: Determinar el número de columnas necesarias en un ataque UNION de inyección SQL
Este laboratorio contiene una vulnerabilidad de inyección de SQL en el filtro de categoría de producto. Los resultados de la consulta se devuelven en la respuesta de la aplicación, por lo que puede utilizar un ataque UNION para recuperar datos de otras tablas. El primer paso de un ataque de este tipo es determinar el número de columnas que devuelve la consulta. Luego, utilizará esta técnica en laboratorios posteriores para construir el ataque completo.
Para resolver el laboratorio, determine el número de columnas devueltas por la consulta realizando un ataque UNION de inyección SQL que devuelve una fila adicional que contiene valores nulos.
Paro esto el laboratorio da una página web con varias categorías
Ingresar a una categoría e interceptar el trafico
Cómo nos lo dice el reto debemos buscar el número de columnas que nos devuelve esta consulta, para esto basta con enviar una comilla, un union select y enviar NULL, y terminar con doble - hasta que tengamos un resultado de esta manera ‘+UNION+SELECT+NULL,NULL— pero vemos que así nos devuelve un error
Así que vamos incrementando hasta que tangamos una respuesta positiva y vemos que enviando 3 nos devuelve un estado de 200
Y nos dice que resolvimos el reto
Segundo Reto: Encontrar columnas con un tipo de datos útil en un ataque UNION de inyección SQL
Este laboratorio contiene una vulnerabilidad de inyección de SQL en el filtro de categoría de producto. Los resultados de la consulta se devuelven en la respuesta de la aplicación, por lo que puede utilizar un ataque UNION para recuperar datos de otras tablas. Para construir un ataque de este tipo, primero debe determinar el número de columnas devueltas por la consulta. Puede hacer esto usando una técnica que aprendió en un laboratorio anterior . El siguiente paso es identificar una columna que sea compatible con los datos de la cadena.
El laboratorio proporcionará un valor aleatorio que debe hacer que aparezca dentro de los resultados de la consulta. Para resolver el laboratorio, realice un ataque UNION de inyección SQL que devuelva una fila adicional que contenga el valor proporcionado. Esta técnica le ayuda a determinar qué columnas son compatibles con los datos de la cadena
entonces para este reto necesitamos saber cuántas columnas tiene y cuantas son de tipo string
Realizando el ataque, como lo hicimos en el anterior, vemos que esta petición también cuenta con 3 Columnas
Ahora debemos modificar los NULL por un texto para ver si una de ellas o varias son de tipo string como por ejemplo realizarlo de esta manera ‘+UNION+SELECT+’angussMoody’,NULL,NULL — Pero vemos que en la primera nos sale un error
Al realizar el proceso con la segunda y tercera columna vemos que solo tenemos resultados con la segunda
Para resolver el reto, vamos a interceptar la petición y la modificamos tal como lo hicimos con el repetidor, pero con el string que nos da el laboratorio
Le damos continuar y ya vemos que hemos resuelto el laboratorio
Tercer Reto: Usando un ataque UNION de inyección SQL para recuperar datos interesantes
Este laboratorio contiene una vulnerabilidad de inyección de SQL en el filtro de categoría de producto. Los resultados de la consulta se devuelven en la respuesta de la aplicación, por lo que puede utilizar un ataque UNION para recuperar datos de otras tablas. Para construir un ataque de este tipo, debe combinar algunas de las técnicas que aprendió en los laboratorios anteriores.
La base de datos contiene una tabla diferente llamada users
, con columnas llamadas username
y password
.
Para resolver el laboratorio, realice un ataque UNION de inyección SQL que recupere todos los nombres de usuario y contraseñas, y use la información para iniciar sesión como usuarioadministrator.
Lo primero que debemos hacer en este reto es ver cuantas columnas devuelve la petición y cuáles de ellas son de tipo string y vemos que la consulta devuelve 2 Columnas y ambas son de tipo string
Ahora debemos realizar una petición a la base de datos y como ya nos dijo el laboratorio las columnas se llaman username
y password
y la tabla se llama users
hacemos la consulta de esta manera: ‘+UNION+SELECT+username,password+FROM+USERS— y esta nos devuelve los campos de esa tabla
Lo que nos pide el laboratorio es que iniciamos sesión con el usuario administrator.
y como ya tenemos los datos de este pasamos a iniciar sesión con este usuario
y de esta manera ya resolvemos este reto
Cuarto Reto: Recuperar varios valores dentro de una sola columna
Este laboratorio contiene una vulnerabilidad de inyección de SQL en el filtro de categoría de producto. Los resultados de la consulta se devuelven en la respuesta de la aplicación para que pueda utilizar un ataque UNION para recuperar datos de otras tablas.
La base de datos contiene una tabla diferente llamada users
, con columnas llamadas username
y password
.
Para resolver el laboratorio, realice un ataque UNION de inyección SQL que recupere todos los nombres de usuario y contraseñas, y use la información para iniciar sesión como el usuario administrator
Para iniciar con el reto debemos primero saber cuántas columnas tiene y cuántas son de tipo string como en los retos pasados y vemos que nos devuelve 2 columnas y solo una de tipo strting, así que con la descripción del reto, vemos que, debemos traer los datos de username
y password
en esta columna
para este reto nos dan una pista y es una hoja de trucos https://portswigger.net/web-security/sql-injection/cheat-sheet donde podemos ver una parte de concatenación
String concatenation
You can concatenate together multiple strings to make a single string.
Oracle 'foo'||'bar'
Microsoft 'foo'+'bar'
PostgreSQL 'foo'||'bar'
MySQL 'foo' 'bar' [Note the space between the two strings] CONCAT('foo','bar')
Así que podemos pensar de acuerdo a lo que nos dice el reto, que si concatenamos las columnas que necesitamos en la que nos devuelve de tipo string podemos tener los datos username y password de la tabla users y vemos que si realizamos la inyección de esta manera ‘+UNION+SELECT+NULL,username |
password+FROM+USERS— nos devuelve los datos |
pero aunque se distingue los datos no sabemos bien en que parte termina el username y el que parte empieza el password así que vamos a aprovechar la concatenación para realizar un separador entre ambos de esta manera ‘+UNION+SELECT+NULL,username | ’-‘ | password+FROM+USERS— y así podemos leer mejor los datos de respuesta |
para terminar el Reto, nos dice que debemos iniciar sesión como el administrador
Ya de esta manera resolvemos este reto
Y de esta manera terminamos la sesión de Ataques de Inyección SQL por medio de UNION