SQL Injection

Introducción

sql injection
Artículo publicado en la revista @rroba #93 – Suplemento “Hack paso a paso” #24 – Agosto de 2005 (Material Sin Editar)

Tres años atrás, publicaba en mi sitio personal de Internet, un documento técnico titulado “Técnicas de SQL Injection: Un Repaso” (Ver Referencias). En el mismo, mencionaba con varios ejemplos y bastante contenido, algunas de las técnicas más conocidas hasta el momento por la comunidad de profesionales y curiosos relacionados de algún modo con la seguridad informática. Probablemente su contenido no haya resultado novedoso en forma particular, pero su conjunto y el hecho de que haya representado uno de los primeros trabajos en español publicados sobre el tema, hizo que rápidamente llegara a ser descargado por varios miles de personas.

Por otra parte, hace algunas semanas, tuve oportunidad de asistir en calidad de ponente, a un congreso celebrado en Santa Cruz de la Sierra, Bolivia, al cual se dio en llamar CIH2k5 (Congreso Internacional de Hackers 2005) (Ver Destacado). Para dicha oportunidad, los organizadores del evento, sugirieron que una de mis ponencias, se encuentre relacionada con SQL Injection, pues entendían que resultaría un tema de interés para los asistentes. A pesar de no estar muy convencido, cogí mis viejos apuntes y me propuse preparar una presentación, que no solo incluyera las técnicas más populares, sino que a su vez mostrara su evolución y las diferentes prácticas de detección y evasión con ellas relacionadas. En este artículo, intentare transmitirles algunos de los conceptos esenciales, haciendo uso de varios ejercicios que vosotros mismos podréis practicar en vuestro entorno de prueba, a la vez que tomaremos nota de los sitios donde podremos encontrar información adicional a fin de que quienes se encuentren interesados, tengan la oportunidad de profundizar sobre el tema.

Qué es SQL?

A fines de 1973, un grupo de personas trabajaba en los laboratorios de investigación de IBM, con el objetivo principal de desarrollar un lenguaje específico de acceso estándar a datos, que potenciara un nuevo modelo de administración de información surgido poco tiempo atrás,  el cual se encontraba basado básicamente en una operación matemática: la relación. Este modelo denominado “Modelo Relacional de Base de Datos”, basado en tablas, campos, registros y por su puesto… relaciones, comenzaba a ser visto con interés por la comunidad informática, pero aún requería de una herramienta que pudiera explotar sus características relacionales.

Producto de dichas investigaciones y algunos aportes de terceros, tiempo mas tarde nace un lenguaje denominado SEQUEL, el cual toma su nombre de su denominación en ingles “Structure English Query Language”. Ya a fines de 1977 SEQUEL evolucionaría hasta transformase en SEQUEL/2 y finalmente en SQL (Structural Query Language).

Hoy en día, a casi 30 años de su creación, el “Pure SQL” ha demostrado que lejos de sus inicios como lenguaje “embebido”, se ha convertido en una poderosa herramienta, capaz de manejar estructuras lógicas complejas, así como cualquier tipo de dato imaginado. De hecho, la versión SQL3 (También referida por algunos como SQL99) posee características avanzadas de manejo de objetos.

Comandos básicos

Si bien es cierto que SQL es un estándar, también lo es el hecho que cada una de las grandes compañías proveedoras de software, han dotado a sus productos de características especiales que requieren de extensiones propietarias en el lenguaje para poder ser aprovechadas. Este es el caso por ejemplo, de Oracle con su dialecto PL-SQL o Microsoft con su Transact-SQL. De una u otra forma, a los efectos de este artículo, si bien nos enfocaremos en Microsoft SQL para llevar a cabo los ejemplos, la gran mayoría de las sentencias y comandos que utilizaremos, se encuentran dentro del set de instrucciones del SQL estándar.

Parte del poder del este lenguaje, se basa en la sencillez de sus sentencias y la potencialidad que se logra combinando un pequeño set de instrucciones y operadores lógicos y de comparación.

Tal como se muestra en la Figura 1, en el universo de comandos básicos de SQL, es posible identificar al menos cuatro grupos principales:

Figura 1 – Comandos básicos

Descarga el artículo completo para continuar leyendo: