SQL Injection

27.mar 2006 Envía un trackback

Cuando programamos una aplicación en la que, de forma interactiva, accedemos a una base de datos, debemos cuidar ciertos parámetros básicos para no poner en peligro la integridad de los datos. SQL Injection es una técnica con la que se pretende explotar justamente esta característica.

El origen suele ser un filtrado incorrecto de las variables introducidas por el usario a través, normalmente, de un formulario web. Se trata de inyectar código SQL embebido. Lo veremos mejor con un ejemplo. Un formulario de login, donde se introduce usuario y contraseña. Lo típico sería que, si la dupla introducida fuera Usuario:Antonio, Contraseña:abracadabra el SQL resultante quedaría así:
SELECT * FROM Usuarios WHERE User = 'Antonio' AND Password = 'abracadabra'
Ahora supongamos que un usuario malintencionado rellena el formulario poniendo lo siguiente, Usuario: Pepe, Contraseña: pepe' OR 1=1;--. Veamos:
SELECT * FROM Usuarios WHERE User = 'Pepe' AND Password = 'pepe' OR 1=1;--'
La condición 1=1 se cumpliría siempre, con lo que existirían resultados y, dependiendo del código de la aplicación web, podría dejarnos entrar. Una vez visto un ejemplo práctico sencillo y sin profundizar más en el tema (hay ríos de tinta sobre esto) paso a la cuestión moral.

Había una vez un pingüino aburrido que se puso a jugar. El juego consistía en llamar a la puerta de algunos iglús de Vila Pengüín haciéndose pasar por alguien familiar. En un principio se trataba de algo gracioso aunque no siempre el resultado era satisfactorio. Pero un día encontró una puerta abierta, entró y vió un vale de compra de PenguMarket. No lo cogió porque su ética no lo permitía, salió del iglú y dejó todo tal cual había encontrado.

Días más tarde nuestro pingüino se enteró que la familia que habitaba aquél iglú tenía por costumbre dejar la puerta abierta y por su cabeza pasaron varias cuestiones:

  • ¿Aviso a los dueños para que nadie les robe el vale de compra?... ¿Y si me denuncian por allanamiento de iglú?... mejor no meterme en temas legales.
  • No digo nada... pero ¿y si alguien entra y se gasta el vale en pescados para todo el invierno?.
  • ¿Podría decírselo a algún amigo de la familia o cerrajero (saque o no tajada) para que, indirectamente, les adviertan que mejor cerrar la puerta con llave y evitar desgracias? (hispasec, alfa21...).


Nuestro pingüino se encuentra desorientado y no sabe cómo actuar, ¿qué haríais vosotros?.


Comentarios
Gravatar reidrac@27.03.2006, 'Re: SQL Injection'

Envía un mail anónimo a donde proceda (y no me digas que a estas alturas no sabes mandar un mail anónimo).

De todas formas, ¿quién te manda jugar con esas cosas? Yo no hago auditorías gratis XDDDD

Aunque , para alagunos debería ser requisito indispensable :P

Gravatar efremigio@27.03.2006, 'Re: SQL Injection'

¿email anónimo através de algún proxy anónimo?

Gravatar r0sk@27.03.2006, 'Re: SQL Injection'

El consejo que yo he dado es el mismo, correo anónimo notificando el fallo. Ahora bien, dejando un tiempo prudencial no estaría de más publicar el fallo siempre que no se apresuren a revisar el código. No tiene porque pagarlas el usuario final.

Tema emails anónimos... hay listas de servidores de correo mal configurados... open relay ¿os suena? ;).


Escribe tu comentario
 
 
Guardar datos
Escribe tu comentario:
captcha


Intenta que tu comentario sea interesante y con información relevante al tema de la entrada. BBCodes disponibles: [url=http://direccion]texto[/url], negrita: [b]texto[/b], itálica: [i]texto[/i], subrayada: [u]texto[/u]. Para mencionar o citar a alguien (quote): [cita]texto[/cita]