Introduction

Bienvenido a la aplicación de base de datos Light.
Estoy trabajando en una aplicación de base de datos llamada Light. ¿Te gustaría probarla?
Si es así, la aplicación se ejecuta en el puerto 1337. Puedes conectarte usando nc 10.80.136.72 1337.
Puedes usar el nombre de usuario smokey para empezar.
Getting the Flags
Reconocimiento Inicial
Comenzamos realizando un escaneo de puertos abiertos.

Ahora escaneamos más a fondo los puertos abiertos.
Profundización
Vamos a ver qué hay en el puerto 1337.

Parece que nos da la contraseña del usuario, ahora vamos a tratar de conseguir el username del administrador.

Cuando ponemos un usuario inexistente, la aplicación nos devuelve Username not found., esto significa que la aplicación está haciendo una query para mirar nombres de usuarios del estilo:
SELECT password FROM users WHERE username=input
Esto significa que puede que exista una vulnerabilidad de tipo SQLi. Para comprobarlo introducimos una '.

Explotación
Vamos a intentar explotarla. Como parece que sigue ejecutando la query después de la comilla vamos a intentar introducir un comentario.

Parece que los comentarios están filtrados, vamos a ver cómo bypassearlo.

Parece que puede ser la palabra clave SELECT la que "no le gusta".

Parece que no puede ejecutar varias queries en una única línea y por eso se queda colgada. Vamos a probar con UNION SELECT.

En SQL, el operador > es un comparador que devuelve todo lo que coincida después de la string. Como en la primera comilla dejamos una aislada, cuando ponemos la última la string queda vacía (SELECT * FROM users WHERE username > ''). A efectos prácticos, esto nos devuelve todos los nombres. Sin embargo aquí nos topamos con el siguiente problema, que es que no conocemos el nombre de las tablas. Vamos a averiguarlos.

Después de probar varios payloads encontramos el que nos funciona. Así obtenemos los nombres de las tablas. Ahora toca extraer lo que necesitamos.

Así obtenemos el nombre del administrador.

Con esta otra query encontramos la flag. Pero nos falta la contraseña, por lo que vamos a obtener la contraseña.

