SilentDev

Máquina de dificultad media de la plataforma HackMyVM

Comprobación

Empezamos con un ping antes de escanear los puertos de esta máquina y tal es ver si mi máquina atacante se ve con la máquina CTF.

Escaneo de puertos

Una vez que sabemos que nuestras máquinas se ven, vamos a proceder a escanear los puertos.

Al archivo que nos genera el nmap le vamos a aplicar una herramienta que la podéis encontrar en mi GitHub, la cual representa lo que nos reporta nmap más bonito y claro.

Bueno, ahora que sabemos que la máquina tiene abiertos los puertos 22 y 80 vamos a hacer un escaneo un poco más exhaustivo sobre estos dos puertos para conocer las versiones que corren por detrás y lanzar algunos scripts de reconocimiento que tiene nmap escritos en Lua.

Bueno, ahí tenemos un poco más de información, estamos ante una máquina Debian y vemos que en el título pone “Subir imagen”, vamos a entrar y a ver un poco más de cerca todo esto.

Web

Una vez que entramos en la web lo que vemos es esto.

La página principal de la web es un sitio de subida de archivos, de todas formas voy a hacerle un fuzzing para mirar si hay directorios ocultos.

Tenemos un directorio uploads donde se alojan las imágenes que subimos a la web, el index que es la página principal y un upload.php que nos dice lo siguiente.

Me da la sensación de que por detrás hay algo que valida lo que se sube para que sea solamente una imagen, por lo que vamos a ver qué podemos subir.

He intentado subir un archivo .php con una reverse shell pero me ha saltado el error de que no podía subir archivos que no sean imágenes, por lo que he decidido pasar la petición por BurpSuite para ver qué es lo que pasa.

He pensado que igual podría probar a cambiar la cabecera “Content-Type” y poner imagen.

Si ahora probamos vemos que sí que nos deja subir el archivo.

Antes de irnos a la página nos vamos a poner en escucha por el puerto 1212 para que se entable la reverse shell.

Si ahora nos vamos a la ruta “http://192.168.1.234/uploads/reverse.php” veremos que en nuestra terminal tenemos la reverse shell ya entablada.

Escala de privilegios

Ahora que estamos dentro de la máquina vamos a proceder a escalar privilegios, antes de eso vamos a hacer un poco un reconocimiento por las cosas que hay en la máquina.

Parece ser que hay dos usuarios, “alfonso” y “developer” ya que tienen dos directorios en el home de la máquina, por lo que vamos a ver cómo podemos escalar a alguno de ellos.

El usuario www-data parece ser que pertenece al grupo “developers” por lo que podemos ver los siguientes directorios.

Dentro de esos directorios no hay realmente nada importante, pero la cosa es ver si hay alguien que realiza una copia de seguridad, como podemos ver en el crontab no hay nada programado por lo que puede ser que sea un backup manual.

Para ver qué procesos ocurren en la máquina sin ser root vamos a utilizar la herramienta pspy64s (la cual lógicamente no está instalada en la máquina víctima).

Vamos a bajárnosla en nuestra máquina atacante y a compartir el script de la herramienta a través de una web hecha en Python.

Nos la descargamos y ahora desplegamos el servidor web con python3.

Por último, en la máquina víctima nos la bajamos (me la voy a bajar por ejemplo en /opt/project).

Una vez que la tenemos vamos a ejecutarla y a ver si hay alguien haciendo copias de seguridad.

Si esperamos un poco podemos ver cómo el usuario con UID 1002 (seguramente el usuario developers) está haciendo un comprimido de todo lo que hay en la carpeta /opt/project y guardándolo en la carpeta /var/backups/project.tgz.

Bueno para los que se hayan leído otros writeups míos verán que es lo mismo que pasaba en la máquina Quick4, por lo que vamos a explotarlo exactamente de la misma manera ya que en el directorio donde se aplica el tar tenemos permisos de escritura.

Básicamente lo que hacemos es crear archivos con nombres de parámetros de tar para que los interprete como un parámetro que tiene que incluir en la ejecución y no como un nombre de un archivo, esto funciona ya que el tar se está aplicando a todos los archivos (esto lo sé porque el comando tar tiene el * que lo que hace es incluir todos los archivos del directorio).

Vamos a explotar esta manera de escalar privilegios de la siguiente manera.

Hemos creado un archivo shell.sh que se va a encargar de proporcionarnos la reverse shell como el usuario que haga la copia de seguridad y después los otros dos archivos son uno de ellos para que se ejecute el script shell.sh y el otro para darle prioridad a que se ejecute el shell.sh.

Si ahora nos ponemos en escucha por el puerto 12345 vemos que se nos da una shell como el usuario developer.

Ahora que estamos como el usuario developer voy a darme el lujo de conectarme a él a través de SSH para que me sea más cómodo.

Después de crear las claves pública y privada vamos a conectarnos a ella.

Genial, hecho esto seguimos con la máquina.

Después de mirar en el directorio personal del usuario “developer” y ver que no hay nada, he visto que podemos ejecutar el script sysinfo.sh como el usuario “alfonso” sin necesidad de tener una contraseña por lo que vamos a ver de qué se trata.

Bueno, esto es lo que contiene el script como tal.

Viendo qué es lo que hace el script, he visto que me da la posibilidad de proporcionar un parámetro por lo que, si en vez de poner un parámetro de la herramienta que vaya a usar, cierro ese comando con un ; y meto otro, me lo puede llegar a ejecutar como un comando independiente.

Así es como funciona el script sin proporcionarle un parámetro y proporcionándoselo.

Viendo esto voy a probar a cerrar el comando df y a intentar colarle otro.

Ahí vemos que ha funcionado y que ahora somos el usuario alfonso.

Si miramos un poco podemos ver que podemos ejecutar el binario “silentgets” como el usuario root sin necesidad de contraseña por lo que vamos a ver de qué trata.

El cual al ejecutarlo hace lo siguiente.

Parece que extrae del /etc/passwd la cadena del usuario que le pongas.

Quería ver las cadenas imprimibles que hay dentro del binario pero dado que no está instalado me voy a traer el binario a mi máquina para analizarlo.

Después de estar un rato mirando cadenas imprimibles he visto lo siguiente.

Lo que hace es reemplazar el “%s” por una cadena de texto que le pasamos, por lo que podemos intentar hacer lo mismo que en el script de antes, cerrar el grep con un “;” y concatenar otro comando.

Y conseguimos ser root.

Flags

En este CTF se me ha pasado por completo ir buscando las flags, estaba tan centrado en escalar privilegios que se me ha pasado, bueno la primera flag está en el directorio personal del usuario alfonso.

Y la segunda está en el directorio de trabajo del usuario root.

Conclusión

Este es el final de la máquina, me ha gustado el tema de ganar acceso a la máquina, me ha parecido simple pero luego las escaladas de privilegios bastante chulas.

Start searching

Enter keywords to search articles

↑↓
ESC
⌘K Shortcut