Simbiontes
Cada loco con su tema   

Blog |  Acerca de...  |  Asuntos recurrentes  | 

Prueba de concepto de inyección SQL

Escrito por (A) El Malvado Acidonitrix , Viernes 9 de Marzo de 2007
   1 Comentarios
Archivado en: Codeblog

Una explicación en vídeo de cómo funciona una inyección de SQL pensada para enseñar en clase.

Tuve que preparar esta presentación para explicar en clase cómo es una inyección de SQL. Tal vez a alguien le sea de utilidad, así que lo dejo para descargar, junto con el código para explicarlo con un ejercicio. Hay otros ejemplos parecidos referidos desde la wikipedia, pero están en inglés. La inyección de SQL es la típica cosa que contada no se entiende, pero una vez la has visto no se te olvida.

La presentación:

  • En flash: se ve aquí. Tarda un rato en cargar, pero la calidad es buena y lleva explicaciones.
  • En youtube. La calidad no es muy buena, pero a pantalla completa se ve lo suficiente. Faltan los comentarios y la explicación.

En este fichero rar están el vídeo, el código fuente del script y la estructura de la tabla para postgres. No es difícil pasarla a otro sistema de base de datos. El ejemplo es un script que gestiona una tabla. No usa APIs ni abstracciones como PEAR porque los alumnos están aprendiendo lo básico.

El vídeo muestra el ejemplo de inyección aplicado a un sencillo formulario de consulta y modificación de una tabla en base de datos. El ejercicio original de mantenimiento de la tabla no contemplaba protecciones a posta, para posteriormente ilustrar el concepto de forma cruda.

La idea es que los programadores no comprueban los datos que llegan de fuera y los insertan en su programa alegremente. Eso es tremendo, porque un programa es una ventana abierta a tu sistema, y, si está en internet, esa ventana da al mundo. Ocurre más a menudo de lo que la gente piensa, porque el mercado laboral necesita muchos informáticos, y la gente se incorpora muy verde, y porque se trabaja muy deprisa y no se dedica tiempo suficiente a los detalles.

Los datos elementales como la tabla se pueden deducir. Por ejemplo, casi todo el mundo emplea nombres de tabla parecidos: "users", "usuarios", etc. Si se muestran errores por pantalla, además se puede obtener más información.

Los ataques de este tipo tienen varios remedios. En primer lugar, la inyección se previene mediante una técnica de lista blanca: dices qué aceptas, no qué no aceptas, de forma que reduces las opciones abiertas y tu programa es controlable. Por ejemplo: si esperas un número, no aceptes otra cosa. Para eso, hay que comprobar primero los datos, tanto en tipo como en longitud. En segundo lugar, hay que tener un buen diseño. Por ejemplo, en este video de otra inyección SQL, el atacante hace login porque la aplicación está mal planteada y, en realidad, no se comprueba estrictamente la contraseña, si no si una consulta ha dado un resultado positivo lo que, aparentemente, es lo mismo, pero no, porque hay varias respuestas válidas a la comprobación (en otras palabras, se pretende comprobar una cosa, pero se está comprobando otra condición distinta que contiene lo que preguntas, y más cosas que no preguntas). En tercer lugar, el propio lenguaje de programación tiene sus mecanismos para evitar esta clase de intrusiones, pero no son perfectos. Por ejemplo, se escapan las comillas y no se ejecutan ciertas instrucciones drásticas si vienen en grupo. Por ejemplo, PHP no ejecuta un droptable si la instrucción viene acompañada por un select en la misma orden de ejecución.

Otros ejemplos de interés.

1 comentarios

Bla Bla
Dice: Arian, Jueves 4 de Febrero de 2010

muy claro el video, se agradece
un saludo



Enviar un comentario










Introduce el código que aparece aquí...
Recordar información personal en este PC...







Mostrar búsqueda avanzadaActivar búsqueda avanzada

Bienvenido al repositorio de los simbiontes

Una página colectiva y ecléctica para comentar y apuntar cosas.

Estás viendo los archivos de Marzo de 2007. Visita la portada para ver las últimas notas.

Sugerencias de lectura

Los simbiontes hablan de...

Sugerencias de lectura

Si quieres curiosear, puedes consultar:

  • todas las entradas archivadas por categoría (abstract).
  • Las entradas ordenadas mensualmente.
  • Suscribirte a los feeds (más abajo).
  • Lo que vienen buscando otras personas.
  • Si lo prefieres, puedes ver la portada en el formato anterior.
  • ...o leer la presentación para saber qué es esto y si puedes fiarte o no de lo que aquí se dice, y por qué pensamos que esto no es un blog aunque lo llamemos así para entendernos entre nosotros.

Sindicación RSS

  • ¿Qué es un feed?
  • Agregadores recomentados

Lecturas edificantes y tráfico de influencias

La tira Ecol

Tira Ecol

http://tira.escomposlinux.org
La tira ecol ha vuelto.