Encuesta: Que te parecio el articulo?
Esta encuesta esta cerrada.
Muy Bueno 75.00% 3 75.00%
Bueno 25.00% 1 25.00%
Regular 0% 0 0%
Malo 0% 0 0%
No entendi nada 0% 0 0%
Total 4 votos 100%
* Tú votaste por esta opción. [Mostrar Resultados]

Tema Cerrado  Enviar Tema 
1 Votos - 5 en Promedio   [ARTICULO] Inyección SQL
Autor Mensaje
Hermes
El Alquimista


Mensajes: 461
Grupo: Registrado
Registro en: May 2005
Estado: Sin Conexión
Reputación: 8
Mensaje: #1
myBB  [ARTICULO] Inyección SQL

Introduccion:

Como sabrán, hace unos días el sitio de preguntaslinux.org fue hackeado (en honor a la verdad fueron hackeados muchisimos sitios en Internet aparte de este).

N. del Mod.: esto sucedio en Agosto de 2005


Para aquellos que esten interesados en el tema de la seguridad informatica o simplemente para los que les interese saber que fue lo que paso y como fue posible, escribi este mini-articulo.

Antes que nada quiero decir que este articulo no es un manual de hacking ni pretende serlo. Simplemente intenta explicar uno de los temas de seguridad mas interesante que han surgido en los ultimos tiempos: la inyección SQL.

NOTA: Para un mejor entendimiento agregue un glosario de teminos al final del articulo.


Inyeccion SQL

Se entiente que hay Inyección SQL cuando se inserta o "inyecta" un codigo SQL "invasor" dentro de otro codigo SQL. Esto logra alterar el funcionamiento normal del ultimo, ejecutando maliciosamente el codigo del primero en una base de datos.

La inyeccion SQL es un problema de seguridad informática que debe ser tomado en cuenta por el o los programadores para prevenirlo. Un programa hecho con descuido, displicencia, o con ignorancia sobre el tema, podrá ser vulnerable y la seguridad del sistema puede ser ciertamente comprometida.

Esto puede suceder tanto en programas corriendo en computadoras de escritorio, como en páginas Web, ya que estas pueden funcionar mediante programas ejecutandose en el servidor que las aloja.

La vulnerabilidad ocurre cuando un programa "arma" descuidadamente una sentencia SQL, con parametros dados por el usuario, para luego hacer una consulta a una base de datos. Dentro de los parametros dados por el usuario se envia el codigo SQL inyectado.

Al ejecutarse esa consulta en la base de datos, el código SQL inyectado también se ejecutara y pudiendo hacer un sin numero de cosas, como insertar registros, modificar o eliminar datos, autorizar accesos, e incluso, ejecutar código malicioso en el servidor.


Un ejemplo en concreto:

Por ejemplo, el siguiente codigo es usado muchas veces en la web en las conocidas paginas de login, donde aparte de Usuario y Contraseña tenemos el tipico link "Olvido su contraseña?" que nos envia por correo electronico la misma si es que nos la olvidamos:

SELECT fieldlist
FROM table
WHERE field = '$EMAIL';

Aca, $EMAIL es una variable que se reemplazara por la direccion que el usuario escriba en el formulario. Se ubica entre comillas simples ya que es un cadena de texto. Por lo pronto desconocemos el nombre de los campos o tablas involucradas, pero esto no es un problema.

Si en el formulario escribimos usuario@midominio.com'  (fijate que el ultimo caracter es una comilla simple) la sentencia SQL quedaria de la siguiente manera:

SELECT fieldlist
FROM table
WHERE field = 'usuario@midominio.com' ';

Al ejecutarse, el Sistema Gestor de Bases de Datos encontrara un error de sintaxis, ya que la sentencia termina con dos comillas simples en lugar de una.

El mensaje de error entregado al usuario dependera de los procedimientos internos de recuperación de errores del sistema, pero en la mayoria de los casos suele ser diferente de "email desconocido". Esta respuesta de error es una posible puerta de entrada ya que en apariencia los datos no estan siendo validados correctamente.

Por lo visto los datos que enviamos desde el formulario estan en la clausula WHERE de la sentencia SQL, podemos empezar a cambiar los mismos y ver que pasa...
podriamos ingresar, por ejemplo, algo como cualquiercosa' OR 'x'='x'. La sentencia SQL quedaria de la siguiente forma:

