Hacking ético: inyección SQL

La inyección SQL es un conjunto de comandos SQL que se colocan en una cadena de URL o en estructuras de datos para recuperar una respuesta que queremos de las bases de datos que están conectadas con las aplicaciones web. Este tipo de ataques generalmente tiene lugar en páginas web desarrolladas con PHP o ASP.NET.

Se puede realizar un ataque de inyección SQL con las siguientes intenciones:

  • Para volcar toda la base de datos de un sistema,

  • Para modificar el contenido de las bases de datos, o

  • Realizar diferentes consultas que no están permitidas por la aplicación.

Este tipo de ataque funciona cuando las aplicaciones no validan las entradas correctamente, antes de pasarlas a una declaración SQL. Las inyecciones normalmente se colocan en barras de direcciones, campos de búsqueda o campos de datos.

La forma más fácil de detectar si una aplicación web es vulnerable a un ataque de inyección SQL es usar el carácter "'" en una cadena y ver si obtiene algún error.

Ejemplo 1

Intentemos comprender este concepto con algunos ejemplos. Como se muestra en la siguiente captura de pantalla, hemos utilizado un carácter "'" en el campo Nombre.

Ahora, haga clic en el Loginbotón. Debería producir la siguiente respuesta:

Significa que el campo "Nombre" es vulnerable a la inyección SQL.

Ejemplo 2

Tenemos esta URL - http://10.10.10.101/mutillidae/index.php?page=site-footer-xssdiscussion.php

Y queremos probar la variable “página” pero observe cómo hemos inyectado un carácter "'" en la cadena URL.

Cuando presionamos Enter, producirá el siguiente resultado con errores.

SQLMAP

SQLMAP es una de las mejores herramientas disponibles para detectar inyecciones de SQL. Se puede descargar desdehttp://sqlmap.org/

Viene precompilado en la distribución Kali. Puede localizarlo en Aplicaciones → Evaluación de base de datos → Sqlmap.

Después de abrir SQLMAP, vamos a la página en la que tenemos la inyección SQL y luego obtenemos la solicitud de encabezado. Desde el encabezado, ejecutamos el siguiente comando en SQL:

./sqlmap.py --headers="User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:25.0) 
Gecko/20100101 Firefox/25.0" --cookie="security=low;
PHPSESSID=oikbs8qcic2omf5gnd09kihsm7" -u '
http://localhost/dvwa/vulnerabilities/sqli_blind/?id=1&Submit=Submit#' -
level=5 risk=3 -p id --suffix="-BR" -v3

El SQLMAP probará todas las variables y el resultado mostrará que el parámetro "id" es vulnerable, como se muestra en la siguiente captura de pantalla.

SQLNinja

SQLNinja es otra herramienta de inyección SQL que está disponible en la distribución Kali.

Inyección JSQL

JSQL Injection está en Java y realiza inyecciones SQL automatizadas.

Consejos rápidos

Para evitar que su aplicación web sufra ataques de inyección SQL, debe tener en cuenta los siguientes puntos:

  • No se debe permitir que la entrada de usuario sin marcar a la base de datos pase a través de la GUI de la aplicación.

  • Cada variable que pasa a la aplicación debe desinfectarse y validarse.

  • Se debe citar la entrada del usuario que se pasa a la base de datos.