Token Of Hate

Máquina Token Of Hate de la plataforma The Hackers Labs

Autor: Lenam

Dificultad: Experto

Token Of Hate

Reconocimiento

Antes que nada, agregaremos un dominio a la máquina en el archivo /etc/hosts, ya que aunque no lo tenga nos facilitará los comandos y demás en un futuro para no tener que recordar la ip todo el tiempo:

Ahora realizaremos un escaneo de nmap para descubrir los puertos abiertos de la máquina:

-p-: Para indicarle a nmap que abarque el rango de 65535 puertos en total.

--open: Para indicar que solo queremos que nos muestre los puertos abiertos.

--min-rate 5000: Para indicarle a nmap que queremos tramitar paquetes no menores a 5000 paquetes por segundo.

-sS: Para aplicar un escaneo de tipo SYN Stealth scan.

-sC: Para aplicar unos scripts básicos de reconocimiento.

-sV: Para poder identificar la versión de los servicios que encontremos abiertos.

-vvv: Esto para que a medida que va encontrando los puertos nos lo imprima por el terminal.

-oN: Para exportar el escaneo en formato nmap (osea como se nos imprime por consola).

Podemos ver 2 puertos abiertos:

Puerto 22: OpenSSH 9.2p1 Debian

Puerto 80: Apache httpd 2.4.62

y podemos ver que es un debian.

Puerto 80

En el puerto 80 podemos ver unos datos bastante interesantes:

como vemos, dice que pasa caracteres unicode a ascii para tener compatibilidad con equipos viejos, y si buscamos un poco para ver si podemos aprovechar algo como eso, veremos que podemos aprovecharlo para muchas cosas: Bypass_WAF_Unicode

Además podemos ver otro mensaje que dice que el usuario administrador revisa constantemente los usuarios registrados, sabiendo esto podemos pensar que se reflejan en algún lado y podemos pensar en un xss para robar los cookies del admin. Para hacerlo, simplemente crearemos un payload el cual nos envíe las cookies y luego utilizaremos un script muy simple que solo reemplaza caracteres por unos parecidos, lo cual hará que al pasarlo a ascii y representarse en la página se de el xss ya que nuestro payload volverá a la normalidad:

esto lo metemos en un archivo llamado payload.

Ahora, creamos el script:

y listo, ya tenemos ambas cosas. Ahora simplemente ejecutamos el script de la siguiente manera:

escuchamos con python3 por el puerto 5454:

y nos registramos con el payload.

Al cabo de unos segundos, nos llegará la siguiente petición con la cookie del usuario administrador:

ahora creamos una cuenta normal, iniciamos sesión y reemplazamos nuestra cookie por la del admin.

Una vez dentro, podemos ver que se puede generar un pdf con la lista de usuarios, y sabemos que se genera dinamicamente ya que utiliza los nombres de los usuarios para hacerlo (lo cual nosotros podemos controlar registrando uno). Viendo esto podemos aprovecharlo para muchas cosas, como hacer peticiones GET y POST para poder leer archivos internos de la máquina, o no solo para eso, si no que también para obtener el contenido de páginas y demás. Mas info: HackTricks

Luego de probar distintos puertos con este payload (registrando el usuario y descargando el pdf):

logro encontrar el puerto 3000 abierto y veo que dice lo siguiente:

Intrusión

Como podemos ver, es una api en la cual tenemos que logearnos para obtener un json web token, luego de logearnos, podemos ejecutar un comando pasando el jwt y el comando pero solo si nuestro usuario es admin. Sabiendo esto, podemos primero script para logearnos:

este no lo pasaremos a la web, este lo crearemos en nuestra propia máquina como jwt.js. Ahora si creamos el payload:

este lo transformamos y lo registramos en la web. Nuevamente creamos un servidor de python por el puerto 9090 y al cabo de un rato vemos lo siguiente por nuestro segundo servidor que se encuentra en el puerto 7070:

lo pasamos de url encode a ascii con un urldecoder y veremos el mensaje real:

Teniendo el token, lo pasamos por jwt.io y modificamos el rol de "user" a "admin".

Ahora creamos un archivo llamado shell que contenga lo siguiente:

luego, modificamos el script para que tenga el siguiente contenido (esto para no tener que volver a enviar un nuevo payload para cargar el js):

escuchamos en el puerto 443 con netcat:

y al recibir la petición también recibiremos una shell.

Escalada De Privilegios

Ctesias

Una vez dentro, luego de enumerar un rato, busco capabilities y veo lo siguiente:

al comparar los hashes md5, noto que es realmente el binario node:

por lo que simplemente para escalar privilegios debemos ejecutarlo de la siguiente manera:

Una vez ejecutado seremos root.

Root

Root

Gracias por leer ;)

Última actualización