¿Cómo funciona esta inyección de SQL única?

0

Encontré un desafío que era vulnerable a la inyección de SQL y fue muy, muy difícil de encontrar. Entonces, ¿cómo funciona este SQL único?

Encontré esto en el formulario de inicio de sesión donde, cuando envié user=\&pass=||1# como carga útil, obtuve acceso al panel de administración.

Este fue el reto. enlace

    
pregunta Utkarsh Agrawal 29.08.2018 - 05:55
fuente

1 respuesta

3

La consulta en cuestión probablemente se parece a esto:

SELECT * FROM users WHERE user = '$user' AND pass = '$pass'

Las variables $user y $pass probablemente se desinfectan eliminando o escapando a " y / o ' . Es por eso que un ataque estándar de ' or '1'='1 o similar no está funcionando.

Con su inyección, obtendrá la siguiente consulta:

SELECT * FROM users WHERE user = '\' AND pass = '||1#'

A medida que escapa el ' de la consulta, user ahora se compara con ' and pass = (que probablemente se evaluará como false , ya que no existe tal usuario). # es un comentario que corta el resto de la consulta, por lo que ||1#' se evalúa como OR true , lo cual será cierto. Ahora es probable que el código de autenticación obtenga el primer resultado de esa consulta, o verifique si se devolvió algo y, por lo tanto, se autentique.

    
respondido por el tim 29.08.2018 - 14:50
fuente

Lea otras preguntas en las etiquetas