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
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 no lo recomiendan, para alagunos debería ser requisito indispensable :P
¿email anónimo através de algún proxy anónimo?
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
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]


