Vamos con la habitación Mister Robot de Tryhackme, un desafío para principiantes / intermedios, veremos cómo se da.

De momento, abiertos los puertos 80 (http) y 443 (https).

Con una inspección visual, aparece una web interactiva estilo línea de comandos, que nos autentica en Fsociety y nos ofrece varios comandos:

  • prepare.
  • fsociety.
  • inform.
  • question.
  • wakeup.
  • join.

Vamos a ir probando a ver qué dicen. No lo especifica, pero con help nos enumera los comandos.

Prepare y Fsociety llevan a vídeos de Mr. Robot, inform nos lleva a varios artículos y responsos de Mr. Robot.

Cuando inspecciono el código fuente, aparece esto como comentario que resalta.

\ //\ | | /\ ||~~ |\ | /~~| /\ | /\ |\ || \ /| || | /\ |/|– | \ || | | /\ | | || \ ||– | __/ _/ / | | | | __/ | / |__/ | ||

Question lleva a más responsos.

Question lleva a otro vídeo.

Join me lleva a un chat y dice que, si estoy preparado, le dé un email. Si le pongo el email, me dice que estaremos en contacto. De momento, no envía email.

Mientras tanto, Gobuster ha estado escaneando y me ha devuelto cosas interesantes. Hay archivos robots.txt, es un Wordpress lo que tenemos ahí, hay mapa del sitio… Todo eso nos puede dar pistas.

La primera clave a encontrar nos dice como pista «robots», veamos el robots.txt y efectivamente, hay algo ahí.

  • fsocity.dic
  • key-1-of-3.txt

Veamos si existen esos archivos. El de texto nos da la primera clave que pide la máquina:

073403c8a58a1f80d943455fb30724b9

El archivo dic es un diccionario que imagino que habrá que usar para romper claves y similares más adelante.

Sigamos, porque Gobuster nos ha dado una mina de cosas. Hay un directorio phpmyadmin que pone: For security reasons, this URL is only accessible using localhost (127.0.0.1) as the hostname.

Eso significa que podríamos acceder creando un túnel SSH que enrute las peticiones al servidor web desde 127.0.0.1. Esto implica que debemos ser capaces de conectar al servidor por SSH a fin de acceder a la aplicación de manera remota. De momento, no podemos, así que lo dejamos en barbecho.

La segunda clave a encontrar dice como pista: fuente de color blanco. La tercera clave dice nmap.

Veamos, Wordpress está en versión 4.3.1. Analizamos con Wpscan.

wpscan --url http://IP_Objetivo --api-token MI_TOKEN_API_DE_WPSCAN

La mayoría de vulnerabilidades son una vez identificado, pero no me deja crear un nuevo usuario cuando visito wp-signup.php

Hay un readme que dice: I like where you head is at. However I’m not going to help you.

Hay una imagen de Fsociety con un reloj, uso la herramienta stegseek por si la imagen contiene un mensaje oculto y trato de romperlo con el diccionario que me han dado, pero nada.

No me apetece, pero vamos a probar fuerza bruta con el acceso a Wordpress, porque al final mi objetivo es explotarlo para subir una shell.

Pero, ¿qué usuario probamos? Voy poniendo varios, admin, mrrobot, robot… Parece que Elliot (el protagonista de la serie), es un usuario válido. Otro problema es que el diccionario tiene más de 800.000 entradas, una burrada para pasarle a Hydra.

wc -l fsocity.dic # Imprimir el número de líneas, son demasiadas
sort fsocity.dic > fsocity-ordenado.dic # Ordeno el diccionario y lo vuelco a otro fichero

Veo que hay un montón de términos repetidos, así que podemos dejar los únicos con:

uniq fsocity-ordenado.dic > fsocity-limpio.dic # Para dejar solo entradas únicas
wc -l fsocity-limpio.dic # Y muestra 11 líneas, mucho más manejables.

Soy consciente de que todo lo anterior se puede resumir en:

sort fsocity.dic | uniq > fsocity-ordenado.dic

Pongamos a Hydra a trabajar para romper por fuerza bruta la entrada al Wordpress

hydra -l elliot -P fsocity-limpio.dic IP_Objetivo -V http-form-post '/wp-login.php:log=^USER^&pwd=^PASS^&wp-submit=Log In&testcookie=1:S=Location'

Se toma su tiempo, pero al menos no son 800.000 intentos y acabamos teniendo un éxito, la contraseña es: ER28-0652

Somos administradores, así que explotamos esto subiendo una shell inversa.

Me voy a Appearance > Editor > 404.php

Uso la shell inversa de Pentestmonkey, adaptando IP y puerto a mi IP de ataque y el puerto en el que voy a poner el escuchador de Netcat.

https://github.com/pentestmonkey/php-reverse-shell/blob/master/php-reverse-shell.php

Guardo y configuro un escuchador de Netcat.

nc -lvnp 4000

Ahora, visito cualquier página que no exista para que dé error 404 y conseguir la shell.Ya estoy dentro y veo que soy el usuario daemon cuando ejecuto whoami.

Primero, estabilicemos la consola con

script -qc /bin/bash /dev/null

Hay un usuario root y uno robot cuando visualizo el archivo /etc/passwd. El directorio /home/robot contiene la segunda clave y otro archivo interesante, pero claro, no soy robot. Sin embargo, hay un archivo que puedo leer, password.raw-md5, que parece contener la contraseña encriptada.

Hashes.com me lo desencripta sin problemas y es: abcdefghijklmnopqrstuvwxyz

Cambiamos de usuario son su robot y leemos el archivo:

822c73956184f694993bede3eb39f959

La clave 3 nos dice nmap e imagino que será un archivo que posee root, porque a su directorio no podemos entrar, y tras hacer:

find / -type f -iname "*key*.txt" 2>/dev/null

Solo nos aparece la clave que tenemos. Veamos cómo escalar privilegios.

La pista para la tercera clave pone nmap y, tras comprobar con sudo -l que no podemos elecutar nada, imagino que nmap tiene un bit SUID y es el camino. Busco archivos con ese bit.

find / -type f -perm -u=s 2>/dev/null

Y efectivamente aparece nmap con el bit SUID. Veamos en GTFObins cómo explotarlo.

Miramos la versión de Nmap pasando -V y nos dice que es la 3.81, hasta la versión 5.21, permiten ejecutar archivos (después se tapó ese agujero para evitar cosas como las que vamos a hacer). Explotemos eso con:

nmap --interactive
!/bin/sh
whoami # Nos dice que somos root

Entramos en /root y leemos la última clave.

04787ddef27c3dee1ee161b21670b4e4