> **Objectif** : Obtenir l'accès avec un user lambda pour ensuite élever nos privilèges.

---
## 1. Reconnaissance initiale

Tout d'abord on va lancer un scan nmap pour trouver potentiellement des services exposés ou technos vulnérables.

```
sudo nmap -sSV --top-port=1000 -Pn --disable-arp-ping -O 10.130.161.179 -oN Overpass-
```

![Résultat du scan nmap](IMG/Overpass/01-NMAP.png)

> **Analyse** : Ici on peut voir seulement deux ports ouverts.
> - 22 SSH qui semble être à jour
> - 80 Golang sans forcément de version trouvée, on va donc devoir chercher plus loin.

---

## 2. Énumération Web

Avant de lancer l'énumération on va se rendre sur la page HTTP : 

![Page d'accueil de l'application](IMG/Overpass/02-page-accueil.png)

On peut naviguer un petit peu pour trouver quelque choses de pertinent, le code source qui pourrait nous être utile. Une fois téléchargé on peut un peu analyser : 

![Code Source Overpass](IMG/Overpass/03-code-source.png)

On voit que le password manager utilise du ROT47. Ensuite dans le restant du code il n'y a rien de particulier.

On peut passer à l'énumération :

```bash
gobuster dir -u http://10.130.161.179/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -o gobuster.txt
```

**Découvertes** :

- /IMG/Overpass
- /downloads
- /aboutus
- /admin
- /css

> **Analyse** : Formulaire de log in (potentiellement brute-forçable ?)

![Fomulaire Log In](IMG/Overpass/04-formulaire-login.png)

Une fois toutes ces pages listées avant de faire quoi que ce soit de manière active on va inspecter le code source qui semble le même sur toutes les pages sauf...

![Script Log In Source](IMG/Overpass/05-script-login-source.png)

- Ici on a un script qui n'apparaît pas sur toutes les autres pages : /login.js

![Analyse Log In](IMG/Overpass/06-analyse-login-js.png)

En y jetant un oeil on se rends compte qu'il y a la fonction login à la fin. En analysant un peu plus on peut se rendre compte qu'il y a un souci : 

```
    if (statusOrCookie === "Incorrect credentials") {
        loginStatus.textContent = "Incorrect Credentials"
        passwordBox.value=""
    } else {
        Cookies.set("SessionToken",statusOrCookie)
        window.location = "/admin"
    }
}
```

On a si le status ou le cookie n'est pas correct on aura "credential" sinon on a une autre manière de se connecter avec le SessionToken qui sans surprise est manipulable en revanche cela fonctionne que sur /admin.

---

## 3. Point d’entrée / Exploitation

- Type : Mauvaise config
- Endroit : Script /admin/login.js

On va donc utiliser cURL pour ajouter des cookies à notre requête : 

```
curl "http://10.130.161.179/admin/" --cookie "SessionToken=ABCD"
```

![Cle SSH en clair](IMG/Overpass/07-cle-ssh.png)

On reçoit une réponse qui nous est plutôt intéressante. Une clé privée SSH. On va donc essayer de l'utiliser directement, un nom nous est fourni dans la même page : James. On copie donc la clé privée SSH sur notre machine, on lui attribue les bons droits (chmod 600) puis on tente de se connecter.

![PassPhrase à cracker](IMG/Overpass/08-pass-phrase.png)

On se rends compte qu'il y a une passphrase qu'on ne connaît pas. On peut donc tenter de la cracker avec john. 

```
ssh2john id_rsa > id_rsa.hash
```

Cela nous permet de récupérer le hash.

Ensuite on peut utiliser john :

![Crack Hash JohnTheRipper](IMG/Overpass/09-john-crack.png)

On peut donc se connecter à la machine

```
ssh -i id_rsa james@IP 
```

Une fois connecté on peut récuperer le flag user. Avec un peu d'énumération locale on remarque donc que le user a un .overpass (le password manager que les étudiants ont créé) on va y jeter un oeil : 

![Fichier Overpass James](IMG/Overpass/10-fichier-overpass.png)

On obtient donc une suite de caractères. Souvenez vous au début on a pu analyser que le password manager utilise du ROT47. On peut donc tenter ceci sur CyberChef : 

![Rotation MDP Cyberchef](IMG/Overpass/11-rot-47-cyberchef.png)

Bingo ! On a donc le mdp du user james. 

---

## 4. Post-exploitation / Élévation de privilèges

On peut passer l'énumération locale plus poussée avec des banalités comme : 

```
hostname
id
whoami
sudo -l
find / -perm -4000 2>/dev/null
cat /etc/crontab
```

> **Analyse** : 
> - Tâche cron lancée par root toutes les minutes. 
> - Pas d'IP mais un nom : overpass.thm
> - Analyse de /etc/hosts

- Vulnérabilité / mauvaise config : <SUID, sudo mal configuré, kernel exploit, etc.>
- Explication du raisonnement.

![Permission Hosts](IMG/Overpass/12-permission-host.png)

Si on regarde les permissions on s'aperçoit qu'on a les droits d'écrire dans le /etc/hosts. On va donc pouvoir remplacer 127.0.0.1 par notre IP puis servir un script qui nous permettra d'exfiltrer des données du dossier root.

On va donc recréer l'arborescence identique au script : 

![Arborescence Script](IMG/Overpass/13-arborescence-script.png)
![Script](IMG/Overpass/14-buildscript-sh.png)

Ensuite le script sera simple on va envoyer la sorte de root.txt vers un fichier texte dans le home du user sur lequel on est. 

Il nous reste plus qu'a ouvrir un serveur HTTP avec python (attent il faut faire ça dans webroot pour que lorsque ça partage on ait ceci : overpass.thm/downloads/src/buildscript.sh et ici overpass.thm sera notre machine)

![Flag Root](IMG/Overpass/15-flag-root.png)

On a donc récupéré le flag root ! 
