Algunas consultas relacionadas con la inyección SQL

0

[No estoy realmente seguro de si debería publicar esto en SO o aquí. Creo que mis preguntas pueden ser respondidas si he tenido una buena experiencia con MySQL. Pero, yo no. Así que probablemente, la mayoría de ustedes definitivamente querrán decirme que lea un buen libro de SQL (si es así, dígame qué libros leer, ya que la respuesta a mis preguntas no será respondida directamente en ninguna pregunta). Por lo tanto, definitivamente me gustaría leer un libro que responda a tales preguntas). Sin embargo, actualmente quiero ensuciarme las manos con la prueba de la pluma de la aplicación web y no puedo hacerlo sin sumergirme directamente en ella. Además, la experiencia y el conocimiento vienen con la práctica. :) Así que por favor ten paciencia conmigo.

Soy nuevo en la aplicación web pen-testing y practico la inyección de SQL en Mutillidae. Estoy en la página de inicio de sesión de información del usuario y di la entrada como ' or 'a' = 'a . Trabajó. Obtuve todos los registros de la base de datos.

Ahora quiero saber cuántas columnas hay en la base de datos y los tipos de columnas (solo para practicar). Quería probar el método "ORDER BY" y el método "UNION SELECT 1, null, null--" incluido en el método Las pruebas de OWASP para la página web de inyección SQL. Así que di mi opinión como ' or 'a' = 'a' ORDER BY 3-- (tenga en cuenta que hay un espacio después de -- . No estoy seguro de cómo ponerlo en el texto preformateado) ya que hubo 3 campos devueltos en mi ataque anterior. Trabajó de nuevo. Así que jugué un poco con la consulta. Intenté 1,2 en lugar de 3 en la segunda consulta y funcionaron bien. El único cambio fue que el orden de los registros devueltos era diferente. Sin embargo, la consulta también funcionó cuando di la consulta de entrada como ' or 'a' = 'a' ORDER BY 4-- y ' or 'a' = 'a' ORDER BY 5-- . Sin embargo, todavía veo 3 campos en la salida. Además, la consulta no funcionó cuando le di ' or 'a' = 'a' ORDER BY 6-- o un número mayor que 6. En su lugar, obtuve un error. Mis preguntas:

  1. ¿Por qué funciona la consulta cuando doy 4 o 5 como entrada? ¿Eso significa que hay 5 columnas? Si es así, ¿por qué los registros de salida solo contienen 3 campos?

  2. ¿Por qué la consulta no funciona cuando doy un valor > = 6?

  3. También noté que el espacio es necesario después del -- . Si no doy un espacio, la inyección de SQL no funcionará. ¿Por qué necesito un espacio?

  4. ¿Por qué no es necesario un ; (punto y coma) en mi consulta inyectada? Por lo que sé de MySQL, no ejecuta la consulta a menos que le dé un punto y coma. Sin embargo, mi consulta se ejecuta aquí perfectamente sin un punto y coma. ¿Por qué?

pregunta Pervy Sage 10.05.2014 - 23:09
fuente

1 respuesta

3
  

¿Por qué funciona la consulta cuando doy 4 o 5 como entrada? ¿Eso significa que hay 5 columnas? Si es así, ¿por qué los registros de salida contienen solo 3 campos?

Sí, la consulta fallaría si desea ordenar por una columna que no existe. Así como posición de la columna 5 funciona pero 6 no, sólo hay 5 columnas seleccionadas. Por qué solo 3 de ellos son visibles para el usuario depende del desarrollador. Tal vez él / ella seleccionó todas las columnas (por ejemplo, * ) en lugar de solo las necesarias o solo las 3 deben ser visibles para el usuario.

  

¿Por qué no funciona la consulta cuando doy un valor > = 6?

Ver más arriba.

  

También noté que el espacio es necesario después del -- . Si no doy un espacio, la inyección de SQL no funcionará. ¿Por qué necesito un espacio?

MySQL requiere un espacio en blanco o un carácter de control después de -- como se indica en Sintaxis del comentario :

  

En MySQL, el estilo de comentario “ --  ” (doble guión) requiere que al segundo guión le siga al menos un espacio en blanco o un carácter de control (como un espacio, una pestaña, una nueva línea, etc.). Esta sintaxis difiere ligeramente de la sintaxis estándar de comentarios de SQL, como se explica en Sección 1.8.2.5, "' -- ' como el inicio de un comentario" .

  

¿Por qué no es necesario un ; (punto y coma) en mi consulta inyectada? Por lo que sé de MySQL, no ejecuta la consulta a menos que le dé un punto y coma. Sin embargo, mi consulta se ejecuta aquí perfectamente sin un punto y coma. ¿Por qué?

El punto y coma solo se requiere como separador entre las declaraciones. También se usa para terminar la entrada de la declaración en la consola mysql .

    
respondido por el Gumbo 10.05.2014 - 23:37
fuente

Lea otras preguntas en las etiquetas