Overpass
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-
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 :
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 :
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 :
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 ?)
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...
- Ici on a un script qui n'apparaît pas sur toutes les autres pages : /login.js
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"
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.
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 :
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 :
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 :
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.
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 :
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)
On a donc récupéré le flag root !