es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

No pude entender cómo funcionaba la carga útil.

Estaba resolviendo una de las salas de TryHackMe sobre la inyección SQL. Pero no pude entender una cosa que vino a mi mente, y después de pasar mucho tiempo pensé que sería mejor hacer esa pregunta aquí. En la sala, hay una máquina para desplegar, una vez que se desplegó la máquina me dio una interfaz (webapp) que recibe entradas de mí así:

imagen

Y si le das un valor como “test”, devuelve la siguiente salida:

imagen

Cuando lo vi, pensé que era una pregunta fácil sobre la inyección SQL, así que probé las cargas útiles de inyección SQL más básicas para los sistemas de gestión de bases de datos comunes, como por ejemplo:
1. ”; sleep(1) —
2. ” or 1=1 —

Pero ninguno de ellos funcionó y me devolvió un mensaje de error como este:

imagen

Después de ese fracaso, ejecuté sqlmap y encontró 2 tipos de carga útil de inyección SQL con las siguientes cargas útiles:

imagen

Luego me di cuenta de que en la inyección SQL basada en el tiempo, sqlmap utilizaba “||”. Entonces intenté enviar ”|| (select sleep(2)) –‘. Y funcionó. Ahora mi pregunta es, ¿por qué mi primera carga útil (‘; select sleep(2) –‘) no funcionó, pero esta sí funcionó?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    La razón por la cual la primera carga útil '; select sleep(2) -- no funcionó pero '|| (select sleep(2)) -- sí funcionó es debido a la forma en que se está manejando la entrada en el back-end. La primera carga útil se interpreta como dos consultas separadas: '; y select sleep(2) --, siendo el punto y coma un delimitador entre las dos. Esto resulta en un error ya que la primera consulta está incompleta.

    Por otro lado, el || utilizado en la segunda carga útil se utiliza como un operador lógico OR. Esto significa que toda la carga útil se trata como una sola consulta, con el || separando el código inyectado de la consulta original. En este caso, el código inyectado 'select sleep(2) se ejecuta como parte de la consulta original, lo que provoca el retraso esperado.

    El uso de operadores lógicos como || y && es una técnica común utilizada en ataques de inyección de SQL para combinar el código inyectado con la consulta original. Esto puede ayudar a asegurar que el código inyectado se ejecute como parte de la consulta en lugar de ser interpretado como una consulta separada.

Comments are closed.