Resolviendo Web Simplay
El pasado fin de semana, el Red team de synack iniciaba su ctf invitacional
We are excited to support the @SynackRedTeam Five #CTF!
— Hack The Box (@hackthebox_eu) November 1, 2021
You still have time to register and hack some great #HTB challenges: https://t.co/ORiXH0p6mH
$2,800 in prizes! Including an exclusive Challenge Coin by #HTB & #SRT 🎁#HackTheBox #CaptureTheFlag #CyberSecurity #Hacking pic.twitter.com/nY9Cu2qtp7
El ctf contenía varios desafíos:
- Crypto
- Forensic
- Misc
- Pwn
- Reversing
- Web
Mi problema fueron los dias 5-7. Estaba en mi trabajo y no tuve tiempo para resolver estos desafíos, pero todos los desafíos se podían descargar. En esta publicación resolveré el desafío “simplay”. Todos los desafíos estan aqui
El reto
El título del reto decía:
The agency has picked up on an addictive mobile application that predicts when someone will find love. We suspect foul play by the evil company behind this obvious scheme. We think that they will try to have this application installed on every device in the world, in order to mind control it’s users. Agent, we need you to infiltrate the recent website they launched and save the world.
Web_simplay, ¿Qué hace?
Web_Simplay es un sitio web simple y muestra esto:
Solo contiene un boton “Try again”, cuando se hace clic en él, envía una solicitud con un valor “r” por defecto
|
|
Cuando tratamos de cambiar el valor ‘r’, el sitio web cambia el mensaje de amor. por ejemplo, cuando intentamos esto:
|
|
Obtenemos esto:
Obteniendo la flag
En este reto nos dan el código fuente, los archivos interesantes son:
- “TimeController.php” a cargo de recibir la solicitud del usuario y almacenarla en la variable “$format”
- “TimeModel.php” a cargo de generar fecha y mostrarla al cliente usando “$format”
Si revisamos detalladamente el archivo “TImeModel.php” en la linea 14 se usa la function “eval”, esa es la clave de este reto porque ejecuta el código php como una cadena y lo almacena en la variable “$time”, esa variable nos muestra el tiempo en que encontraremos el amor.
Saltando la funcion eval() para obtener RCE
Para saltarnos la función eval() solo reemplace el contenido de la variable “$time” y comente el siguiente carácter sí similar a la inyección sql pero no igual vamos a ver el código:
|
|
la solicitud anterior nos muestra:
Ahora estamos seguros de que se omite la función eval, el script “entrypoint.sh” mueve la bandera de “/var/www” a “/”, la siguiente solicitud lista “/”
|
|
Finalmente, obtenemos la flag con:
|
|
Notas
Otra forma de conseguir RCE en este reto es usando:
|
|
- ls con acentos graves es un operador de ejecución
- “print” imprime solo un argumento y siempre devuelve 1
- ${} para evaluar una expresión
- si intentas en php shell:
|
|
obtienes la salida de “ls” y finalmente el error:
|
|
porque print siempre devuelve 1
Happy hacking!!!!