0% encontró este documento útil (0 votos)
34 vistas77 páginas

4.3 Inyection SQL

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
34 vistas77 páginas

4.3 Inyection SQL

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

VULNERABILIDADES

WEB
Inyección SQL

2024
Introducción a las bases de datos
Bases de datos relacionales

Uno de los sistemas más habituales para almacenar información


• Información almacenada en tablas
• Las columnas tienen un tipo. Describe los objetos.
• Cada fila es un registro. Información de 1 objeto.

NetLab
Bases de datos relacionales

Uno de los sistemas más habituales para almacenar información


• Información almacenada en tablas
• Las columnas tienen un tipo. Describe los objetos.
• Cada fila es un registro. Información de 1 objeto.

Una tabla cualquiera

id nombre email Ciudad Fan Estadio Ciudad


1 Miguel [email protected] Vigo Celta de Vigo Balaidos Vigo
2 Raúl [email protected] Moaña Celta de Vigo Balaidos Vigo
3 Esteban [email protected] Vigo Racing de Ferrol A Malata Ferrol

NetLab
Bases de datos relacionales

Uno de los sistemas más habituales para almacenar información


• Información almacenada en tablas
• Las columnas tienen un tipo. Describe los objetos.
• Cada fila es un registro. Información de 1 objeto.
• Lenguaje de manejo SQL (Structured Query Language). Estandarizado, aunque
con pequeñas variaciones.

Una tabla cualquiera

id nombre email Ciudad Fan Estadio Ciudad


1 Miguel [email protected] Vigo Celta de Vigo Balaidos Vigo
2 Raúl [email protected] Moaña Celta de Vigo Balaidos Vigo
3 Esteban [email protected] Vigo Racing de Ferrol A Malata Ferrol

NetLab
Relaciones

La información se almacena normalizada. (Sin redudancias.) Permite asegurar la


consistencia de los datos.
La misma información
id Nombre
id Nombre CiudadId id Equipo CampoId
1 Vigo
1 Balaídos 1 1 Celta de Vigo 1
2 Moaña
2 A Malata 3 2 Racing de Ferrol 2
3 Ferrol

id Nombre Email CiudadId PersonaId EquipoId


1 Miguel [email protected] 1 1 1
2 Raúl raú[email protected] 2 2 1
3 Esteban [email protected] 1 3 2

NetLab
Alternativas

Aunque las bases de datos son las más comunes, en los últimos años han
aparecido alternativas:

Bases de datos NoSQL Not Only SQL. Para el manejo de datos no estructurados
y/o entornos de alta carga.
Bases de datos de grafos Para la consulta y almacenamiento de relaciones
especialmente complejas. Lenguaje GraphQL.
Bases de datos documentales Para almacenar información de documentos XML,
JSON…
Sistemas de caché Capa intermedia entre la base de datos y la aplicación.
Normalmente almacenan pares clave-valor de forma muy eficiente.
Ejemplos: Redis, memchached.

NetLab
Bases de datos populares

• MySQL y variantes: MariaDB y Percona Server for MySQL.


Rendimiento ofrece un alto rendimiento y es capaz de manejar grandes
volúmenes de datos de forma eficiente.
Facilidad de uso es fácil de instalar, configurar y utilizar, lo que la convierte en
una opción popular tanto para desarrolladores como para
administradores de bases de datos.
Comunidad activa cuenta con una gran comunidad de usuarios que
proporciona soporte, recursos y actualizaciones constantes.

NetLab
Bases de datos populares

• Oracle: Muy popular en entornos empresariales.


Escalabilidad ofrece una excelente escalabilidad y puede manejar grandes
volúmenes de datos y cargas de trabajo exigentes.
Seguridad cuenta con robustas medidas de seguridad para proteger los
datos, incluyendo controles de acceso, cifrado y auditoría.
Funcionalidades avanzadas ofrece una amplia gama de funcionalidades
avanzadas, como soporte para datos geoespaciales y
capacidades de análisis avanzadas.

NetLab
Bases de datos populares

• Microsoft SQL Server: Muy popular en entornos empresariales.


Integración con el ecosistema de Microsoft ofrece una integración sólida con
otras tecnologías de Microsoft, como el lenguaje de programación
.NET y herramientas de desarrollo como Visual Studio.
Escalabilidad es capaz de manejar grandes cargas de trabajo y proporciona
opciones de escalabilidad para adaptarse a las necesidades
cambiantes.
Herramientas y soporte Microsoft ofrece una amplia gama de herramientas y
recursos, así como soporte técnico para garantizar un uso
eficiente y confiable.

NetLab
Bases de datos populares

• PostgreSQL: Base de datos avanzada de código abierto.


Confiabilidad y estabilidad es conocida por su alta confiabilidad y estabilidad,
lo que la convierte en una opción popular para aplicaciones
críticas.
Extensibilidad permite agregar nuevas funcionalidades a través de
extensiones y es altamente personalizable según las necesidades
específicas del proyecto.
Comunidad activa cuenta con una comunidad de desarrolladores y usuarios
dedicados que contribuyen al desarrollo y soporte continuo.

NetLab
Preparación del entorno

Base de datos de prueba en Kali

NetLab
Esquema de pruebas

NetLab
Estructura básica de una consulta SQL

Una consulta típica tiene la forma básica:

select a,b,c,d from r1,r2,r3 where P

donde

• a, b, c, d…son atributos
• r1, r2, r3…son relaciones (tablas)
• y P es un predicado (condiciones)

El resultado de la consulta es una nueva relación.

NetLab
Ejemplos

• Lista todos los nombres de pila de los pilotos:

NetLab
Ejemplos

• Lista todos los nombres de pila de los pilotos:


select forename from drivers

NetLab
Ejemplos

• Lista todos los nombres de pila de los pilotos:


select forename from drivers
• Lista todos los nombres completos de los pilotos y su código:

NetLab
Ejemplos

• Lista todos los nombres de pila de los pilotos:


select forename from drivers
• Lista todos los nombres completos de los pilotos y su código:
select forename, surname, code from drivers

NetLab
Ejemplos

• Lista todos los nombres de pila de los pilotos:


select forename from drivers
• Lista todos los nombres completos de los pilotos y su código:
select forename, surname, code from drivers
• Lista todos los campos de los pilotos:

NetLab
Ejemplos

• Lista todos los nombres de pila de los pilotos:


select forename from drivers
• Lista todos los nombres completos de los pilotos y su código:
select forename, surname, code from drivers
• Lista todos los campos de los pilotos:
select * from drivers

NetLab
Más consultas básicas

• Se pueden filtrar duplicados con la clave distinct.

NetLab
Más consultas básicas

• Se pueden filtrar duplicados con la clave distinct.


select nationality from drivers vs.
select DISTINCT nationality from drivers

NetLab
Más consultas básicas

• Se pueden filtrar duplicados con la clave distinct.


select nationality from drivers vs.
select DISTINCT nationality from drivers
• Una consulta puede ser un literal (o varios) sin cláusula from.

NetLab
Más consultas básicas

• Se pueden filtrar duplicados con la clave distinct.


select nationality from drivers vs.
select DISTINCT nationality from drivers
• Una consulta puede ser un literal (o varios) sin cláusula from.
select 1,2+3, 'hola'

NetLab
Más consultas básicas

• Se pueden filtrar duplicados con la clave distinct.


select nationality from drivers vs.
select DISTINCT nationality from drivers
• Una consulta puede ser un literal (o varios) sin cláusula from.
select 1,2+3, 'hola'
• Se puede usar un literal y una cláusula from. En ese caso, la respuesta tendrá
tantas filas como la relación del from.

NetLab
Más consultas básicas

• Se pueden filtrar duplicados con la clave distinct.


select nationality from drivers vs.
select DISTINCT nationality from drivers
• Una consulta puede ser un literal (o varios) sin cláusula from.
select 1,2+3, 'hola'
• Se puede usar un literal y una cláusula from. En ese caso, la respuesta tendrá
tantas filas como la relación del from.
select 1,2+3, 'hola' from drivers

NetLab
El predicado (cláusula where)

La claúsula where especifica las condiciones que debe cumplir el resultado.


Corredores británicos
select * from drivers where nationality='British'

• Puede usarse los operadores lógicos habituales: not, or, and y los de
comparación <, >, <=, >=, <>.
select * from drivers where nationality<>'British'

NetLab
El predicado (cláusula where)

La claúsula where especifica las condiciones que debe cumplir el resultado.


Corredores británicos
select * from drivers where nationality='British'

• Puede usarse los operadores lógicos habituales: not, or, and y los de
comparación <, >, <=, >=, <>.
select * from drivers where nationality<>'British'

Ejercicio
¿Cuántos corredores no británicos hay que hayan nacido antes del año 2000? ¿Y
después?

