SQL INJECTION (SQLi) | Vulnerabilidad Web

SQL INJECTION

sql injection

¿Qué es un SQL INJECTION?

La vulnerabilidad SQL INJECTION o SQLi es una de las vulnerabilidades más comunes en aplicaciones web. Entrañado en la categoría de vulnerabilidades de Inyección de código. Antes de introducirnos a SQLi es importante saber que es una vulnerabilidad de Inyección de comandos. Las vulnerabilidades de inyección se encuentran comúnmente en:
  • Consultas SQL
  • Consultas NoSQL
  • LDAP
  • XPath
  • Comandos del SO
  • Analizadores XML
  • Encabezados SMTP
  • Lenguajes de expresión
  • Parámetros
  • Consultas ORM.
Estas vulnerabilidades tienen origen principalmente cuando:
  • Los datos ingresados por el usuario no son validos
  • Los datos ingresados por el usuario no son filtrados
  • Cuando invocan consultas dinámicas o no parametrizadas, sin codificar los parámetros de forma acorde al contexto.
  • Se utilizan datos dañinos dentro de los parámetros de búsqueda en consultas Object-Relational Mapping (ORM), para extraer registros adicionales sensibles.
El principal error que provoca esta vulnerabilidad es cuando los datos que ingresan a la aplicación no son validados.

sql injection portswigger
Infografía de Portswigger


La vulnerabilidad SQLi consiste en la "inyección" de una consulta SQL, hablamos de interferir en las consultas que una aplicación realiza a una base de datos, esta vulnerabilidad de permite a un atacante crear un exploit con el cual puede leer, extraer y modificar los datos almacenados en una base de datos sin ningún problema. En casos extraordinarios los atacantes han logrado hacer:
  • Ejecución de comandos a nivel administrador
  • Aumento de privilegios
  • Comprometer el servidor y tecnología Backend

Tipos de SQL INJECTION

SQLi en banda | In-band SQLi (SQLi)
Es la inyeccion común y la mas fácil de explotar. La inyección de SQL en banda se produce cuando un atacante puede utilizar el mismo canal de comunicación para iniciar el ataque y recopilar resultados. Los dos tipos más comunes de inyección de SQL en banda son SQLi basado en errores y SQLi basado en Union.

SQLi basado en errores | Error-based SQLi
Es una técnica de inyección de SQL en banda que se basa en los mensajes de error generados por el servidor de base de datos para obtener información sobre la estructura de la base de datos. En algunos casos, la inyección SQL basada en errores por sí sola es suficiente para que un atacante enumere una base de datos completa.

SQLi basado en la Unión | Union-based SQLi
Es una técnica de inyección de SQL en banda que aprovecha el operador UNION SQL para combinar los resultados de dos o más instrucciones SELECT en un único resultado que, a continuación, se devuelve como parte de la respuesta HTTP.

SQLi inferencial | Inferential SQLi (Blind SQLi)
A diferencia de SQLi en banda, puede tomar más tiempo para poder ser explotar, sin embargo, es tan peligroso como cualquier otra forma de inyección SQL
En un ataque SQLi inferencial, no se transfieren datos a través de la aplicación web y el atacante no sería capaz de ver el resultado de un ataque en banda (por lo que tales ataques se conocen comúnmente como "ataques de inyección SQL a ciegas").

En su lugar, un atacante puede reconstruir la estructura de la base de datos mediante el envío de cargas (Payloads) observando la respuesta de la aplicación web y el comportamiento resultante del servidor de base de datos. Los dos tipos de inyección SQL inferencial son SQLi basado en valores ciegos SQLi y SQLi basado en tiempo ciego.

SqLi ciego basado en booleanos | Boolean-based (content-based) Blind SQLi
Inyección de SQL basada en booleanos es una técnica de inyección de SQL inferencial que se basa en el envío de una consulta SQL a la base de datos que obliga a la aplicación a devolver un resultado diferente en función de si la consulta devuelve un resultado TRUE o FALSE. 

Dependiendo del resultado, el contenido dentro de la respuesta HTTP cambiará o seguirá siendo el mismo. Esto permite a un atacante deducir si el payload utilizado devolvió true o false, aunque no se devuelve ningún dato de la base de datos.

SQLi a ciegas basado en el tiempo | Time-based Blind SQLi
Es una técnica de inyección de SQL inferencial que se basa en el envío de una consulta SQL a la base de datos que obliga a la base de datos a esperar una cantidad especificada de tiempo (en segundos) antes de responder. El tiempo de respuesta indicará al atacante si el resultado de la consulta es TRUE o FALSE. dependiendo del resultado, una respuesta HTTP se devolverá con un retraso, o se devolverá inmediatamente. Esto permite a un atacante deducir si la carga (payload) utilizada devolvió true o false, aunque no se devuelve ningún dato de la base de datos.

SQLi fuera de banda | Out-of-band SQLi
La inyección de SQL fuera de banda no es muy común, principalmente porque depende de las características que se habilitan en el servidor de base de datos que usa la aplicación web. La inyección de SQL fuera de banda se produce cuando un atacante no puede usar el mismo canal para iniciar el ataque y recopilar resultados. Las técnicas fuera de banda ofrecen a un atacante una alternativa a las técnicas basadas en el tiempo inferenciales, especialmente si las respuestas del servidor no son muy estables (haciendo que un ataque basado en el tiempo inferencial no sea confiable).

Inyección sql basada en voz | Voice Based Sql Injection
Es un método de ataque de inyección sql que se puede aplicar en aplicaciones que proporcionan acceso a bases de datos con comando de voz. Un atacante podría extraer información de la base de datos enviando consultas sql con sonido.

Impacto de SQLi | Modelado de Amenaza

El impacto de una vulnerabilidad SQLi explotada exitosamente por un atacante puede ser muy perjudicial para la empresa o gobierno afectado.
  1. Filtración de información sensible.
  2. Perdida, corrupción o alteración de la información almacenada en la base de datos.
    1. Suplantación de Identidad
    2. Anulación de transacciones o saldos
  3. Perdida de acceso a la base de datos.
    1. Denegación de servicio
  4. Impacto al negocio.
    1. Perdida de clientes
    2. Perdida de Credibilidad

Herramientas de Explotación de SQL INJECTION

Herramientas empleadas en la explotación y detección de vulnerabilidades SQLi
  • SQLMap - Herramienta automática de detección y explotación de SQL (recomendada)
  • jSQL Injection - Herramienta Java para la inyección automática de bases de datos SQL
  • BBQSQL - Una herramienta de explotación de inyección SQL ciega
  • NoSQLMap - Pwnage de base de datos NoSQL automatizada
  • Whitewidow - Escáner de vulnerabilidades SQL
  • DSSS - Recomendado
  • explo - Formato de prueba de vulnerabilidad web legible por humanos y máquinas
  • Blind-Sql-Bitshifting - Inyección SQL ciega a través de Bitshifting
  • Leviathan - Kit de herramientas de auditoría masiva de amplia gama (Recomendada)
  • Blisqy - Explotar la inyección ciega-SQL basada en el tiempo en encabezados HTTP (MySQL/MariaDB)

Payloads SQLi

Notas Finales sobre SQLi

  1. Las vulnerabilidades son muy comunes en aplicaciones/scripts desarrollados en PHP y ASP.
  2. La gravedad de una vulnerabilidad SQLi depende en casi su totalidad de la experiencia y creatividad del atacante.
  3. Las vulnerabilidades de inyeccion, en especial SQLi son consideradas por algunos expertos como de alto impacto. Sin embargo esto depende del alcance y experiencia del atacante.
  4. Es recomendable que la persona/usuario la cual esta interesada en aprender sobre la explotación de la vulnerabilidad SQLi tenga conocimientos previos sobre: SQL, PHP

Publicar un comentario

0 Comentarios

Slider Parnert

Subscribe Text

¿Quieres estar al día con noticias?