Atacando una web con SQL Injection
SQL Injection o Inyección SQL es un tipo de ataque a una aplicación que se basa en una vulnerabilidad en la validación incorrecta de los campos, que permite al atacante inyectar código SQL con el fin de alterar el comportamiento normal y ejecutar el código inyectado. La sentencia típica para comprobar si un servidor es vulnerable a SQL Injection es ‘ or ‘1’=’1. Como ejemplo, tenemos la siguiente aplicación web, que nos devuelve la información del producto correspondiente al identificador. Si añadimos la condición or 1 = 1, hacemos que el servidor nos devuelva toda la información de los datos del producto, debido a que la condición 1 = 1 siempre será cierta. Una forma de automatizar el proceso de SQL Injection es usando sqlmap, una herramienta desarollada en Python que detecta las vulnerabilidades SQL en una web y permite explotarlas. Para probar si una url es vulnerable a SQL Injection, se usará el comando sqlmap –u <url>, que nos indicará a que tipo de ataques es vulnerable la aplicación web, como se ve en la siguiente imagen. Una vez obtenido que es vulnerable, se usan opcionas para obtener información de la base de datos. Unos ejemplos son:
- --current-user
- --current-db
- --is-dba
- --users
- --password
En la siguiente imagen obtenemos la información de aplicar sqlmap –u <url> --current-user --current-db --is-dba Usando sqlmap –u <url> --users –password obtenemos una lista de todos los usuarios y sus contraseñas. Sqlmap permite hacer un ataque de diccionario para crackearlas, obteniendolas en texto plano como se ve en la imagen. Para evitar los ataques de SQL Injection se debe tener especial cuidado en limpiar correctamente todos los datos de entrada, por ejemplo se puede limitar el uso de los carácteres especiales como pueden ser las comillas y no concatenar de forma directa la entrada con la query.