NetLab
Usando relaciones (la cláusula from)

La cláusula from lista las relaciones de la consulta. Es el producto cartesiano: El


resultado es una relación con todas las combinaciones entre ambas tablas.
Ejemplo

nombre nacimiento
nombre nacimiento id Nacimiento
Miguel 1
Miguel 1 1 1934
Pedro 1
Miguel 1 2 2005
Antonio 2
Pedro 1 1 1934
id Nacimiento Pedro 1 2 2005
Antonio 2 1 1934
1 1934
Antonio 2 2 2005
2 2005

NetLab
Ejercicio

Obtenga las fechas de las carreras


en las que Fernando Alonso ha
ganado.
Consejo: Use as para darle un alias a las tablas. select r.* from drivers
as d, races as r

NetLab
Otros operadores

Operaciones con cadenas


Patrones operador like. % para subcadenas, _ para cualquier caracter.
|| Concatenación
upper, lower A mayúsculas/minúsculas
len Longitud de una cadena

Filtrado de resultados
Ordenación order by campos. Por defecto, ascendente. desc para
descendente.
Límite limit n, para mostrar solo n registros.
Desplazamiento offset n para empezar en el n-ésimo valor.

NetLab
Operadores de conjuntos

Permiten operar con el resultado de 2 consultas:

Union Elementos no duplicados de ambas consultas


Intersect Elementos no duplicados en ambas consultas
Except Elementos de la primera consulta que no están en la segunda

La variante all retiene los duplicados.


Países que tuvieron carreras en 2020, pero no en 2019
select country from races as r, circuits as c where
c.circuitid=r.circuitid and year=2020 except select country from races
as r, circuits as c where c.circuitid=r.circuitid and year=2019;

NetLab
Valores nulos

• null denota valores que no existen o son desconocidos


• El predicado puede ser null para buscar valores que faltan
select * from tareas where fecha_fin is null o is not null
• Comparación y aritmética con null es desconocido: 5 < null es unknown
• Booleanos: true and unknown = unknown, false and unknown = false, true or
unknown = true, false or unknown = unknown.

NetLab
Agregación

Operadores que operan sobre un conjunto y obtienen un valor:

avg Valor medio


max Valor máximo
min Valor mínimo
sum Suma de los valores
count Número de elementos

Número de victorias de Fernando Alonso


select count(*) from results as res, drivers as d where d.driverid
= res.driverid and res.position=1 and d.code='ALO';

NetLab
Group by

Permite agregar los resultados por alguna relación.


Número de victorias de cada piloto
select d.forename,d.surname,count(*) from results as res, drivers as d where
d.driverid = res.driverid and res.position=1 group by d.driverid;

Añadimos filtrado

NetLab
Group by

Permite agregar los resultados por alguna relación.


Número de victorias de cada piloto
select d.forename,d.surname,count(*) from results as res, drivers as d where
d.driverid = res.driverid and res.position=1 group by d.driverid;

Añadimos filtrado
Número de victorias de cada piloto con más de 15 victorias ordenados
select d.forename,d.surname,count(*) as vic from results as res, drivers as d where
d.driverid = res.driverid and res.position=1 group by d.driverid having count(*)>15
order by vic desc;

NetLab
Consultas anidadas

SQL permite anidar consultas:

Como atributo cualquier atributo puede sustituirse por una query que devuelva un
único valor.
select (select 1+1),* from drivers
Como relación del from cualquier relación puede ser el resultado de otra query.
select avg(temp.victories) from (select count(*) as
victories from results as res, drivers as d where
d.driverid = res.driverid and res.position=1 group
by d.driverid) as temp
En el predicado como atributo operación subquery. La operación es una operación
de pertenencia a conjunto (in, some, all…)

NetLab
Borrando datos

Tablas Se puede borrar una tabla con drop nombretabla. Normalmente no


tendremos permiso para eso.
Filas Podemos borrar filtas de una relación con:
delete from tabla where...

NetLab
Inserción y modificación de datos

Inserción
• insert into tabla (columnas) values (valores)
• insert into tabla values (valores)
• insert into tabla select…

NetLab
Inserción y modificación de datos

Inserción
• insert into tabla (columnas) values (valores)
• insert into tabla values (valores)
• insert into tabla select…

Modificación
update tabla set columna=X where condición.
Donde la condición es opcional y X es:
• Un valor constante
• Una subquery escalar (un único valor)
• Una operación simple con su valor: columna=columna+1

NetLab
Inyección SQL
Ataques por inyección

