[GoldenEye][CTF][TryHackMe]
Challenge niveau medium du site TryHackMe

"This room will be a guided challenge to hack the James Bond styled box and get root. Credit to creosote for creating this VM."
[Task 1] Intro & Enumeration
Commençons les énumérations de façon classique avec Nmap et Gobuster.
1. Nmap
Ce qui nous donne déjà une première réponse :
Use nmap to scan the network for all ports. How many ports are open?
4
2. Gobuster
3. Exploitation
Rendons-nous sur la page html du site avec Firefox

analysons le code source de la page

comme recommandé dans le challenge, inspectons tous les scripts et en particulier terminal.js
4. code source de terminal.js
Who needs to make sure they update their default password?
boris
5. Cyber Chef
Le code source nous révèle un hash qui ressemble furieusement à des codes ASCII.
Confions ce hash à cyber chef et au passage, remarquons qu'il nous propose le décodage « magique »


Ce qui nous donne la réponse à la question suivante.
Whats their password?
InvincibleHack3r
Nous connaissons maintenant deux utilisateurs, boris et natalya et nous avons un mot de passe pour boris.
[Task 2] Its mail time...
1. Firefox
Essayons d'abord de nous connecter via Firefox avec l'utilisateur boris:InvincibleHack3r.


L'analyse du code source de la page ne mène à rien d'exploitable.
Comme suggéré dans le challenge et dans la page index, tentons de nous connecter avec l'utilisateur boris:InvincibleHack3r au serveur pop3 sur le port 55007 trouvé avec nmap .
2. Hydra
Comme les crédentiels de l'utilisateur boris ne fonctionnent pas pour le serveur pop3, le challenge suggère d'utiliser Hydra.
Lançons une brute-force hydra pop3 port 55007 avec la wordlist classique rockyou.txt
Au bout de 10 minutes, nous n'avons trouvé aucun password et la commande semble partie pour des heures ! Dans les challenges THM, les attaques brut-force répondent en général en quelques minutes, certainement en moins de 10 minutes. (Tout dépend évidemment de la vitesse de calcul de votre machine.)
Changeons la wordlist et lançons Hydra avec fasttrack.txt en lieu et place de rockyou.txt.
idem pour natalya
3. Utilisateurs pop3 trouvés jusqu'à présent
boris
secret1!
natalya
bird
4. Réponses aux questions
If those creds don't seem to work, can you use another program to find other users and passwords? Maybe Hydra?Whats their new password?
secret1!
Inspect port 55007, what services is configured to use this port?
telnet
What can you find on this service?
emails
What user can break Boris' codes?
natalya
5. Emails
Boris
Natalya
[Task 3] GoldenEye Operators Training
1. Modifier /etc/hosts
Comme indiqué dans le dernier email de natalya, modifions le fichier /etc/hosts pour y ajouter
Rendons-nous ensuite sur la page severnaya-station.com/gnocertdir
2. Exploitation de la page severnaya-station.com/gnocertdir

Connectons-nous avec les crédentiels xenia:RCP90rulez! trouvés dans le dernier email de natalya et explorons son profil.


Dans les messages de xenia, nous trouvons doak un nouvel utilisateur pop3
Comme pour boris et natalya, passons-le à Hydra
Nous avons le nouveau crédentiel pop3 doak:goat
Lisons ses mails:
Ce qui nous donne un nouvel utilisateur du site dr_doak:4England!
Connectons-nous au site (d'abord logout pour xenial, puis login) et explorons son profil.

Téléchargeons le fichier s3cret.txt et lisons-le:
Le contenu de ce fichier suggère que les crédentiels de l'utilisateur 'admin' du site se trouvent dans la page /dir007key/for-007.jpg

Téléchargeons l'image et analysons le contenu avec la commande strings for-007.jpg
visiblement eFdpbnRlcjE5OTV4IQ== est un hash base64 (présence des deux == à la fin du hash) qui décodé (par exemple cyberchef ou dcode fr) donne xWinter1995x!
3. Exploitation du login Administrateur
Nous avons maintenant les crédentiels admin:xWinter1995x!
Retournons sur le site et connectons-nous en tant que admin et constatons que cet utilisateur a visiblement plus de droits, notamment ceux de modifier la configuration du site.

4. Réponses aux questions
Try using the credentials you found earlier. Which user can you login as?
xenia
Have a poke around the site. What other user can you find?
doak
What was this users password?
goat
What is the next user you can find from doak?
dr_doak
What is this users password?
4England!
5. Prise pied dans la machine - reverse shell
Cherchon la version de Moodle

Lançons une recherche Google d'exploits pour Moodle du style « search exploits moodle reverse shell» et on trouve assez rapidement une vulnérabilité [CVE-2021-21809] du côté du correcteur orthographique de Moodle.
https://ine.com/blog/cve-2021-21809-moodle-spellchecker-path-authenticated-rce
Cette vulnérabilité [CVE-2021-21809] de Moodle permet d'exécuter une commande à distance (reverse-shell) en modifiant le path système du correcteur orthographique.
Un passage par la base de données des exploits de Rapid7 confirme la vulnérabilité et donne la marche à suivre dans l'annexe suivante :
https://talosintelligence.com/vulnerability_reports/TALOS-2021-1277
"To exploit the shell injection vulnerability, the administrator sets a path to the legacy server-side spellcheck binary (aspellpath) containing a backtick shell injection and sets PSpellShell as the spellchecking engine. When a server-side spellcheck is requested, lib/editor/tinymce/plugins/spellchecker/classes/PSpellShell.php uses aspellpath to unsafely construct a shell_exec command. The spellchecker plugin does not have to be enabled."
Lançons une recherche de 'spell' dans la page Moodle admin de notre cible

Comme indiqué dans la vulnérabilité, changeons le correcteur en PSpellShell

Cherchons un oneline reverse-shell par exemple dans revshells.com

Essayons un de mes reverse-shells préféré, le Python3 shortest:
Copions le reverse-shell dans Moodle et sauvegardons le tout.

Mettons Kali à l'écoute du port 12345 avec nc -nvlp 12345
Dans Moodle créons une nouvelle entrée de blog et lançons le correcteur orthographique

Nous voilà entrés dans la machine
[Task 4] Privilege Escalation
Transférons les fichiers nécessaires de la machine Kali vers la machine cible et utilisons ma méthode générique d'analyse des possibilités de 'privilege escalation'.
1. sudo -l
Inexploitable
2. suid3num.py

Rien d'exploitable à première vue
Bien que le challenge nous indique d'utiliser la vulnérabilité OverlayFs, je préfère rester plus générique dans mon analyse et utiliser l'outil les.sh.
Voici le résultat de les.sh suggérant des vulnérabilités exploitables dans l'ordre de leur probabilité d'exploitation

4. Kernel version
5. Vunérabilités trouvées
Les deux premières vulnérabilités de la liste (et donc les plus probables) sont:
DirtyCow
OverlayFs
6. Commençons par DirtyCow
les.sh nous suggère https://www.exploit-db.com/exploits/40611. La lecture du mode d'emploi de l'exploit n'est pas évidente...
Après une recherche sur la base de donnée exploit.db

je préfère utiliser https://www.exploit-db.com/exploits/40616 qui me paraît plus facile à utiliser

le compilateur gcc n'est pas installé. À la place, nous pouvons utiliser cc, son équivalent UNIX.
Téléchargeons et transférons le fichier 40616.c que j'ai renommé en dirtycow.c pour plus de clarté.
Suivons pas à pas la mise en œuvre de l'exploit et ne nous préoccupons pas des 'warnings' générés.
Et voilà, mission accomplie: nous sommes root.
Allons à la page /006-final/xvf7-flag/ et boom... 🎉

7. Réponses aux questions
Whats the kernel version?
3.13.0-32-generic
What is the root flag?
568628e0d993b1973adc718237da6e93
[ Bonus ] utilisation de overlay.fs exploit
Le challenge préconise l'utilisation de overlay.fs https://www.exploit-db.com/exploits/37292
Dans ce cas-ci, il faudra utiliser le compilateur cc au lieu de gcc avec la subtilité supplémentaire qu'il faut remplacer gcc par cc dans le code source de l'exploit.

Téléchargeons, transférons le fichier ofs.c vers la machine cible et exécutons l'exploit en suivant le mode d'emploi donné dans le code source
Comme pour DirtyCow, il ne faut pas se soucier des warnings.
Voici ce que cela donne:

Bingo, ici aussi, nous voilà root
Mis à jour
Ce contenu vous a-t-il été utile ?
