Résolution du challenge CTF DC-2

By | May 22, 2019

DC-2 est une machine vulnérable conçue pour les débutants dans le monde du pentesting.
Dans ce billet, nous essayerons de résoudre le challenge proposé par cette machine virtuelle.

Le challenge comprend 5 flags dont le tout dernier est situé dans le dossier /root. L’objectif étant de tous les récupérer.



Commençons par lancer netdiscover pour connaître l’adresse IP de la VM dans notre réseau local.

Comme précisé dans la description du challenge, ajoutons dans notre fichier /etc/hosts l’adresse de la VM.

Le scan initial nmap sur cette machine nous révèle deux ports ouverts.
_ Le port 80, sur lequel tourne un serveur web Apache.
_ Le port 7744, sur lequel est en cours d’exécution un serveur OpenSSH.


Un autre scan avec Nikto nous révèle une instance de WordPress installée sur le serveur Web.


Exécutons cette fois un scan avec wpscan pour en savoir un peu plus sur cette instance de WordPress.

Trois utilisateurs ont été identifié par l’outil: tom, jerry et admin.


Connectons nous à présent à cette instance de WordPress.


La page principale comprend un menu Flag où est situé notre premier drapeau.

L’indice de ce flag nous suggère cewl pour la création d’une wordlist, probablement pour une tentative d’attaque par dictionnaire.

cewl est un outil hacking qui permet de générer des wordlists en se basant sur tous les mots uniques d’une url.


L’exécution de cewl sur notre VM nous retourne une wordlist composée de 238 mots.


Nous prendrons le soin d’ajouter nos trois utilisateurs découverts (jerry, tom, admin) par wpscan dans une liste que nous nommerons users.

Muni de nos deux listes, lançons une attaque sur l’instance WordPress avec Hydra.


Deux combinaisons se connectent avec succès.
jerry/adipiscing et tom/parturient.


A l’aide de ces identifiants de connexion, connectons-nous à WordPress.
Le tableau de bord de l’utilisateur tom n’a rien d’intéressant. Celui de l’utilisateur jerry par contre, comprend une page où se situe notre second flag. 🙂


L’indice contenu dans ce drapeau nous incite à utiliser un autre point d’entrée.

Le moment donc de s’intéresser au serveur ssh.

Seules les références de connexion de l’utilisateur Tom, obtenues ci-dessus avec cewl, nous permettent de nous connecter au serveur ssh.

Les erreurs retournées par les commandes que nous exécutons sur la machine laissent penser qu’un shell rshell a été mis en place sur l’environnement de notre utilisateur Tom.

Il existe un moyen de s’en échapper en exécutant un bash shell à travers vi.

Lançons donc vi, puis exécutons un bash shell comme suit:

:set shell=/bin/bash
:shell

NB: Si vous souhaitez en savoir plus sur les techniques d’évasion du Restricted Shell, je vous invite à voir ce lien.

Dans le répertoire de base de tom, se trouve notre troisième flag. 🙂
Le message inclus dans ce flag nous incite à réaliser un su sur l’utilisateur jerry.
La combinaison obtenue avec wpscan nous permet de nous connecter au compte jerry.

Dans le répertoire de base de jerry se trouve notre quatrième flag.

Le message de ce flag sous-entend qu’il n’y aura plus aucun d’indice pour la suite du challenge.
Mais en réalité, la phrase “git outta here” comprend le dernier indice pour accéder au dernier drapeau. Wait and see. 😉


Déterminons à présent les privilèges sudo de l’utilisateur jerry.

Jerry fait bien partie des sudoers, et ne peut utiliser que la commande git en tant que root.

N’étant pas un habituel utilisateur de git, il m’a fallut googler un peu pour mieux comprendre l’outil. Ce lien m’a le plus aidé.

En gros pour accéder au dossier du compte root, il nous faudra utiliser les privilèges sudo de l’utilisateur jerry pour créer un dépôt dont le propriétaire sera bien sûr root. Ce repo devra être également accessible en lecture par l’utilisateur Jerry. Ainsi, nous serons en mesure d’indexer des dossiers ou fichiers appartenant au compte root dans le repo que nous aurons créé.

Initialisons donc un repo git dans le répertoire de base de l’utilisateur Jerry en utilisant bien sûr la commande sudo.


Ajoutons le dossier /root au repo que nous avons créé.
NB: En réalité la commande git add <dossier> sert à placer votre dossier dans une zone d’assemblage, l’index Git, étape précédant le commit du dossier. A partir de l’index, les fichiers sont déjà accessibles.

La commande git ls-files permet d’afficher le contenu de l’index Git. Le résultat de la commande exécutée ci-dessus nous confirme déjà que nos fichiers ont bel et bien été indexés.


En ajoutant l’option --stage, nous serons en mesure d’afficher les hashes des fichiers indexés.

Un seul nous intéresse, celui représentant bien sûr le fichier /root/final-flag.txt qui nous permettra d’afficher notre drapeau final.

Et voilà ! 🙂


Fin du challenge !

J’espère qu’il vous a plu. Avez-vous utilisé d’autres moyens pour atteindre le final flag ? N’hésitez pas à partager en commentaire. 🙂

Happy Hacking !

mdestroy

Leave a Reply

Your email address will not be published. Required fields are marked *