Un atacante proporciona entradas no-confiables a un programa. Estas entradas


son procesadas alterando la ejecución del mismo.
Inyección en PHP

<?php
$ c o l o r = 'blue' ;
i f ( i s s e t ( $_GET [ 'color' ] ) )
$ c o l o r = $_GET [ 'color' ] ;
r e q u i r e ( $ c o l o r . '.php' ) ;

color puede ser una url...

NetLab
Clasificación

Los más comunes son SQLi y XSS, pero también tenemos:

Inyección de código en el lenguage de la aplicación. Puede realizar acciones con


los permisos del usuario que ejecuta la aplicación.
CRLF Puede emplearse para romper las cabeceras HTTP y escribir
contenido arbitrario en la respuesta.
Inyección LDAP Para ejecutar comandos LDAP arbitrarios y leer o modificar el
árbol LDAP.
Comandos del SO A través de alguna vulnerabilidad en la llamada a algún servicio
interno.
XPath Si la aplicación hace consultas XPath, se puede usar para acceso no
autorizado a datos.

NetLab
Debilidades

Aplicaciones vulnerables si:

• No validan, filtran ni higienizan los datos proporcionados por los usuarios.


• No escapan consultas dinámicas. Es decir, no anulan los caracteres de control
que puedan tener los datos.
• Usan datos externos como parámetros para consultas.
• Concatenan o procesan directamente datos externos, tanto proporcionados
directamente como almacenados.

NetLab
SQLi: Inyección de SQL

Inserción de una consulta SQL a través de los datos de entrada de la aplicación.

• Para leer información sensible de la base de datos


• Modificar los contenidos de la base de datos
• Interrumpir el servicio
• Ejecutar comandos en el sistema operativo con las credenciales del software
de gestión de la base de datos

Riesgo (según OWASP)


Es muy común en aplicaciones desarrolladas en PHP y ASP por la existencia de
interfaces de programación antiguos.
Otros lenguajes posteriores son menos proclives a ataques SQLi sencillos.

NetLab
¿Dónde afecta una SQLi?

Normalmente, los datos controlados por el atacante aparecen en el predicado de


una consulta (SELECT ... WHERE).
Otros lugares posibles
UPDATE En los valores o en la cláusula WHERE
INSERT En los valores
SELECT En el nombre de tablas y o columnas
SELECT En un ORDER BY

NetLab
Buscando SQLi (a mano)

Podemos buscar una SQLi modificando los valores proporcionados a una


aplicación web:

