Hoy quiero hablarles sobre mi Code, una experiencia que, como cada vez que me enfrento a uno de estos desafíos, me dejó tanto aprendizajes como preguntas.
Para comenzar se hizo un escaneo de todos los puertos abiertos, y luego se escaneó estos para descubrir información valiosa sobre el servidor.
Una vez esto se ingresa al sitio con el puerto 5000, este es un editor de código Python.
En este punto comienza un reto interesante, que es intentar eludir ciertos parámetros para que se ejecute mi código Python, ya que estas protecciones restringen la invocación de algunos elementos que se han considerado en lista negra.
Lo primero fue encontrar la forma de que se imprimiera información que ayudara como punto de partida, en Python existe una función que almacena las variables globales.
También se pueden extraer las variables globales como claves con ".key()"
Se puede observar que el módulo "os" está habilitado; sin embargo, al intentar impórtalo no es posible, ya que ambas palabras han sido restringidas.
Así que una forma es acceder a ese módulo a través de la variable global, pero hay un inconveniente sobre el nombre del módulo, aún sigue estando restringido. 
La forma de abordar esta dificultad es abusar de la forma como está tratando este filtro, las palabras restringidas, y a la vez lo interprete Python pueda ejecutarlo. Una forma es tratarlo como cualquier string, se puede jugar con esa propiedad para sortear ese control.
Ahora que podemos utilizar el módulo "os", lo siguiente es intentar ejecutar bash desde Python, pero siguen apareciendo palabras restringidas.

Una forma de llamar obtener el valor de popen, es a través de la función "getattr", de esta forma se puede obtener esta propiedad.
Ahora para traer el id del usuario en el servidor, se debe invocar la función "read" para ser legible el resultado, el uso de "()" es para hacer llamado de la función y poderlo imprimir.
Es hora de utilizar Shell reverso, donde se hace llamado a mi máquina por el puerto abierto que estará esperado conexión.
La función anterior no imprimió nada, pero se obtendrá acceso a la máquina donde se encontrara la primera bandera.
Lo siguiente es intentar escalar privilegios, buscando en las carpetas se encontró un archivo ".db", donde al abrirlo se pudo encontrar 2 usuarios con hashes.
Se trata de crackear estos hashes con una herramienta online.
Estas credenciales las utilizo para intentar ganar más privilegios, funcionando con el usuario "martin". Luego se verifica los privilegios que posee este usuario, lo cual un script posee privilegios de root.
Se revisa la carpeta backup, ahí se encontró una carpeta con la aplicación, un backup y un archivo llamado "task.json". Este último parece mucho más interesante porque su estructura es para almacenar parámetros.
Al buscar y abrir el archivo "backy.sh, utiliza como parámetros "task.json" para realizar backups. Al modificar la variable que controlaba el directorio que iba a empaquetar, pudo hacerse al directorio de root.
Se ejecuta el script con permisos sudo y pasándole el archivo previamente creado.
Ahora solo es descomprimir la nueva copia de seguridad y leer la flag de root.
ref: 0xdf, hackthebox