SELECT fieldlist
FROM table
WHERE field = 'cualquiercosa' OR 'x'='x';

Como la aplicacion no esta analizando la sentencia SQL podemos transformar el contenido de la clausula WHERE de uno a dos componentes. Ademas con el OR 'x'='x' nos aseguramos que sea cual sea el contenido de la primera clausula el resultado sera siempre true (verdadero)

Pero, a diferencia de la consulta original que devolveria de a un item por vez, esta version devolvera cada item de la tabla de la base de datos que contenga a los usuarios, es decir el usuario y contraseña de TODOS los usuarios del sistema.

En la "vida real" la inyeccion SQL no se limita a un "formulario" sino que se utilizan tecnicas mas avanzadas, que incluyen la programación de algun script que pueda pasar por encima de la aplicacion vulnerable y asi evitar dejar "huellas".
  
Como decia al comienzo, los programadores deberian tomarse el tiempo necesario para probar estas cosas y evitar abrir involuntariamente puertas traseras que puedan ser utilizadas por personas malintencionadas.


En el caso del sitio de Preguntaslinux, el software utilizado para los foros contenia una vulnerabilidad que explotaba la inyeccion SQL que no pudo "emparcharse" a tiempo 1-cry  


Glosario:

SQL: El Lenguaje de Consulta Estructurado (Structured Query Language) es un lenguaje declarativo de acceso a bases de datos relacionales que permite especificar diversos tipos de operaciones sobre las mismas. Reune caracteristicas del algebra y el calculo relacional permitiendo ejecutar consultas con el fin de recuperar, modificar o insertar información de interes de una base de datos, de una forma sencilla.

Base de Datos: es un conjunto de datos que pertenecen al mismo contexto almacenados sistemáticamente para su uso posterior. En informática existen los Sistemas Gestores de Bases de Datos (SGBD), que permiten almacenar y posteriormente acceder a los datos de forma rapida y estructurada. Entre los SGBD mas conocidos podemos nombrar: DB2, Ingres, MySQL, Oracle, PervasiveSQL, PostgreSQL, SQL server, Sybase, etc.

Seguridad Informatica: Consta de procedimientos que buscan la proteccion contra los riesgos asociados a la informática. Los riesgos son en función de varios elementos:

• las amenazas que pesan sobre los activos (datos) a proteger
• las vulnerabilidades de estos activos
• su sensibilidad, la cual es la conjunción de diferentes factores:
-> la confidencialidad
-> la integridad
-> la disponibilidad o accesiblidad



Espero que les sea util. Saludos!!!! 1-wink


/****
Si entendemos todo lo que estamos haciendo,
no estamos aprendiendo nada...
****/

08-18-2005 12:18 AM
Visita el website del usuario Encuentra todos los mensajes de este usuario
Whiskola
Flaming Cliff´s
****
Colaborador

Mensajes: 642
Grupo: Colaborador
Registro en: May 2005
Estado: Ausente
Reputación: 8
Mensaje: #2
RE: [ARTICULO] Inyección SQL

groso chaban..... lastima que nos castigaron feo con eso 1-sad


Administrador preguntaslinux.org
Moderador linux.org.ar
08-18-2005 11:05 AM
Visita el website del usuario Encuentra todos los mensajes de este usuario
Tema Cerrado  Enviar Tema 

Posibles Temas Similares...
Tema: Autor Respuestas: Vistas: Ultimo Mensaje
[ARTICULO] Firefox es más inseguro que Explorer, según Symantec Hermes 6 657 10-03-2006 11:19 PM
Ultimo Mensaje: p_eter
[ARTICULO] Las amenazas más graves proceden de dentro de las empresas Hermes 0 535 05-14-2006 10:16 PM
Ultimo Mensaje: Hermes
myBB [ARTICULO] Google: El mejor amigo del Hacker Hermes 0 1,556 04-17-2006 01:35 PM
Ultimo Mensaje: Hermes

Ver la Versión para Impresión
Mandar este Tema a algún Amigo
Subscríbete a este Tema | Agrega este Tema a Tus Favoritos

Salto de Foro: