[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:
-
¿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?
-
¿Por qué la consulta no funciona cuando doy un valor > = 6?
-
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? -
¿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é?