La inyección SQL es una técnica de ataque a sistemas de bases de datos que explota vulnerabilidades en las aplicaciones web que interactúan con ellas, permitiendo ejecutar comandos en la BBDD.
Nota: Este tipo de técnicas son muy invasivas, ya que vamos a ganar acceso a distintos sistemas, por lo que no podemos utilizar estas técnicas sin un consentimiento o aprobación por parte del objetivo
Explotación Manual
Vamos a aprender a cómo explotar un SQL Inyection, para conseguir por ejemplo credenciales de acceso a una base de datos. Vamos a seguir una serie de pasos en un entorno controlado BWAPP, que está disponible en la máquina VPLE por el puerto 8080.
Se recomienda la instalación de esta máquina VPLE para practicar todo tipo de ataques web en un entorno controlado en local.
Introducir una comilla simple o paréntesis en un input y ver si da un error de backend o sintaxis SQL. Si nos devuelve un error esa web es vulnerable a SQL Inyection.
2. Descubrir el número de columnas en la base de datos
Cambiar el 1 por otros números hasta donde de un fallo. Al introducir ' order by 8-- - observamos que nos da el error, por lo que esta BBDD tiene 7 columnas.
3. Localizar el punto de inyección
Vemos que no muestra nada en el 1 y empieza a mostrar información desde el 2 (punto de inyección), vamos a cambiar estos números 2, 3, 4, 5, 6 y 7 por distintos comandos, para hacer distintas cosas:
Si la BBDD tiene por ejemplo 4 debemos indicarlas de la siguiente manera:
cn' UNION select 1,2,3,4-- -
4. Sacar la versión de la base de datos
5. Sacar el nombre de la base de datos
6. Ver el SCHEMA
7. Acceder a tablas:
Podemos sustituir mysql por cualquier nombre de la tabla
Encontramos una tabla user que nos interesa, donde podría haber información sensible
8. Acceder a columnas:
9. Acceso a contraseñas
10. SQL Injection en Login
Con esta técnica un atacante podría saltarse el introducir una contraseña y acceder a un servicio web, solamente introduciendo el siguiente comando en el login:
Explotación Automática:
SQL Map
Es la herramienta por excelencia para la explotación de SQL inyection. Primero, capturamos la solicitud POST con Burp, la guardamos en un archivo y marcamos el parámetro searchitem con un * para que sqlmap sepa dónde inyectar.
Interceptar petición con BurpSuite -> seleccionar todo -> botón derecho -> copy to file a burp.req
Saber las bases de datos disponibles
Saber las tablas de una base de datos en concreto
Saber las columnas de una tabla en concreto
Saber el usuario de la base de datos
Dumpear toda la información de la base de datos
La siguiente sección estará dedicada completamente a esta herramienta, donde la veremos en profundidad con ejemplos de uso: