lunes, 24 de septiembre de 2007

Inyección SQL

Reinier Nápoles Martínez [rnapoles@ipihlg.rimed.cu]

La mayoría de la veces nos enseñan a programar, pero no nos enseñan sobre buffers overflow, ni como evitarlos. El siguiente articulo trata sobre una de las técnicas mas explotadas hoy en día.

La inyección SQL es una de las técnicas mas peligrosas que se han descubierto, ya que con una manipulación de una consulta SQL, permite a un usuario logearse como admin o como otro usuario registrado en la página, incluso, permite el borrado de tablas y BD según los privilegios que tenga el user con que se hace la consulta. Esta vulnerabilidad consiste en inyectar, como su nombre lo indica, código en sentencias SQL, debido a fallas a la hora de Programar. Numerosas son las aplicaciones web que son vulnerables a este tipo de ataque, como numerosos son los sitios que fueron atacados usando esta técnica.

Los ejemplos van desde la Casa Blanca, Nasa, ONU, páginas de gobierno, empresas, hasta páginas personales. Lo peor de todo es que incluso programadores expertos crean códigos vulnerables. A pesar de ser esta una técnica de algunos años, sigue teniendo un efecto sorprendente. Fue descubierta por rain.forest.puppy quien despues la uso para hacerse admin de Packetstorm.

Bueno vayamos al 'Hello Wordl' de esta técnica:

Imaginemos que tenemos un formulario en nuestra web con las siguientes Características:

<FORM action="validar.php" method="POST">
  Usuario:<INPUT type="text" name="usuario">
  Contraseña:<INPUT type="password" name="contraseña">
  <INPUT type="submit" name="enviar">
</FORM>

y en validar.php tenemos la consulta:

SELECT * FROM users WHERE User = usuario and pass = Contraseña

Si se introduce pepe como nombre de user y de pass 1234567 y si está registrado en la pág con este user y pass se le consedera el acceso, pero ¿que pasa si el user introduce ' or 1 = 1 -- y de pass lo mismo?, la consulta quedaría.

SELECT * FROM users where User ='' or 1 = 1 -- and pass = '' or 1 = 1 --

Podría permitirle entrar como un usuario registrado, o generar un error con información sobre la consulta hecha.

Hace un tiempo el colega ygonzalez descubrió una página en la red cubana vulnerable a este ataque.
Primero entramos como usuarios y luego como admins. Hubiéramos podido Dropear las BD pero, ¿qué ganábamos con eso?. Buscamos el teléfono del webmaster del sitio y lo llamamos informándole del fallo.

Una técnica para prevenir este tipo de ataques es usar funciones como Addslash, si alguien introduce ' or 1 = 1 -- se le añadirán \ con lo que el logeo no será válido crear usuarios los cuales a la hora de hacer consultas
solo tengan permiso de modificar sus tablas o su BD. Me he topado que mucha de la gente lo que usa es el root y en ocasiones hasta sin pass.
Con este pequeño aporte no trato de que se dediquen a ir atacando cuanta página haya en la red, trato de que se promueva la cultura informática. Por lo que los anímo a que investiguen y que compartan con nosotros lo que han aprendido. No soy un experto ni nada por el estílo, sólo soy un aprendiz, igual que ustedes.

Referencias:
http://es.wikipedia.org/wiki/Inyección SQL
http://www.wiretrip.net/rfp/txt/rfp2k01.txt



Artículos relacionados


No hay comentarios: