SKynet - TryHackMe
SUMMARY
En este caso debemos encontrar dos banderas ubicadas en la maquina Skynet
. Donde a partir del escaneo de puertos de Nmap
pude saber que hay un servicio SMB
utilizando los puertos 139 y 445, y un servicio HTTP
utilizando el puerto 80. Luego, utilice el script smb-enum-shares
de Nmap
para enumerar los recursos compartidos por el servidor SMB
. Luego, utilice smbclient
para acceder al recurso compartido Anonymous
. Donde se encontro un posible usuario local milesdyson
en el sistema objetivo y una lista de palabras. Luego, utilice Wfuzz
para encontrar recursos ocultos en el directorio raiz del servidor web. Donde se encontro el recurso squirrelmail
, que viene a ser un formulario o login para acceder a la interfaz de la aplicacion web de correo electronico SquirrelMail
. Luego, utilice Hydra
para realizar un cracking de contraseñas sobre la aplicacion web con la lista de palabras encontrada anteriormente. Donde se llego a encontrar unas credenciales validas. Luego, en uno de los correos electronicos que recibio el usuario Miles Dyson
se encontro las credenciales renovadas de su recurso compartido en el servidor SMB
. Luego, llegamos a acceder al recurso milesdyson
. Donde se llego a encontrar un archivo que contenia una ruta de una aplicacion CMS
, que se ejecuta en el servidor web. Luego, explote la vulnerabilidad Remote File Inclusion
que presentaba la aplicacion CMS
. Llegando obtener acceso al sistema objetivo siendo el usuario www-data
. Luego, se encontro una tarea cron
ejecutada por el usuario root, que utilizaba el comando tar
y un comodin o wilcard. Donde aproveche el uso del comodin en el comando tar
para que el usuario root genera una conexion reverse Shell hacia mi maquina. De esta manera llege a ser el usuario root.
FASE RECONOCIMIENTO
Para resolver este ejercicio empezaremos utilizando el comando openvpn
con el fin de establecer una conexion VPN con la red virtual donde esta el sistema Skynet
. Para ello utilizaremos el archivo de configuracion, que lo podemos descargar en la plataforma de Tryhackme, que puede incluir informacion como la direccion del servidor VPN, los certificados y claves de seguridad, la configuracion de encriptacion, etc.
Luego de que se establece la conexion VPN se crea una interfaz virtual de red en nuestra maquina. Donde se enruta todo el trafico de red a traves de esa interfaz.Ademas, la plataforma de Tryhackme nos muestra la direccion ip
de la maquina Skynet
FASE ESCANEO Y ENUMERACION
Luego pasaremos a la fase de Escaneo y Enumeracion con el fin de poder escanear los puertos del sistema objetivo. Ademas, obtendremos los servicios que se han levantado en los puertos abiertos, las versiones de los servicios, y el sistema operativo del sistema Skynet
. Para ello utilizaremos Nmap
.Donde le pasaremos los siguientes parametros:
- El parametro -sC o -script=”default” para utilizar todos los scripts de la categoria default con el fin de realizar un escaneo y deteccion de los puertos demanera avanzada.
- El parametro -sV con el fin de conocer las versiones de los servicios levantados en los puertos abiertos.
- El parametro -n para evitar la resolucion DNS, y el parametro -max-rate para indicarle el numero maximo de paquetes por segundo que va a utilizar Nmappara el escaneo con el fin de evitar sobrecargar la red con el trafico generado por la herramienta.
- El parametro -p- para realizar un escaneo de los 65535 puertos del nodo y el parametro -open con el fin de que nos muestre informacion solo de los puertosabiertos.
Los resultados que obtuvimos del escaneo vienen a ser:
- Hay un servicio
HTTP
que se esta levantado en el puerto 80, y el programa servidor HTTP que se esta corriendo. Ademas, la version del programa servidor - A partir del script
http-tittle.nse
deNmap
llegamos a obtener el valor de la etiqueta tittle de una pagina web que se aloja en el servidor web. - Hay un servicio
SMB
que se esta levantado en el puerto 445 y 139 - Hay un servicio
SSH
, que esta levantado en el puerto 22, y el programa servidor SSH que se esta corriendo. Ademas, la version del programa servidor SSH
Ahora accederemos a la pagina web a traves de mi navegador web para observar su contenido.
Observamos que se trata de una pagina de inicio de una aplicacion web que se esta ejecutando en el servidor web.
Ahora utilizaremos el script smb-enum-shares.nse
de Nmap
para poder enumerar los recursos compartidos del servidor SMB
.
- Podemos observar que el script enumero el recurso compartido
anonymous
, y se pudo acceder al recurso a traves de una sesion de usuario anonimo, sin proveer credenciales durante la autenticacion. Ademas, el tipo delrecurso Anonymous
nos indica que es un directorio en el cual esta configurado los permis lectura y escritura para los usuarios anonimos. - Podemos observar que el script enumero el recurso compartido
milesdyson
, y no se pudo acceder al recurso a traves de una sesion de usuario anonimo.Por lo tanto, es necesario proveer unas credenciales para acceder al recurso. Ademas, la ruta de donde se ha colocado este recurso compartido viene a ser el directorio home del usuario locamilesdyson
en el sistema destino.
Ahora accederemos al recuso compartido anonymous a traves del programa cliente SMB SMBClient
.
Podemos observar que el recurso compartido anonymous
viene a ser un directorio que contiene el archivo attention.txt
y un directorio logs
. Ademas, el directorio contiene tres archivos. Todos estos archivos que hemos encontrado lo vamos a descargar en mi sistema a traves del comando get.
Podemos observar que el contenido del archivo attention.txt
viene a ser un mensaje donde podemos extraer el nombre de un usuario local del sistema objetivo.Ademas,en el archivo log1.txt
encontramos una lista palabras que podemos usar para realizar un cracking de contraseñas online sobre una aplicacion web o el servicio SSH que se esta ejecutando en el sistema objetivo.
Ahora utilizaremos la herramienta wfuzz
, que viene a ser una forma automatizada de realizar fuerza bruta de directorios en el directorio raiz de la aplicacion web, utilizando una lista de posibles nombres de directorios y archivos.
- El parametro -hc con el fin de filtrar los recursos que tenga un codigo de estado HTTP 403,404,400.
- El parametro -w con el fin de indicar la ruta de la lista de posibles nombres de archivos y directorios, que utilizara la herramienta.
- El parametro -u con el fin de indicar la ruta donde se realizara el ataque de fuerza bruta de directorios.
Llegamos a obtener 6 recursos nuevos llamados: admin
, js
,config
, ai
, css
, squirrelmail
.
Ahora accederemos a los recursos a traves de mi navegador web para observar sus contenidos.
Nos damos cuenta de que el acceso a los recursos admin
,css
,js
,ai
,config
esta prohibido, pero si tenemos acceso al recurso squirrelmail
, que viene a ser un formulario o login para acceder a la interfaz de la aplicacion web de correo electronico SquirrelMail
que proporciona una interfaz de usuario basada en web para acceder y gestionar correos electronicos.
FASE HACKING O GANAR ACCESO O EXPLOTACION
Ahora realizare el cracking de contraseñas online sobre el formulario de la aplicacion web SquirrelMail
utilizando la herramienta Hydra
. Teniendo en cuenta que usaremos como name milesdyson
, que fue encontrado en la enumeracion de los recursos compartidos del servidor SMB, y utilizaremos la lista de palabras que encontramos en el archivo log1.txt
.
Podemos observar que la herramienta llego a encontrar unas credenciales validas.
Ahora nos autenticaremos en el formulario de la aplicacion web SquirrelMail
.
Podemos observar que llegamos acceder a la interfaz principal de SquirrelMail
. Donde se observa la bandeja de entrada de los correos electronicos que ha recibido el usuario milesdyson
. Ademas, el primer correo electronico contiene las credenciales para acceder al recurso milesdyson
compartido por el servidor SMB
que se ejecuta en el sistema destino.
Ahora accederemos al recuso compartido milesdyson
a traves del programa cliente SMB SMBClient
utilizando las credenciales encontradas.
Podemos observar que el recurso compartido milesdyson
viene a ser un directorio que contiene varios directorios personales sobre el usuario Miles Dyson. Ademas, accediendo al directorio notes
llegamos a encontrar un archivo llamado important.txt
que lo vamos a descargar en mi sistema a traves del comando get.
Ahora observaremos el contenido de este archivo con el comando cat.
Podemos observar que el contenido del archivo viene a ser una lista de tarea pendientes del usuario Miles Dyson. Ademas, podemos observar la ruta de recurso relacionado con la aplicacion CMS
(Sistema de Gestion de Contenido) que es utilizado para la creacion, gestion y publicacion de contenido en linea.
Ahora accederemos a ese recurso a traves de mi navegador web.
Vemos que se trata de una pagina web que posiblemente ha sido creado utilizando un CMS.
Ahora utilizaremos la herramienta wfuzz
con el fin de realizar fuerza bruta de directorios en el directorio raiz de la aplicacion CMS
, utilizando una lista de posibles nombres de directorios y archivos.
Llegamos a obtener un recurso nuevo llamado administrator
.
Ahora accederemos al recurso a traves de mi navegador web para observar su contenido.
Podemos observar que se trata de un formulario o login para acceder al panel de control del CMS Cuppa
.
Ahora que sabemos cual CMS se esta ejecutando en el servidor web del sistema objetivo, buscaremos informacion sobre el en Internet.
Llegamos a encontrar que la aplicacion CMS Cuppa
presenta la vulnerabilidad Remote File Inclusion
, que se puede realizar ingresando una URL, que apunta hacia un archivo almacenado en un servidor web externo, como valor al parametro GET urlConfig
con el fin de que la funcion include
, contenida en el archivo alertConfigField.php
, realice una solicitud GET al servidor web externo para solicitar el archivo. Luego, el archivo sera ejecutado por la funcion y se enviara el contenido de ejecucion a nuestro navegador web.
Ahora, utilizaremos el modulo HTTPServer
de Python
que nos permite ejecutar un servidor web en la red local con el fin servir nuestros archivos y subdirectorios del directorio actual. Ademas, uno de estos archivos, que contiene nuestro servidor web. es reverse.php
que va a contener un codigo PHP que cuando se ejecute, nos generara una conexion reverse Shell desde el sistema objetivo hacia nuestro sistema.
Ahora pasaremos la URL http://10.8.123.194/reverse,php
como valor del parametro GET urlConfig
con el fin de que se ejecute el codigo PHP que contiene y nos genere la conexion reverse Shell hacia nuestra maquina, pero antes habilitamos el puerto 1500 en nuestra maquina para que este en escucha y esperando la conexion entrante. Para ello utilizamos la herramienta netcat
. Ademas, utilizamos el comando rlwrap
para que la Shell generada en nuestra maquina presente funcionalidades como el autocompletado de comandos, historial de comandos, etc.
De esta manera obtenemos acceso al sistema objetivo, pero nos damos cuenta de que somos el usuario www-data
, y observando el contenido del archivo /etc/passwd
nos percatamos que al usuario www-data se le he configurado una shell nologin que viene a ser una shell no interactiva para limitar al usuario en la ejecucion de ciertos comandos que requieren una tty. Por lo tanto, debemos buscar una vector de escalada de privilegios con el fin de ser un usuario con privilegios mas elevados.
FASE ESCALADA DE PRIVILEGIOS
Ahora observaremos el contenido del archivo /etc/crontab
que viene a ser el archivo crontab
del sistema, que va a contener tareas cron que se ejecutaran en todo el sistema.
Observamos que el usuario root ha establecido que el script backup.sh
como una tarea cron para que se ejecute de manera periodica cada minuto de cada hora de cada dia de cada semana de cada mes.
Ahora observaremos el contenido de ese script.
Podemos observar que el primer comando del script, viene a ser un cambio de directorio hacia el directorio /var/www/html, Luego, el segundo comando utiliza el comando tar
con sus parametros -cf para crear un archivo tar y para especificar la ruta de su ubicacion y el nombre del archivo tar que se creara. Ademas, se utilizara el comodin
para incluir todos los archivos y subdirectorios que haiga en el directorio actual, que viene a ser /var/www/html, en el archivo tar.
Ahora crearemos los archivos -checkpoint=1
y -checkpoint-action=exec=sh reverse.sh
en el directorio /var/www/html ya que gracias al comodin van a ser confundidos como parametros que se le pasan al comando tar
. Por lo tanto, con el parametro -checkpoint=1
, genero un punto de control despues de que un archivo del directorio /var/www/html sea archivado en el archivo tar backup.tgz
. Ademas, con el parametro -checkpoing-atcion
especifico la accion que se tomara en cada punto de control. En este caso se ejecutara el script reverse.sh
, que va generar una conexion reverse Shell hacia nuestra sistema siendo el usuario root ya que el comando tar
lo ejecuta el usuario root.
Ahora habilitamos el puerto 1900 en nuestra maquina para que este en escucha y esperando la conexion entrante, y esperemos un minuto para que el sistema objetivo siendo el usuario root ejecute nuestro script reverse.sh
.
De esta obtenemos acceso al sistema objetivo siendo el usuario root.
Ahora buscaremos las dos banderas contenidas en los archivos user.txt y root.txt. Para localizar los archivos utilizaremos el comando find para buscar desde el directorio /, archivos con sus nombres.