Overpass
La máquina que voy a resolver hoy es Overpass, una máquina de nivel fácil que nos ofrece de forma gratuita Tryhackme.
RECONOCIMIENTO
Ejecuto el commando curl <ip>
y me devuelve que es una pagina web, asi que me dirijo al navegador para analizarla.
Tras navegar por ella descubro que es una empresa que ofrece un servicio de cifrado de contraseñas. Procedo a analizar el codigo fuente de la web y solo obtengo un comentario, sin importancia.
Realizo un scanner de puertos con nmap para comprobar cuales pueden estar abiertos y si existe alguna vulnerabilidad.
1
nmap -sC -O -T 2 -sS <ip> -vvv -oN overpass.txt
Me encuentro los puertos 22 y 80. Ahora voy a comprobar los directorios accesibles de la web con gobuster:
1
gobuster dir -u http://<ip> -w /usr/share/wordlists/dirbuster/directory-list-2.3-small.txt -o directories.txt
Como resultado, me dice que la ruta /admin/
es accessible y me dispongo a comprobarla.
Tras unas horas probando logearme usando Hydra y alguna SQLI pero sin obtener ningún resultado positivo, analizo si contiene archivos javascript. En login.js me encuentro con una vulnerabilidad A2:2017-Broken Authentication
Lo importante de el código se encuentra al fina y podemos explotar esta vulnerabilidad de dos formas distintas:
- modificando el código en la consola.
- creando una cookie.
Una vez modifico el JS refresco la página y obtengo las credenciales para poder acceder por ssh al servidor.
Guardo la clave RSA en un archivo llamado id_rsa. Ahora necesito obtener la clave para poder acceder a el servidor, iré paso a paso:
- Con ssh2jhon para darle formato a la clave:
ssh2john id_rsa > id_rsa.hashes
- Con john, analizo la clave en busca de la contraseña:
john --wordlist=/usr/share/wordlists/john.lst --format=SSH id_rsa.hashes
EXPLOTACIÓN
Ahora me dispongo a conectarme por ssh al servidor, pero me encuentro el siguiente problema…
Para poder logear le doy permisos a el archivo id_rsa y me conecto por ssh a el servidor, con las credenciales obtenidas anteriormente.
Dentro de el servidor, busco los archivos .txt con el siguiente commando:
1
find / -type f -name '*.txt' 2>/dev/null
Me devuelve la primera flag en el archivo user.txt
ESCALADA DE PRIVILEGIOS
Ahora busco los cronjobs para ver si obtengo un vector de ataque… usando el commando cat /etc/crontab
me arroja como resultado que se ejecuta un cronjob con el archivo buildscript.sh el cual podemos explotar.
Llegado a este punto analizo la situacion:
- Si me fijo en el cronjob, ejecuta la descarga de un archivo llamado buildscript.sh de la ruta
overpass.thm/downloads/src
Entonces… como atacar a la máquina? para ello realizo los siguientes pasos
- Edito el archivo
/etc/hosts/
para redirigir la conexion a mi maquina atacante, cambando la direction ip. - Creo una falsa ruta:
~/downloads/src/
y dentro creo un archillo llamado buildscript.sh que contiene un commando para poder ejecutar bash con privilegio de superusuario de forma temporal:echo '#!/bin/bash \n chmod +s /bin/bash' > buildscript.sh
- Creo un servidor http con el puerto 80 para que la maquina victima se pueda conectar a mi máquina atacante y descargue asi el archivo.
Una vez descarga el archivo de mi servidor, accedo a la ruta /dev/shm/ y ejecuto el commando /bin/bash -p
para iniciar una nueva instancia del shell Bash en modo privileged.
El directorio /dev/shm
es una forma de acceder a esta memoria compartida como si fuera un sistema de archivos. Los archivos que se crean dentro de /dev/shm
son en realidad bloques de memoria compartida que pueden set utilizados por los procesos del sistema.
Esto puede set útil para situaciones en las que varios procesos necesitan compartir datos de forma rápida y eficiente, como en aplicaciones de alto rendimiento, servidores web, bases de datos en memoria, etc.