Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

hacer un sistema de usuarios vulnerable a inyection SQL

Estas en el tema de hacer un sistema de usuarios vulnerable a inyection SQL en el foro de Mysql en Foros del Web. hola que tal :D bueno..lo que quiero hacer es que al momento de yo ingresar 'or'1'=1 en el cuadro de texto contraseña me deje acceder ...
  #1 (permalink)  
Antiguo 08/07/2013, 02:13
Avatar de tnyplnc  
Fecha de Ingreso: junio-2013
Ubicación: mexicali
Mensajes: 64
Antigüedad: 11 años, 4 meses
Puntos: 3
hacer un sistema de usuarios vulnerable a inyection SQL

hola que tal :D
bueno..lo que quiero hacer es que al momento de yo ingresar 'or'1'=1 en el cuadro de texto contraseña me deje acceder a la cuenta

esta es mi validacion

Código MySQL:
Ver original
  1. SELECT login, nombre,email,cuenta  
  2. FROM usuarios WHERE login='$login' and password='$pass';

si pongo 'or'1'=1 en el cuadro de texto no me deja acceder, me dice contraseña incorrecta.

al poner esto 'or'1'=1 en el cuadro de texto es como si yo hiciera esto en la consulta

Código MySQL:
Ver original
  1. SELECT login, nombre,email,cuenta  
  2. FROM usuarios WHERE login='$login' and password=' ' or '1=1'

en esa consulta cualquier contraseña que ponga me deja entrar.

el sistema de usuario funciona bien, lo que quiero es que me funcione esa vulnerabilidad, no tengo ninguna seguridad o un addslashes que me cambie los ' por /, ni nada de eso. Nose que este haciendo mal.
Talvez parece rara la ayuda pero quiero experimentar las vulnerabilidades que pudiera tener en un sistema, y saber si enverdad se producen o ya hay algo por defecto en el php que ya tapa esa vulnerabilidad nolose.
Muchas gracias de antemano :)

Última edición por gnzsoloyo; 08/07/2013 a las 03:25
  #2 (permalink)  
Antiguo 08/07/2013, 04:18
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: hacer un sistema de usuarios vulnerable a inyection SQL

Me da la impresión de que tu problema es la mezcla que estás haciendo entre PHP y MySQL. Pareciera que lo rtatases como si fuera la misma cosa, y no es así...
En el contexto de tus consultas, ese "1=1" está actuando como una cadena de texto, y no como una comparación lógica.
En resumidas cuentas, equivalente a esto:
Código MySQL:
Ver original
  1. mysql> SELECT if('1=1', true, false) RESULTADO;
  2. +-----------+
  3. | RESULTADO |
  4. +-----------+
  5. |         1 |
  6. +-----------+
  7. 1 row in set, 1 warning (0.05 sec)
Devuelve verdadero siempre, porque lo que evalua es si existe algo diferente a NULL, y una cadena de texto por definición es NOT NULL.
En otras palabras, estas poniendo algo que no generará nada. Ni ventajas ni desventajas, ni tampoco evitará de ninguna forma el sql-injection, que en realidad se controla de otras formas.
Entendamos una cosa: Siempre que construyes una sentencia dinámicamente, y en especial si incluye cadenas de texto, te estás exponiendo a la posibilidad del sql-injection.
Si quieres evitarlo, deberás hacerlo de un modo... mejor documentado.
Por otro lado, el addslashes(), tema off-topic de este foro, tiene más que ver con el control de los caracteres que se ingresan, más que con el sql-injection.
Desde el SQL, la mejor opcion para evitar el sql-injection, es usar stored procedures para todo acceso a la base. Desde la programación, hay otros recaudos que se pueden tomar, pero eso lo debes consultar en el Foro de PHP, donde los conocen mejor. Programación es off-topic de este foro (si quieres muevo el post para allá).
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 08/07/2013, 13:30
Avatar de tnyplnc  
Fecha de Ingreso: junio-2013
Ubicación: mexicali
Mensajes: 64
Antigüedad: 11 años, 4 meses
Puntos: 3
Respuesta: hacer un sistema de usuarios vulnerable a inyection SQL

Gracias por tu respuesta gnzsoloyo :)
Yo no quiero evitar el inyection SQL, yo quiero que sea vulnerable a eso.
Me dices que lo esta tomando como cadena de texto y no como comparación lógica, de que manera puedo hacer para que sea vulnerable, se supone que así funciona el inyection SQL mandando una cadena de forma de sentencia en un cuadro de texto(en este caso el sistema de usuarios) alterando la consulta que se hace.
He visto ejemplos de sistemas vulnerables y yo quisiera comprobar esa vulnerabilidad en mi código y no me deja alterar la consulta.
Si esta pregunta no es de este foro tu puedes moverla? es que soy nuevo aquí nose como :D sino ahorita encuentro como moverla.
muchas gracias de nuevo gnzsoloyo por el tiempo en contestarme!

Etiquetas: php, select, sistema, sql, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:02.