💉SQL Injection
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:
1. Comprobar si es vulnerable a SQL Inyection
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 tablaEncontramos 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
Interceptar petición con BurpSuite -> seleccionar todo -> botón derecho -> copy to file a
archivo.txt
Saber las columnas de una tabla en concreto
Saber las tablas de una base de datos en concreto
Saber las bases de datos disponibles
Saber la contraseña asociada a un usuario
Saber el usuario de la base de datos
La siguiente sección estará dedicada completamente a esta herramienta, donde la veremos en profundidad con ejemplos de uso:
💉SQLMapCheatsheet
MySQL
Comandos | Descripción |
General | |
| Login en la base de datos mysql |
| Mostrar todas las bases de datos |
| Usar una base de datos |
Tablas | |
| Añadir una nueva |
| Mostrar todas las tablas |
| Mostrar las propiedades de una tabla |
| Añade valores a una tabla |
| Agregar valores a columnas específicas en una tabla |
| Actualizar valores de la tabla |
Columnas | |
| Mostrar todas las columnas de una tabla |
| Mostrar columnas específicas en una tabla |
| Borrar una tabla |
| Añadir nueva columna |
| Renombrar columna |
| Cambiar tipo de datos de columna |
| Borrar una columna |
Output | |
| Ordenar por columna |
| Ordenar por columna descendente |
| Ordenar por dos columnas |
| Mostrar solo los dos primeros resultados |
| Mostrar solo los dos primeros resultados a partir del índice 2 |
| Enumerar resultados que cumplen una condición |
| Listar resultados donde el nombre es similar a una cadena determinada |
Operadores en MySQL
División (
/
), Multiplicación (*
), y Modulos (%
)Adición (
+
) and Sustracción (-
)Comparación (
=
,>
,<
,<=
,>=
,!=
,LIKE
)NOT (
!
)AND (
&&
)OR (
||
)
SQL Injection
Payload | Descripción |
Auth Bypass | |
| Omisión de autenticación básica |
| Omisión de autenticación básica con comentarios |
Union Injection | |
| Detectar el número de columnas usando |
| Detectar el número de columnas usando |
| Union injection básico |
| Union injection para 4 columnas |
DB Enumeration | |
| Fingerprint MySQL con query output |
| Fingerprint MySQL sin output |
| Nombre de la base de datos actual |
| Listar todas las bases de datos |
| Enumerar todas las tablas en una base de datos específica |
| Enumerar todas las columnas de una tabla específica |
| Volcar datos de una tabla en otra base de datos |
Privileges | |
| Encontrar usuario actual |
| Encuentra si el usuario tiene privilegios de administrador |
| Busca todos los usuarios con privilegios |
| Encontrar a qué directorios se puede acceder a través de MySQL |
File Injection | |
| Leer archivo local |
| Escribir una cadena en un archivo local |
| Escriba un shell web en el directorio web base |
Hack Tools Plugin
Con este plugin disponible para todos los navegadores tenemos a mano multitud de comandos para explotar SQL Injections.
Última actualización