¿Qué es SQL Injection? ¿Cómo funciona el ataque?
En este post se muestra cómo inyectar datos desde entradas, un ataque a Google y cómo protegerse.
El 3 de enero de 2017 la mayor herramienta de búsqueda de Internet, Google, sufrió un ataque DNS (hecho con SQL Injection). De acuerdo con las imágenes obtenidas por los usuarios de internet, el autor del ataque se identifica como Kuroi’SH y la invasión se produjo apenas “por diversión”.
De acuerdo con el hacker, la acción fue realizada a través de un SQL Injection o inyección de SQL. Fue con esta herramienta que Kuroi’SH redireccionó los accesos y realizó el deface, la modificación en la apariencia de algún objeto o sitio.
¿Qué es SQL Injection?
SQL Injection es una falla en la codificación de una aplicación cualquiera (web o local) que posibilita por medio de un input cualquiera, la manipulación de una consulta SQL. Esta manipulación se denomina inyección, por lo que el término de inyección de SQL.
Resumiendo: Es una técnica de ataque basada en la manipulación del código SQL, que es el lenguaje utilizado para el intercambio de información entre aplicaciones y bases de datos relacionales.
Es el lenguaje de patrón universal para la manipulación de datos en bases de datos relacionales a través de los DBMS (Sistema de gestión de bases de datos relacionales). Es un tipo de ataque donde el “Hacker” puede insertar comandos maliciosos (sql querys) en la base de datos a través de los campos de formularios o de URL de una aplicación vulnerable, ambicionando extraer información guardada en la base de datos.
“Piense en SQL Injection como una simple falla lógica, es simplemente una falla que, por dejar abierta a interpretaciones, ocurren manipulaciones indeseables.”
Inurl Brasil, un grupo de investigación de seguridad, desarrollo de herramientas y activismo digital, dijo: “La computación es perfecta, pero quien programa los dispositivos y aplicaciones son menos favorecidos, no ven todas las posibilidades, no se preocupan nada más “el camino que determiné”, se olvidan que existen siempre muchos otros caminos y que es función del desarrollador y del probador de software (algo que no existe mucho en las empresas) hacer todos esos caminos y garantizar que el software se comporte adecuadamente; si no lo hace, un hacker hará “.
Narrando como se hace una inyección SQL.
Imagínese que usted está viajando y su coche pierde la capacidad de la batería, o sea, ella muere. ¿Que hacer? Si usted tiene un cargador en el coche puede intentar algo para guardar. Pero si no lo tiene, hay otros métodos para hacer que la batería funcione, por ejemplo, el famoso “acoplar”, que es cuando usted conecta su batería en otra que esté en funcionamiento.
Digamos que usted no posee ese cargador, entonces necesita encontrar otro conductor que suministre la batería. Usted lo encuentra y hace la siguiente pregunta: “Amigo, necesito una recarga, ¿le daría?”. ¿El otro conductor no va a entender lo que quieres, correcto?
Esto es porque usted no ha detallado que necesita una recarga en la batería de su coche. Usted no fue explícito y lo mismo ocurre en la cuestión de SQL: Son varias interpretaciones. Cuando una consulta normal con entrada de filtro se realiza con una vulnerabilidad, un hacker puede inyectar un código malicioso en su consulta y manipularla, ya que la dejó abierta a varias interpretaciones.
Por ejemplo, volviendo al conductor que usted pidió la recarga, sería como si él le preste un cargador de smartphone o un cargador con la capacidad para dañar su coche.
¿Cómo se hace una inyección (técnicamente hablando)?
Básicamente, la inyección es la persona que inserta comandos incorrectos de forma remota en un servidor a través de una aplicación vulnerable.
Ahora voy a demostrar un ejemplo de inyección SQL de forma más “técnica”. Así que si usted no tiene conocimiento en la programación, notará una cierta dificultad, pero creo que no es el caso en este blog.
Vea una aplicación de consulta SQL sin filtro de entrada:
$ sql = “SELECT * FROM tablaCM WHERE campoCM = ‘$ _POST [” valor “]’”;
En el ejemplo anterior tenemos una consulta que es completamente vulnerable. Como se puede percibir sólo existe una concatenación de una variable POST recibida desde fuera, sea por el INPUT de algún usuario o incluso por la sumisión de un formulario. La consulta demostrada arriba funciona de la siguiente manera:
“SELECCIONE TODO DE LA TABLA DONDE LA COLUMNA SEA IGUAL AL VALOR RECIBIDO”
En PHP tenemos el uso de $ _POST, que es una variable global indicando la petición por el método HTTP POST, muy utilizado en la presentación de formulario en la web donde existe el pasaje de variables en la sumisión, en nuestro caso llamada “valor”. Suponiendo que el valor del POST sea “Scriptcase”, la consulta sería:
“SELECT * FROM tablaCM WHERE campoCM = ‘Scriptcase’”
El resultado sería una consulta en BD (base de datos) que traería de la tabla “tablaCM” donde la columna “campoCM” es igual a “Scriptcase” y devolver todos los valores correspondientes a la cláusula ‘where’. Sin embargo, un hacker explora la falla inyectando valores no tan normales. Pensando en un escenario que tenga un hacker, vamos a suponer que el valor pasado por el POST sea:
“; SELECT * FROM information_schema.tables WHERE table_name! = “”
Al final la consulta sería:
“SELECT * FROM tablaCM WHERE campoCM =”; SELECT * FROM information_schema.tables WHERE table_name! = “”
En este ejemplo, pudimos cambiar la consulta para que ella devolviera también el nombre de todas las tablas existentes en la base de datos MYSQL (considerado el más popular).
Así funciona una inyección SQL manual, “en la práctica, se utilizan herramientas que automatizan y traducen todas las consultas a cada base de datos hasta llegar al objetivo, bastando que exista la vulnerabilidad inyectable”.
Ahora te pregunto: ¿Esa es una técnica de hacking que requiere mucho conocimiento?
No. Una persona con un conocimiento básico en base de datos y en el lenguaje SQL puede ejecutar este tipo de ataque.
Visite nuestro blog para mas articulos.
También podría gustarte…