Se ha visto que los probadores de seguridad ingresan 'o; en los puntos de entrada de la aplicación para probar la inyección de SQL. ¿Por qué se utilizan estos caracteres?
Se ha visto que los probadores de seguridad ingresan 'o; en los puntos de entrada de la aplicación para probar la inyección de SQL. ¿Por qué se utilizan estos caracteres?
El carácter '
se usa porque este es el limitador de caracteres en SQL. Con '
usted delimita cadenas y, por lo tanto, puede probar si las cadenas se escapan correctamente en la aplicación de destino o no. Si no se escapan directamente, puede finalizar cualquier cadena suministrada a la aplicación y agregar otro código SQL después de eso.
El carácter ;
se usa para terminar las declaraciones SQL. Si puede enviar el carácter ;
a una aplicación y no se escapa fuera de una cadena (ver arriba), puede terminar cualquier declaración SQL y crear una nueva que deje una violación de seguridad.
Lea ejemplos de Wikipedia de inyecciones SQL , en particular la sección "Caracteres de escape filtrados incorrectamente".
Esencialmente, en una inyección se espera que proporcione un comando listo con un parámetro. Usted crea este parámetro de tal manera que contiene un comando incrustado, respetando la sintaxis de SQL.
Como un comando suele ser SELECT FROM / UPDATE WHERE FOO='<your entry point>'
, puedes usar nop'; Your own command here
. La combinación de los dos dará una secuencia de dos comandos sintácticamente válidos que se ejecutarán ambos.
Para evitar inyecciones de SQL, haga que valide todas las entradas que no sean de confianza al verificar que pertenezcan a un dominio de la lista blanca de entradas aceptadas (aquí generalmente se escapan caracteres especiales), y también asegúrese de delegar la composición de comandos a la API de base de datos que usa en lugar de hacerlo usted mismo: use una llamada diferente para proporcionar el comando y los parámetros, de modo que la API en la que confía pueda realizar verificaciones adicionales y evitar más vergüenza.
Los evaluadores están tratando de encontrar errores que pueden obtener crédito por encontrar ; no están tratando de encontrar el último problema restante.
En la mayoría de los casos, la entrada se verifica antes de pasar a SQL mediante una función bien escrita, o se usa un parámetro. Por lo tanto, es probable que si se detiene incluso el tipo más básico de inyección de SQL, entonces todos los tipos de inyección de SQL se detienen para el campo de formulario dado.
Por lo tanto, solo poner un ‘
en cada punto de entrada es una forma rápida y fácil de obtener muchos beneficios para el evaluador y su empleador.
(Del mismo modo, una gran cantidad de probadores copiarán / pegarán un texto muy largo, incluso si ningún usuario lo hace, ya que es una forma rápida de verificar si la aplicación está codificada para hacer frente a las entradas que también son largo.)
Lea otras preguntas en las etiquetas sql-injection