Demuestre la inyección de SQL utilizando el código QR

3

Encontré una forma de insertar una inyección SQL a través de una consulta no segura. El programa es un control de punto de control que funciona con códigos QR. Comprueba si su código existe en una base de datos y si lo hace, puede ingresar al establecimiento.

Ahora ... ya que esa es la única entrada de personas que no forman parte del personal, las medidas contra las inyecciones de SQL no se toman en el código. Ahora, si tomo un código QR "infectado" para ingresar al sistema, estoy seguro de que les hará creer la amenaza ... ¿cómo explotarías esto? (SQLite)

"SELECT count(*) FROM validation WHERE qrstring='" + qrcodestring + "'"

Encontré un par pero nada importante como obtener códigos válidos de otros usuarios o algo así ...

Además, ¿mi miedo es lógico o es seguro? Porque me divertí al exponer esto.

    
pregunta wannabeLearner 01.09.2016 - 10:59
fuente

2 respuestas

1
  

Además, ¿mi miedo es lógico o es seguro?

Esto no es seguro. La información se puede extraer, por ejemplo, a través de inyección ciega .

Y tu miedo es lógico. No hay una buena razón para no tener defensas contra la inyección SQL .

En el lado pro tienes:

  • no todas las personas del personal siempre deben tener un control completo de su base de datos. Quizás este no sea el caso en este momento, pero puede ser en el futuro.
  • La entrada del usuario aún puede llegar a la aplicación si hay otras vulnerabilidades. CSRF sería uno de los más probables, pero si es accesible desde el exterior, los problemas de autenticación también pueden causar problemas.
  • Sus requisitos pueden cambiar. Tal vez parte del aporte que actualmente está controlado por el personal debe ser controlado por el usuario. ¿Ahora que? Debe cambiar el código existente y esperar que no olvide algunos lugares.
  • Si su código se filtra, esto puede ocasionar daños a la reputación de las compañías, ya que generalmente se acepta que la codificación no segura no es aceptable.
  • en este caso, la entrada en realidad es controlada por el usuario. Esto no es para burlarse, puede ser un problema de seguridad muy serio.

Y no hay contras. Las declaraciones preparadas son fáciles de escribir, y resultan en un código mejor, más fácil de leer y más fácil de mantener.

Originalmente voté para cerrar como duplicado, pero después de releer su pregunta, decidí responderla de todas formas, ya que la pregunta no solo trata sobre cómo explotar esto, sino también si las defensas contra la inyección de sql son necesario en absoluto

    
respondido por el tim 01.09.2016 - 16:08
fuente
2

Descubrí la respuesta que estaba buscando, aunque no hay forma (que yo sepa) de mostrar otros códigos porque de todos modos no presento la información de la base de datos. aún es posible omitir la verificación de seguridad usando un simple ' or ''=' . Mi solución para esto fue agregar capas de complejidad al tipo de códigos que mi programa acepta, por ejemplo, estoy usando un GUID y sé que tiene 36 caracteres en 3 hashes de longitud (-) ... y un código que no presenta este No se permite que las características interactúen con la base de datos en absoluto.

Revise esto impresionante Respuestas para más información sobre el tema.

    
respondido por el wannabeLearner 01.09.2016 - 12:53
fuente

Lea otras preguntas en las etiquetas