¿COMO SABER
SI UNA WEB ES VULNERABLE A UNA INYECCIÓN SQL? ¿COMO PROTEGERSE?
Como ya se había mencionado en un post anterior en donde se
en explicaba esencia como funciona un
SQL- injectión y en que consistía, en esta ocasión vamos a ver como detectar si
una web SQL es vulnerable a este tipo de ataque que como decía, ha sido el mas común
y el 1 del Top OWASP.
Vamos a verificar los
tipos de SQL-Injection y como se puede detectar que es vulnerable:
-
BLIND SQL
INJECTION
Este tipo de inyeccion no se basa en
arrojar errores, sino que se detecta a través del comportamiento de la web de
las cuales podemos distinguir 2 tipos
1.
Sql-injectión Boolean-Based
Al
colocar valores que arrojen resultados Boleanos, como por ejempo ‘1’=’1’ y
arroja “TRUE” o en otro caso “FALSE” permitiendo la ejecución de una acción,
podemos determinar que se cambian el comportamiento
.
2.
Sql-injectión Time-Based
Este tipo se basa en analizar el tiempo de reacción
de la base de datos, por ejemplo que al colocar un valor de prueba, si este
reacciona rápidamente se sabría que ocurrió un error y si este tarda el tiempo
especificado por la prueba significa que la consulta es correcta.
-
CLASSIC
SQL INJECTIÓN
Se puede verificar visiblemente sobre la web, existen 2 tipos:
1. Sql-injection
Based- Error
Al colocar un valor por ejemplo sobre la
url arroja una pantalla con error alertando sobre la existencia de una base de
datos SQL
Un ejemplo muy típico de esto es cuando se
coloca una comilla simple sobre una URL
Ej:
localhost/prueba/test/content-2/index.php?user=’ pepito
Como se evidencia en esta url se esta
colocando una comilla simple justo depues de “user=” lo que rompe la cadena php
y arrojaria un error similar a este
Deprecated= mysql_contect(): The mysql extensión in
deprecated and will be removed in the future: use mysqli or PDO instead in
C:\xampp\htdocs\test/prueba\mySQLHandler.php on line 5
Con esto estamos comprobando que en efecto
hay una base de datos que esta reaccionando al dato que introducimos en la url.
2. Sql
–injection Basen-Union
Concatenando comandos para enviar sentencias
que permiten obtener la base de datos.
- OUT-OF-BAND
SQL INJECTIÓN
No permite detectarse por errores o por
comportamiento pero mediante un sniffer de datos se puede obtener un ping de
respuesta que determine que se efectuo inyección
METODOS
Los metodos por los que se puede efectuar
esta inyección generalmente son:
-
URL: Ya sea por entrada de valores enteros o
valores de cadena
-
FORMULARIOS
: Entrada de datos libres y DropDown Box
-
CABECERA
MODIFICADAS: Cookies y User Agent
¿COMO PREVENIR ATAQUES DE INYECCIÓN SQL?
1. ESCAPAR LOS CARACTERES ESPECIALES
Como ya habíamos mencionado en el
anterior post, generalmente estas vulnerabilidades ocurren por malas practicas
de programación por lo que es importante escapar los caracteres especiales que
en un lenguaje de programación se realiza mediante una barra invertida “ \ ” ..
de esta forma evitamos que se rompa la sintaxis de la cadena.
2. VERIFICAR LOS DATOS QUE RECIBE EL USUARIO
A través del lenguaje de programación
debemos hacer un filtro de los datos que se introducen en el formulario o en la
url, de esta forma nos prevenimos de recibir datos inesperados. También existen
otros métodos aconsejables como comprobar la longitud de la cadena ingresada en
el formulario. Otro aspecto importante es delimitar los valores de consulta
usando comillas simples, de esta forma se complica un poco mas la inyección
para los atacantes.
3. HACER PRUEBAS DE PEN TESTING
Es recomendable hacer pruebas de
pentesting regulares para comprobar que todo marche bien, para ello existe
herramientas open source como SQLmap entre otras.
4. CONTROLAR LOS PRIVILEGIOS DE USUARIO
Hay que evitar otorgar altos privilegios
a todos los usuarios, diferenciando administradores, usuarios, root, etc
ARTICUL0
ARTICUL0