Probar la vulnerabilidad de inyección de SQL

4

Recientemente he descubierto lo que creo que es una falla grave en la seguridad de un programa de computadora de terceros utilizado en mi empresa. Disculpas por mantener deliberadamente los detalles vagos, ¡pero espero que lo entiendan!

Al ingresar elementos en la base de datos, no se puede ingresar un apóstrofe sencillo en el campo de nombre; los usuarios normalmente han recurrido al uso de '' en su lugar. Por lo tanto, descubrí este problema al intentar analizar la salida CSV de una exportación ejecutada por este programa, cuando la delimitación del valor rompió el analizador que estaba usando.

Hablé con el equipo de soporte responsable de este software de terceros, cuestionando si se trataba de un intento de evitar la inyección de SQL, quien confirmó que la razón de esto era "para evitar problemas en SQL". Si bien este es un sistema de uso interno exclusivo, no puedo evitar sentir que

  1. Esta es una práctica de codificación horrenda: simplemente usar declaraciones preparadas en su lugar resolvería este problema de manera instantánea (además de permitir apóstrofes simples en las exportaciones de CSV y, como resultado, evitar una gran cantidad de soluciones provisionales).

  2. Tiene que haber alguna forma de que uno pueda ejecutar SQL de forma arbitraria sin usar un 'solo'. Es decir. '' o ''' está bien, solo ' no lo está.

Lo planteé con mi administrador tan pronto como lo descubrí (y salté a la conclusión de la inyección SQL), pero antes de que empiece a escalar las cosas, quisiera una confirmación de que es el agujero de seguridad que creo que es ( además de la práctica de codificación horrible.

Si alguien puede confirmar que mis sospechas serían excelentes, y si puede encontrar un ejemplo de código SQL malicioso que no utilice un ' aislado, lo apreciaría enormemente.

    
pregunta Authentik8 04.02.2015 - 14:02
fuente

1 respuesta

2

¿Supongo que los datos se ingresan por algún tipo de interfaz, con una lista de campos?

Para argumentos, asumiré 4 campos. En el primer campo haz esto:

''',(SELECT @@version), (SELECT @@version), (SELECT @@version))--

En los otros campos, coloque todo lo que quiera porque, de todos modos, el doble guión los comenta. Esto debería devolverle la versión del servidor en la segunda columna de los datos.

Editado para agregar: Es posible que necesite un espacio y otro guión al final. (Entonces -- - )

    
respondido por el AlexH 04.02.2015 - 14:29
fuente

Lea otras preguntas en las etiquetas