FindMe - TheHackersLabs
En esta ocasión vamos a estar resolviendo la máquina FindMe
Last updated
En esta ocasión vamos a estar resolviendo la máquina FindMe
Last updated
Una vez hayamos descargado, extraído y desplegado nuestra máquina, vamos a proceder a realizar el primer escaneo/barrido de nuestra red local para localizar nuestra máquina.
arp-scan -I eth0 --localnet --ignoredups
> y esto nos reporta lo siguiente:
-I
(eth0) Con este parámetro le indicamos nuestra interfaz de red.
--localnet
le estamos indicamos que queremos analizar nuestra red local
--ignoredups
le indicamos que no nos reporte por pantalla los posibles dispositivos duplicados.
En este caso nuestra máquina victima es la 192.168.1.146
Ahora vamos a realizar un ping con ping -c 2 192.168.1.146
Para ver que la máquina está bien desplegada y tenemos conectividad con ella.
Y vemos que todo está bien.
TTL 64 = Linux
Ahora vamos a proceder al escaneo para comprobar que puertos están abiertos en dicha máquina con Nmap
nmap -p- --open --min-rate 5000 -sS -vvv -n -Pn 172.18.0.2 -oG allPorts
-p-
aplicar reconocimiento a todos los puertos
--open
solo a los que estén abiertos
--min-rate 5000
para enviar paquetes más rápido
-sS
para descubrir puertos de manera silenciosa y rápida
-vvv
conforme descubre un puerto nos lo muestra por pantalla
-n
no aplica la resolución DNS (Para agilizar el escaneo)
-Pn
ignora si esta activa o no la IP
-oG
exportamos el resultado en formato grepeable (para después poder consultarlos si nos hiciera falta)
Y el escaneo nos devuelve lo siguiente:
Encontramos abiertos los puertos 21,22,80 y 8080.
Como podemos comprobar después del escaneo con Nmap encontramos abiertos los puertos: 21,22,80 y 8080. Ahora vamos a proceder a realizar otro escaneo con nmap para ver si nos puede arrojar mas información sobre los servicios y versiones que están corriendo para dichos puertos. Esto lo haremos con el siguiente comando:
nmap -sCV -p21,22,80,8080 172.18.0.2
Y nos arroja la siguiente información:
El escaneo nos reporta lo siguiente, podemos ver muchas cosas pero la que a nosotros nos interesa es que por el puerto 21 FTP está habilitado el usuario anonymous para poder entrar sin tener que proporcionarle contraseña. Asique antes de nada vamos a echar un ojo por ahí a ver que nos encontramos.
ftp 192.168.146
Una vez hayamos conseguido acceder al servicio FTP vamos a utilizar el comando ls
para listar el contenido del directorio en el que nos encontramos y vemos un archivito con el nombre: ayuda.txt
Dentro del servicio ftp no podemos listar el contenido del archivito ayuda.txt, asique lo que debemos hacer el traernoslo a nuestra máquina, y esto lo haremos con el comando: get ayuda.txt.
Después de descargar el archivito ayuda.txt, vamos a salir del servicio ftp, y cuando ya estemos en nuestra máquina atacante vamos a listar el contenido de dicho archivo con el comando: cat ayuda.txt.
Aquí podemos descubrir un usuario potencial Para el servicio jenkins que estará corriendo por alguno de los puertos que hemos encontrado abiertos, y otra cosa muy importante es que nos dice que la contraseña de ese usuario tiene 5 caracteres, comienza con p y acaba en a sería algo como: p---a , esto es una información muy valiosa. Asique ahora vamos a pasar a revisar la web que está corriendo por el puerto 80 y a ver que nos encontramos.
Como vemos nos encontramos con la página por defecto de Apache.
Asique como anteriormente habíamos comprobado también que el puerto 8080 estaba abierto, vamos a acceder a ver que encontramos.
Tras acceder al puerto 8080 podemos ver que por dicho puerto está corriendo el servicio Jenkins.
¿Qué es Jenkins?
Es una herramienta de código abierto, que se utiliza para compilar y probar proyectos de software de forma continua, lo que facilita a los desarrolladores integrar cambios en un proyecto y entregar nuevas versiones a los usuarios. Escrito en Java, es multiplataforma y accesible mediante interfaz web. Es el software más utilizado en la actualidad para este propósito.
Una vez que hemos entrado aquí y vemos que hay un panel de login nos tenemos que acordar de que anteriormente descubrimos un usuario potencial llamado geralt y a su vez vimos que decía que se había olvidado de su password pero que contenía 5 caracteres y empezaba con P y acababa con A .
Asique llegados a este punto tenemos claro que debemos realizar un ataque de fuerza bruta contra el panel de login Pero antes con todas las pistas que nos han dado vamos a utilizar la herramienta Crunch
para crear nuestro propio diccionario con las pistas que nos habían proporcionado.
crunch 5 5 -t p@@@a -o passwords.txt
5
Con el primer número 5 le indicamos el valor mínimo de caracteres que queremos que tenga cada palabra que nos genere.
5
Con el segundo número 5 le indicamos el valor máximo de caracteres que queremos que tenga cada palabra que nos genere.
-t
Especifica un juego de caracteres personalizados que se utilizará.
@
Le decimos que sustituya cada @ por un caractér aleatorio.
-o
Especifica el archivo de salida donde se guardará la lista de palabras generada.
Una vez entendemos como funciona cada flag que le hemos introducido a la herramienta Crunch vamos a seguir.
Tras ejecutar la herramienta Crunch vemos que nos ha generado un diccionario con un total de 17576 palabras.
Antes de hacer el ataque de fuerza bruta, debemos crear un archivito llamado: user.txt y almacenar en el el usuario geralt.
Esto lo podemos hacer con el comando touch user.txt y después entrar en él y escribir el nombre de geralt y guardar y salir
Y nos debería quedar algo así:
Y una vez tengamos esto ya podemos empezar con el ataque. Asique bien, ahora entra en juego una herramienta llamada: Patator que es una herramienta super potente para realizar distintas herramientas, pero que en mi caso utilizaré para la fuerza bruta al panel de login.
Y el ataque lo haremos con el siguiente comando:
patator http_fuzz method=POST url="http://192.168.1.149:8080/j_spring_security_check" body="j_username=FILE0&j_password=FILE1&from=%2F&Submit=" 0=user.txt 1=passwords.txt follow=1 accept_cookie=1 -x ignore:fgrep="Invalid username or password" --threads=10
Los parámetros utilizados para este comando como: j_spring_security_check
los conseguimos analizando la petición al intentar hacer login con cualquier usuario, lo podemos analizar en el navegador o tambien en bupsuite.
Después de lanzar el ataque y esperar un poco nos a encontrado las credenciales: geralt:panda
Una vez que hemos conseguido las credenciales para entrar, vamos a la Web y entramos como el usuario geralt y nos encontramos lo siguiente:
Ahora vamos a intentar entablar una reverse shell, y lo vamos a hacer de la siguiente manera: Nos vamos a:
maange jenkins > script console
Ahora nos vamos a la conocida web de:
Le indicamos nuestra ip , el puerto por el que vamos a ponernos a la escucha y seleccionamos el lenguaje: goovy
. Y nos devolverá lo siguiente:
(debéis poner vuestra IP y el puerto que queráis)
Y ahora en el momento que pulsemos el botón de : RUN se nos entablará la reverse shell, asique antes que nada vamos a ponernos a la escucha con netcat por el puerto que le hemos indicado en mi caso 443 .
sudo nc -nlvp 443
sudo
: Este comando se utiliza para ejecutar Netcat con privilegios de superusuario.
nc
: Esta es la abreviatura de Netcat, la herramienta que se está utilizando.
-n
: Esta opción le dice a Netcat que no intente resolver nombres de host mediante DNS, lo cual es útil para ahorrar tiempo y evitar potenciales problemas de resolución de nombres.
-l
: Este parámetro pone a Netcat en modo escucha. En lugar de iniciar una conexión a un host remoto, Netcat esperará conexiones entrantes en el puerto especificado.
-v
: Activa el modo verbose, lo que hace que Netcat proporcione información adicional sobre lo que está haciendo, como las conexiones que está estableciendo o cerrando.
-p 443
: Este especifica el puerto en el cual Netcat estará escuchando. En este caso, es el puerto 443.
Una vez nos hayamos puesto a la escucha con Netcat nos volvemos a la Web y si recordais donde hemos escrito anteriormente el script para entablar la reverse shell, abajo a la derecha estba el botoncito: RUN.
Asique ahora si le podemos pinchar.
Una vez que hemos conseguido entrar vemos que estamos dentro como el usuario jenkins , hacemos un ls
y miramos ciertas cosas pero no vemos nada interesante,
vamos a intentar migrar al usuario geralt ya que previamente habíamos conseguido la contraseña:
su geralt
y le proporcionamos la contraseña panda
Ahora nos movemos al directorio de geralt y con ls
vemos un user.txt que contiene la flag de user.
Una vez hayamos conseguido esta flag de user la podemos copiar y almacenarla en un archivito para mas tarde cuando consigamos la de root poder entrar en el web de la plataforma y proporcionarlas.
Ahora como somos el usuario geralt vamos a intentar la escalada de privilegios.
Para la escala de privilegios vamos a probar a utilizar el siguiente comando:
find / -perm -4000 2>/dev/null
find
es un comando utilizado para buscar archivos y directorios en un árbol de directorios.
/
especifica el directorio raíz del sistema de archivos, lo que significa que la búsqueda se realizará en todo el sistema.
-perm
es una opción de find
que permite buscar archivos según sus permisos.
-4000
especifica que estamos buscando archivos SUID (Set User ID) activado. El SUID permite que un archivo se ejecute con los privilegios del propietario del archivo, en lugar del usuario que lo ejecuta. Esto es importante porque los archivos con el SUID pueden ser utilizados para escalar privilegios si no están configurados correctamente.
2>
redirige el flujo de error estándar (stderr).
/dev/null
es un dispositivo especial que descarta cualquier dato que se le envíe. En este contexto, se utiliza para silenciar los mensajes de error que podrían generarse debido a la falta de permisos para acceder a ciertos directorios o archivos durante la búsqueda.
Y esto nos reportará lo siguiente:
Vemos que tenemos el binario php8.2 que tiene permisos SUID , por lo que vamos a ir a la página gtfobins y buscar a ver que podemos hacer para conseguir el abuso de ese binario.
Y nos reporta lo siguiente.
y vemos que si ejecutamos:
CMD="/bin/sh" y despues: /usr/bin/php8.2 -r "pcntl_exec('/bin/sh', ['-p']);"
somos el usuario root , nos movemos a su directorio cd /root
y con ls
vemos el archivito root.txt y si le hacemos un cat
vemos la flag de root.
Espero que os haya servido de ayuda, os dejo por aquí abajo el WriteUp de la máquina tambien en video.