• Añadiendo una comilla simple (') y viendo si se produce un error.

Razón
Las comillas se usan para delimitar cadenas en la consulta. Una comilla suelta
provoca que no estén balanceadas.
select * from tabla where usuario='yomismo''

NetLab
Buscando SQLi (a mano)

Podemos buscar una SQLi modificando los valores proporcionados a una


aplicación web:

• Añadiendo una comilla simple (') y viendo si se produce un error.


• Cambiando un valor por una combinación que produzca el valor
indirectamente y comprobar si no se produce un error.

Razón
select * from tabla where nacimiento=1900+50

NetLab
Buscando SQLi (a mano)

Podemos buscar una SQLi modificando los valores proporcionados a una


aplicación web:

• Añadiendo una comilla simple (') y viendo si se produce un error.


• Cambiando un valor por una combinación que produzca el valor
indirectamente y comprobar si no se produce un error.
• Añadiendo una condición booleana (OR 1==1) y viendo si cambia la respuesta.

Razón
select count(*) from tabla where nacimiento=1950 OR 1==1
Esta prueba es peligrosa si puede acabar efectando a un DELETE, UPDATE…
Esto puede ocurrir en un segundo sistema, por ejemplo, un registro de consultas.

NetLab
Buscando SQLi (a mano)

Podemos buscar una SQLi modificando los valores proporcionados a una


aplicación web:

• Añadiendo una comilla simple (') y viendo si se produce un error.


• Cambiando un valor por una combinación que produzca el valor
indirectamente y comprobar si no se produce un error.
• Añadiendo una condición booleana (OR 1==1) y viendo si cambia la respuesta.
• Enviando consultas que provoquen efectos no visibles
Razón
Si la consulta no provoca cambios en la información mostrada, podemos inferir si
se ha ejecutado midiendo tiempos o viendo si se ha accedido a algún recurso
externo bajo nuestro control.

NetLab
Un ejemplo sencillo

Suponga una aplicación que…


genera la consulta:
select * from alumnos where aprobado=VALOR
donde VALOR es controlado por el atacante.
¿Puede hacer que liste todos los alumnos?

NetLab
Un ejemplo sencillo

Suponga una aplicación que…


genera la consulta:
select * from alumnos where aprobado=VALOR
donde VALOR es controlado por el atacante.
¿Puede hacer que liste todos los alumnos?
VALOR=true or aprobado=false

NetLab
Un ejemplo sencillo

Suponga una aplicación que…


select * from alumnos where nombre='VALOR'
donde VALOR es controlado por el atacante.
¿Puede hacer que liste todos los alumnos?

NetLab
Un ejemplo sencillo

Suponga una aplicación que…


select * from alumnos where nombre='VALOR'
donde VALOR es controlado por el atacante.
¿Puede hacer que liste todos los alumnos?
VALOR=pepe' OR 5>1

NetLab
Un ejemplo sencillo

Suponga una aplicación que…


select * from alumnos where nombre='VALOR'
donde VALOR es controlado por el atacante.
¿Puede hacer que liste todos los alumnos?
VALOR=pepe' OR 5>1
Falla: select * from alumnos where nombre='pepe' OR 5>1'

NetLab
Un ejemplo sencillo

Suponga una aplicación que…


select * from alumnos where nombre='VALOR'
donde VALOR es controlado por el atacante.
¿Puede hacer que liste todos los alumnos?
VALOR=pepe' OR 5>1
Falla: select * from alumnos where nombre='pepe' OR 5>1'
Solución: Añadimos una cadena VALOR=pepe' OR 'a' = 'a

NetLab
Un ejemplo sencillo

Suponga una aplicación que…


select * from alumnos where nombre='VALOR' AND year=2023

NetLab
Un ejemplo sencillo

Suponga una aplicación que…


select * from alumnos where nombre='VALOR' AND year=2023
Solución: Cerramos con un comentario (-- )

NetLab
Un ejemplo sencillo

Suponga una aplicación que…


select * from alumnos where nombre='VALOR' AND year=2023
Solución: Cerramos con un comentario (-- )
VALOR=pepe' OR 5 > 2--
select * from alumnos where nombre='pepe' OR 5 > 2 -- AND year=2023

Sintaxis comentarios
Oracle Microsoft PostgreSQL MySQL
--comentario --comentario --comentario -- comentario
/*comentario*/ /*comentario*/ /*comentario*/
#comentario #comentario

NetLab
Un ejemplo sencillo

Suponga una aplicación que…


select * from alumnos where nombre='VALOR' AND year=2023
Solución: Cerramos con un comentario (-- )
VALOR=pepe' OR 5 > 2--
select * from alumnos where nombre='pepe' OR 5 > 2 -- AND year=2023

Su turno
Resuelva el escenario en
https://portswigger.net/web-security/sql-injection/lab-retrieve-hidden-data

NetLab
Añadiendo información: UNION

La cláusula UNION permite ejecutar SELECTS adicionales e incluir los resultados en


la respuesta.
Condiciones
• El número de campos de la nueva consulta debe ser el mismo que la primera
• Los tipos de los campos deben coincidir

Ejemplos
select 1,2 union select 3,4,5 No es correcto
select 1,2 union select 3,4 Es correcto
select 1,2 union select 3,'hola' No es correcto
select 1,2 union select 3,null ¿Es correcto?

NetLab
Averiguando el número de columnas

ORDER BY x Se inyecta un ORDER BY núm hasta que de error. El número de


columnas será 1 menos que el primer valor erróneo.
UNION SELECT NULL, NULL, …, NULL Se añade una consulta incrementando el
número de columnas.
El valor NULL es compatible con cualquier tipo de dato.
En el caso de ORACLE, es necesario añadir un FROM dual.

Una vez conocemos el número de columnas, buscamos una del tipo adecuado
cambiando un NULL por un valor constante del tipo requerido.
Buscando un tipo cadena
union select NULL, 'a', NULL, NULL
La posición de 'a' debe ir cambiando hasta encontrar la posición adecuada.

NetLab
Identificando la base de datos

Información de la versión
Oracle Microsoft PostgreSQL MySQL
SELECT banner FROM v$version SELECT @@version SELECT version() SELECT @@version
SELECT version FROM v$instance

Esquema de la base de datos


Oracle Microsoft PostgreSQL MySQL
SELECT * from all_tables SELECT * from information_schema.tables
SELECT * from all_tab_columns SELECT * from information_schema.columns

NetLab
Ejercicio

DVWA: SQLi (low)


1. Comprobar si es vulnerable

NetLab
Ejercicio

DVWA: SQLi (low)


1. Comprobar si es vulnerable
2. ¿Cuántos campos devuelve la consulta?

NetLab
Ejercicio

DVWA: SQLi (low)


1. Comprobar si es vulnerable
2. ¿Cuántos campos devuelve la consulta?
3. ¿De qué tipos?

NetLab
Ejercicio

DVWA: SQLi (low)


1. Comprobar si es vulnerable
2. ¿Cuántos campos devuelve la consulta?
3. ¿De qué tipos?
4. ¿Qué base de datos se está usando?

NetLab
Ejercicio

DVWA: SQLi (low)


1. Comprobar si es vulnerable
2. ¿Cuántos campos devuelve la consulta?
3. ¿De qué tipos?
4. ¿Qué base de datos se está usando?
5. ¿Qué tablas tiene la base de datos?

NetLab
Ejercicio

DVWA: SQLi (low)


1. Comprobar si es vulnerable
2. ¿Cuántos campos devuelve la consulta?
3. ¿De qué tipos?
4. ¿Qué base de datos se está usando?
5. ¿Qué tablas tiene la base de datos?
6. ¿Qué columnas tiene la base de datos de usuarios?

NetLab
Ejercicio

DVWA: SQLi (low)


1. Comprobar si es vulnerable
2. ¿Cuántos campos devuelve la consulta?
3. ¿De qué tipos?
4. ¿Qué base de datos se está usando?
5. ¿Qué tablas tiene la base de datos?
6. ¿Qué columnas tiene la base de datos de usuarios?
7. Obtención de usuarios y hashes contraseñas

NetLab
SQLi a tientas

No todas las consultas realizadas con datos externos aparecen directamente en la


respuesta.
• Recuperar las preferencias de un usuario (idioma, tema…)
• Operaciones sobre registros de logs
• Estadísticos sobre los datos
• …
Tipos
• Algunas de estas operaciones sí afectan al resultado. Podemos inferir
información viéndolo. (A tientas)
Cookie con nombre usuario
select idioma from users where user=cookie_usuario

• Otras no afectan al resultado (a ciegas) NetLab


Técnicas principales

Respuestas condicionales Añadir condiciones o subconsultas para extraer más


información:
Cookie con nombre de usuario
Suponga que la página se muestra en inglés si el usuario es desconocido, pero en
castellano si es “Alfredo”.
select lang from users where usuario='Alfredo' and
substring((select passwd from users where uname = 'admin'), 1, 1) = 'a'

NetLab
Técnicas principales

Respuestas condicionales Añadir condiciones o subconsultas para extraer más


información:
Forzando errores Si la consulta produce un error en el motor de base de datos,
podemos ver el error en la salida o quizá obtener un 500 como
respuesta.
Cookie con nombre de usuario
La misma situación que antes, pero la consulta no se usa para cambiar el
contenido.
Podemos añadir algo del estilo AND (SELECT CASE WHEN (condición) THEN
1/0 ELSE 1 END)=1

NetLab
Técnicas principales

Respuestas condicionales Añadir condiciones o subconsultas para extraer más


información:
Forzando errores Si la consulta produce un error en el motor de base de datos,
podemos ver el error en la salida o quizá obtener un 500 como
respuesta.
Efectos secundarios Normalmente una consulta fuera de banda (DNS) o un
retardo en la ejecución.
Forzando retardos
Oracle Microsoft PostgreSQL MySQL
dbms_pipe.receive_message(('a'),10) WAITFOR DELAY '0:0:10' SELECT pg_sleep(10) SELECT SLEEP(10)

NetLab
Ejercicio

DVWA: SQLi (low): Obtención de la cadena de versión de la BD


1. ¿Qué información podemos obtener?
2. ¿Podemos forzar un usuario desconocido?
3. Obtenemos la longitud de la cadena de versión
4. Buscamos la primera letra
5. Buscamos toda la cadena

NetLab
Guías

Hemos cubierto lo básico. Varios resúmenes de técnicas:

• https://www.invicti.com/blog/web-security/sql-injection-cheat-sheet/
• https://swisskyrepo.github.io/PayloadsAllTheThings/SQL Injection/
• SQLMap

NetLab
OIS: Servidores y aplicaciones web

Gracias por la atención

NetLab

También podría gustarte