Lo siento de antemano si esta es una pregunta noobish, pero parece que no puedo encontrar la expresión correcta para obtener la respuesta en google o aquí. Soy bastante nuevo en SQL y estoy trabajando en un desafío de SQLi que es Una inyección ciega. La página no devuelve información a menos que ejecute una consulta con éxito o use comillas en un patrón que no he podido identificar, en cuyo caso dice "no puede hacer eso". Es silencioso si causa algún tipo de error con su entrada. Como resultado, no he podido averiguar qué es el backend, qué variante de SQL se está utilizando, cuál es el nombre de la base de datos o cuáles son los nombres de las tablas.
La sentencia que se está ejecutando debe ser algo como " SELECT * FROM table WHERE title='
". El sitio me permitirá volcar todas las entradas de la tabla desde la que está consultando inyectando something' OR '1' = '1
. Sé que hay otra tabla en la base de datos que contiene información que necesito obtener (una marca), pero si intento algo como something' UNION SELECT * FROM users WHERE '1' = '1
, me devuelve "no se puede hacer eso". Incluso después de un montón de bromas con él, no he podido averiguar qué criterios filtra entre comillas. La declaración de UNION que probé tiene la misma cantidad de caracteres de comillas que la declaración OR '1' = '1 que HACE ejecutar, y agregar comillas superfluas que no cambian el significado de la consulta (agregar comillas aleatorias de apertura y cierre, poner una comilla simple en un comentario en medio de la consulta) a veces activa el "no se puede hacer eso" y a veces no lo hace. No he podido identificar un patrón.
Mi pregunta es la siguiente: ¿hay alguna manera de que pueda engañarlo haciéndome pensar que estoy usando el número / patrón de comillas correcto, como un patrón que ya sé que funciona, pero también incluye una declaración UNION codificada en hexadecimal? que se ejecutaría como parte de la consulta? He estado probando cosas como something' OR '1' = '1 CONVERT(varbinary(max), <hex code for ' UNION SELECT * FROM users WHERE '1' = '1>)
pero no obteniendo ningún resultado. Dado que la inyección es ciega, no puedo saber si estoy haciendo algo que es un error de sintaxis (¿esa declaración CONVERTIR convierte realmente el código hexadecimal en ascii que luego se ejecutaría como parte de la consulta?) O si mi lógica está desactivada. Si alguien pudiera hacerme saber si lo que estoy haciendo tiene sentido y / o señalarme la dirección correcta, eso sería muy apreciado.
¡Gracias!