jueves, julio 19, 2007

SQL Injection Level 1

Hace mucho tiempo, cuando empezamos con esto de los ordenadores a trabajar en el mundo de la informática la primera impresión fue un poco desilusionante y creamos una serie de leyes que nos han guiado para no acabar cayendo en manos de los vendedores de humo:

1.- Todo es mentira.
2.- Las cosas funcionan de casualidad.
3.- El mundo es un gran trapi.


Así que, tras estar reunidos con alguien que nos contaba lo que podríamos hacer en el futuro, lo que iba a ser, la oportunidad de, etc... Siempre decíamos esto es humo. Nada de futuribles, presente y actual. Nos funcionó bien. Hoy toca hablar de "Las cosas funcionan de casualidad".

En el mundo del desarrollo de las aplicaciones web hay algo que no deja de sorprenderme y es el impacto que aún tiene la sentencia mágica. ¿cual es esa sentencia mágica?.

Pues algo tan sencillo como esto:

'or '1'='1

Es tan graciosa y popular, que para unas conferencias sobre seguridad en aplicaciones web me regalaron una camiseta.

Camisetas

Supongo que la mayoría ya sabéis que es esto, pero para los que no os hago una versión reducida de la explicación. La idea es que el programador pide en un formulario en la página de login algo como esto:


Y luego crea una consulta SQL a la base de datos similar a esta:

Select id
from tabla_usuarios
where usuario='$usuario' and pass='$pass';


Si la consulta está mal construida, es decir, concatenadita, entonces la consulta mágica metida en el usuario o la pass o en ambos sitios hace que te cueles con el primer usuario.

Select id
from tabla_usuarios
where usuario='admin' and pass=''or '1'='1';


Vale, si alguien se come esto, es lo que nosotros llamamos:

"Acabo de hacer mi curso de informático IBM por fascículos semanales y ya soy programador de aplicaciones de comercio electrónico"

¿Cual es la broma macabra de esto? Pues que sigue funcionando. Basta coger una página web y buscar la zona de administración, que siguen estando en los mismos sitios (/admin/, /privado, /gestion, ...) y probar. Coger el google y buscar programas que se llamen login.asp, login.php, privado.asp, privado.jsp, admin.php, .... y llevar en el cortapapeles la cadena mágica, sale la web, le cascas la cadena mágina y en unos 15 minutos tienes 5 o 6 sitios vulnerables.

Por favor, si tienes una zona privada, prueba la cadena mágica. Sólo como pequeño test de intrusión, y si te funciona, tira del cable de tu servidor, que tu sitio está para rehacerlo.

16 comentarios:

  1. Una curiosidad...

    ¿si haces esto puede venir la benemérita a casa a hacerte un reconocimiento rectal o es una leyenda urbana?
    ¿en la legislación española meterse en un sitio para el que 'se supone que no tienes permiso' está contemplado como delito?

    ¿para cuándo un post sobre las debilidades de algunos CAPTCHA?

    ¿eh?

    saludos malignos

    ResponderEliminar
  2. Joder, pero si lo hacemos a posta para que sigais trabajando y dando la misma chapa la gente de seguridad. que desagradecido.

    ResponderEliminar
  3. Hay que ser bueno... no ser malo...

    Yo iba a poner algunos links en el post, pero me autocensuré, me debo estar haciendo mayor.

    ResponderEliminar
  4. Hombre...hacerte un reconocimiento rectal no se...pero pillarte todos esos DvDs piratas que tienes por casa...xDDD

    Maligno, te pongo una direccion de correo mía que quiero preguntarte algunas cosillas, mandame un mail cuando puedas :). Calendorn@gmail.com

    Un saludo

    ResponderEliminar
  5. Pienso que lo delictivo, aplicando LOPD y demás jergas, es tener un sistema inseguro argumentando que 'or'1'='1 es cosa de hackerianos y que sólo es un delito suyo. Lo es, desde luego, acceder a cualquier sitio para el que no tengas acceso permitido es delito. Pero tener información protegida y confidencial en el corcho de la recepción de tu empresa o en una caja de zapatos junto a los servicios también lo es. Espero que a la par de la técnica, la seguridad y por ende la auditoría sea un valor en alza.
    Por cierto, muy gracios es Dans. Se le aplica el Teorema de Andrés: el que tiene cara de tonto, lo és.
    Especialmente destacable sus estudios sobre la genética de la empresa XD. Que tio..

    ResponderEliminar
  6. pf para eso solo hay q usar un rs :)

    ResponderEliminar
  7. Disculpa, quisiera que me ayudaras en algo, te dejo mi correo "jeancarlocaro@gmail.com"

    ResponderEliminar
  8. Interesante que el tema siga de moda tanto tiempo después... y siga habiendo forms, apis, servicios que no validen la entrada. En fin.

    Por si acaso creé mi propia versión, sobre la protección de APIs y servicios SOA contra inyección de código

    ResponderEliminar
  9. Hola, te dejo mi mail porque necesito un poco de ayuda (es un poco urgente en tiempo)
    cristian.contrerasv90@gmail.com

    ResponderEliminar
  10. Alguien sabe si una pag web con terminación .html es vulnerable a sql injection?

    ResponderEliminar
  11. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  12. https://inyeccion-sql.blogspot.com.es/2016/11/inyeccion-sql-primer-tema-como.html?m=1

    ResponderEliminar
  13. Fecha estelar, Enero 02 2018...
    Aun hay sitios sin protección para esta vulnerabilidad...

    ResponderEliminar
  14. Interesante. Lo más fácil seria no usar el usuario admin

    ResponderEliminar
  15. Yo estuve intendolo en paginas porno para tener contenido premium :v
    No funciono uu

    ResponderEliminar