Esta pregunta es sobre un pequeño detalle en una tarea escolar más grande. He estado luchando con este pequeño problema durante demasiado tiempo.
ABCTF organizó una competencia de captura de bandera que se llevó a cabo a principios de este año. Uno de los problemas en esta competencia, fue una inyección de SQL. Esta es una URL para la descripción de la tarea, y esta es una URL al formulario de inicio de sesión que se iba a inyectar. Hay una solución publicada para este problema, y se parece a esto:
Nombre de usuario: -1 'union select 1,1,1,1 #
Contraseña: 1
Necesito averiguar cómo se verá la cadena de consulta de back-end. La suposición más simple e ingenua sería
String query = "SELECT FROM user WHERE username = '" + inputA + "' AND password = '" + inputB + "';";
execute(query);
Pero esto produciría
String query = "SELECT FROM users WHERE username = '-1' union select 1,1,1,1 #' AND password = '1';";
execute(query);
El problema más evidente con esto, es que las comillas están desequilibradas. Además, no entiendo qué salida produciría la instrucción SELECT. Como lo he entendido, el carácter "#" se usa para denotar tablas temporales en MS SQL Server, como "#temporary_table". He jugado con otras declaraciones simples también, pero nada que tenga sentido.
¿Alguien tiene una idea de cómo se vería la consulta de backend ? Cualquier sugerencia es apreciada.