Inyección SQL – Parte I

Quizás más de alguna vez han escuchado mencionar algo relacionado a inyecciones SQL, sin embargo probablemente solo se hacen la idea de lo que esto es o puede llegar a ser, déjenme decirles de forma introductoria, que este tipo de ataques es uno de los más peligrosos para cualquier sitio que no posea protección contra esto, pero, ¿Y que es lo peor que podría pasar? ¿Tan malo es? pues nada más podrían saquearte toda la información de tus bases de datos o en el peor de los casos podrían eliminar tu base de datos entera si es que la información no les interesa y solo quieren hacerte el mal, esto último puede tener un mayor impacto si no se posee un respaldo.

¿Qué son entonces las Inyecciones SQL?

La inyección SQL consiste en insertar o más bien en inyectar una consulta corrupta a la base de datos a través de los parámetros de entrada de una petición HTTP (ya sea por el método POST o el método GET) consiguiendo de tal forma:

  • Leer información sensible.

  • Hacer modificaciones a las tablas de la BD.

  • Eliminar una base de datos por completo.

  • Bypassear logins.

  • Apagar el servidor de bases de datos.

¿Qué gestores de bases de datos pueden verse afectados?

Por mencionarles algo MySQL, SQL Server, MS-ACCESS, Oracle, PostgreSQL y SQLite. Es importante aclarar que la sintáxis de las consultas puede variar dependiendo que gestor este utilizando nuestro objetivo, y eso lo validaremos en la fase de recolección de información.

¿Qué necesito saber para hacer una inyección SQL?

Ahora bien, antes de empezar, es totalmente necesario que conozcan sobre fundamentos básicos de bases de datos, es decir saber estructurar consultas para leer, modificar, actualizar e incluso eliminar registros y/o tablas para ejecutar las pruebas necesarias. Desempolvemos un poco sobre lo que les menciono:

SELECT * FROM ‘nombre de la tabla’ –> Esta consulta devuelve todos los registros de una tabla en específico.

INSERT INTO ‘nombre de la tabla'(campo1, campo2, campoN…) values(valor1, valor2, valorN…) –> Esta consulta es para insertar registros a una tabla en específico.

DROP TABLE ‘nombre de la tabla’ –> Esta consulta elimina una tabla con todo y sus registros.

Y así sucesivamente con otra infinidad de posibles consultas a una base de datos. Es importante hacer énfasis en que el ataque será más potente dependiendo del nivel de creatividad y conocimientos que el atacante tenga para combinar diversas consultas y lograr su objetivo.

 

¿Cuál es el siguiente paso?

Muy bien, Google se vuelve nuestro mejor amigo a la hora de identificar un sitio con posible vulnerabilidad a una inyección SQL, simplemente basta con ejecutar una búsqueda utilizando ‘inurl’ (sin las comillas). Observa el siguiente ejemplo, se ejecutó una búsqueda de páginas programadas en PHP que contengan un ID, esto nos permitirá evaluar si este dichoso ID es inyectable o no:

Tomamos como ejemplo cualquier sitio e ingresamos (es recomendable hacer este tipo de pruebas utilizando una VPN para mantener nuestro anonimato). Lo único que haremos es agregar una comilla simple junto al valor del ID, por ejemplo index.php?id=1′ y esto nos dirá mucho. Si nos muestra en pantalla que tenemos un error en la sintáxis SQL, quiere decir que ese ID es 100% inyectable. Por otro lado, de no aparecer ningún tipo de error o quizás si, pero relacionado a que no se puede mostrar la página, entonces significa que ese ID no es inyectable. Observa el siguiente ejemplo, en este caso ese sitio es vulnerable a una inyección SQL:

Hasta este punto, ya sabemos identificar cuando un sitio es vulnerable o no a una inyección SQL. En la segunda parte de este extenso tema estaremos hablando un poco sobre como explotar esta vulnerabilidad.

Saludos.

About the author: admin

Leave a Reply

Your email address will not be published.