Article original : Keep Calm and Hack The Box – Valentine

Hack The Box (HTB) est une plateforme en ligne qui vous permet de tester vos compétences en tests d'intrusion.

Elle contient plusieurs défis qui sont constamment mis à jour. Certains d'entre eux simulent des scénarios du monde réel et d'autres penchent davantage vers un style de défi CTF.

Note : Seuls les write-ups de machines HTB retirées sont autorisés.

Image

Valentine est une machine facile qui se concentre sur la vulnérabilité Heartbleed, qui a eu un impact dévastateur sur les systèmes à travers le monde.

Nous utiliserons les outils suivants pour compromettre la machine :

  • Nmap
  • Nmap Scripting Engine
  • Gobuster
  • Searchsploit
  • xxd
  • OpenSSL
  • SSH
  • tmux

C'est parti !

Étape 1 - Reconnaissance

La première étape avant d'exploiter une machine est d'effectuer un peu de balayage et de reconnaissance.

C'est l'une des parties les plus importantes car elle déterminera ce que vous pourrez tenter d'exploiter par la suite. Il est toujours préférable de passer plus de temps sur cette phase pour obtenir autant d'informations que possible.

Scan de ports

J'utiliserai Nmap (Network Mapper). Nmap est un utilitaire gratuit et open source pour la découverte de réseau et l'audit de sécurité.

Il utilise des paquets IP bruts pour déterminer quels hôtes sont disponibles sur le réseau, quels services ces hôtes offrent, quels systèmes d'exploitation ils utilisent, quel type de filtres de paquets/pare-feu sont utilisés, et des dizaines d'autres caractéristiques.

Il existe de nombreuses commandes que vous pouvez utiliser avec cet outil pour scanner le réseau. Si vous souhaitez en savoir plus, vous pouvez consulter la documentation ici.

Image

J'utilise la commande suivante pour effectuer un scan intensif :

nmap -A -v 10.129.1.190

Image

-A : Active la détection du système d'exploitation, la détection de version, le scan par script et le traceroute

-v : Augmente le niveau de verbosité

10.129.1.190 : IP de la machine Valentine

Nous pouvons voir qu'il y a 3 ports ouverts :

  • Port 22. Secure Shell (SSH), connexions sécurisées, transferts de fichiers (scp, sftp) et redirection de port.
  • Port 80. Hypertext Transfer Protocol (HTTP).
  • Port 443. Hypertext Transfer Protocol Secure (HTTPS).

Je décide également de vérifier le nom d'hôte par rapport à la base de données de vulnérabilités de Nmap avec cette commande :

nmap --script vuln 10.129.1.190

Image

Le Nmap Scripting Engine (NSE) est l'une des fonctionnalités les plus puissantes et les plus flexibles de Nmap. Il permet aux utilisateurs d'écrire (et de partager) des scripts simples (en utilisant le langage de programmation Lua) pour automatiser une grande variété de tâches réseau. Vous pouvez trouver plus d'informations ici.

Vous pouvez trouver les scripts sous :

/usr/share/nmap/scripts

Image

Vous pouvez également rechercher un script spécifique avec la commande grep. Plus d'infos sur la commande ici.

Image

Je regarde les résultats et je peux voir que la machine est vulnérable à ssl-heartbleed :

Image

La section d'information nous donne quelques liens pour en savoir plus sur la vulnérabilité. Le premier lien redirige vers la Base de données des vulnérabilités et expositions communes de MITRE (CVE).

Image https://cve.mitre.org/cgi-bin/cvename.cgi?name=cve-2014-0160

Le programme CVE identifie, définit et répertorie les vulnérabilités de cybersécurité divulguées publiquement.

Il y a un autre lien qui redirige vers l'avis de sécurité OpenSSL.

Image https://www.openssl.org/news/secadv/20140407.txt

Étape 2 – Qu'est-ce que la vulnérabilité Heartbleed ?

Heartbleed est un bug de sécurité dans la bibliothèque OpenSSL. Il a été introduit en 2012 et divulgué publiquement en avril 2014.

Le bug Heartbleed permet à quiconque sur Internet de lire la mémoire des systèmes protégés par les versions vulnérables du logiciel OpenSSL. Cela permet aux attaquants d'écouter les communications, de voler des données directement auprès des services et des utilisateurs, et d'usurper l'identité des services et des utilisateurs. – Heartbleed.com

Vous pouvez en apprendre davantage sur Heartbleed sur ce site dédié ici.

Image https://heartbleed.com/

Il y a aussi une excellente bande dessinée en ligne de xkcd

Image https://xkcd.com/1354/

Étape 3 – Visiter la page Web

Image https://en.wikipedia.org/wiki/Heartbleed

À partir de la phase de reconnaissance, je décide de commencer par le port 80. Et j'obtiens une page avec une image. Je reconnais le logo Heartbleed sur le côté droit.

Image

Je regarde le code source. Rien d'intéressant.

Image

Je décide de lancer Gobuster. Gobuster est un scanner de répertoires écrit en Go. Vous pouvez trouver plus d'infos sur l'outil ici.

Gobuster utilise des wordlists sur la machine HTB Parrot qui se trouvent dans le répertoire /usr/share/wfuzz/wordlist/general/. J'utilise les wordlists "big.txt" et "megabeast.txt", mais vous pouvez télécharger plus de wordlists depuis SecLists ici.

J'utilise cette commande pour la wordlist big.txt :

gobuster dir -u 10.129.1.190 -w /usr/share/wfuzz/wordlist/general/big.txt -x php,html,txt

Je me concentre également sur les fichiers .php, .txt et .html avec le drapeau -x (extensions).

Image

J'utilise ensuite cette commande pour la wordlist megabeast.txt :

gobuster dir -u 10.129.1.190 -w /usr/share/wfuzz/wordlist/general/megabeast.txt -x php,html,txt

Image

Cela démontre la nécessité de choisir la bonne wordlist ou d'en exécuter au moins deux différentes pour s'assurer de capturer autant d'informations que possible.

Il y a quelques découvertes intéressantes. Je commence par vérifier le dossier /dev/.

Image

Il y a deux fichiers. Je vérifie le contenu du fichier hype_key. Il semble s'agir de valeurs hexadécimales.

Image

L'autre fichier, notes.txt, est une liste de tâches.

Image

Je trouve également un décodeur sur /decode.

Image

et un encodeur sur /encode.

Image

Étape 4 – Décrypter la clé

Je retourne sur mon terminal et je copie/colle le contenu de hype_key dans un fichier.

Image

J'affiche le contenu pour m'assurer d'avoir tout copié correctement avec :

cat hype.key

Image

J'utilise le terminal pour décoder la clé, et plus précisément xxd. Plus d'infos sur cette commande ici. J'utilise la combinaison -r -p pour lire des dumps hexadécimaux bruts sans informations de numéro de ligne et sans mise en page particulière en colonnes.

J'utilise la commande :

cat hype.key | xxd -r -p

La sortie est une clé RSA chiffrée. Une clé RSA est une clé privée basée sur l'algorithme RSA. Une clé privée est utilisée pour l'authentification et un échange de clés symétriques lors de l'établissement d'une session SSL/TLS.

Image

Je capture la sortie dans un nouveau fichier, hype_key.rsa, avec :

cat hype.key | xxd -r -p > hype_key.rsa

Image

Mais sans mot de passe, cette clé n'est pas très utile. Voyons si nous pouvons le trouver !

Étape 5 – Trouver un exploit

D'après la phase de reconnaissance sur Nmap et la page web, nous avons découvert que la machine était vulnérable ou avait un lien avec Heartbleed.

J'utilise Searchsploit pour vérifier s'il existe un exploit connu. Searchsploit est un outil de recherche en ligne de commande pour la Exploit Database.

J'utilise la commande suivante :

searchsploit heartbleed

Image

Il y a quelques résultats. Je vais choisir le premier. J'obtiens plus de détails sur un exploit avec :

searchsploit -x 32764.py

Image

Image

Vous pouvez également consulter l'Exploit Database pour trouver le même exploit si vous n'êtes pas à l'aise avec la lecture de la documentation sur le terminal.

Image https://www.exploit-db.com/exploits/32764

J'obtiens plus d'informations avec :

searchsploit -p 32764.py

Image

Je peux voir où il se trouve sur la machine HTB Parrot. Je copie le fichier dans mon dossier Valentine avec :

cp /usr/share/exploitdb/exploits/multiple/remote/32764.py .

et je vérifie s'il a été copié dans ce dossier :

ls -la

Image

Je renomme le fichier en heartbleed.py avec :

mv 32764.py heartbleed.py

Image

Je lance ensuite l'exploit avec la commande suivante :

python2 heartbleed.py 10.129.1.190

Image

Il y a beaucoup d'informations, mais en les parcourant et en regardant sur le côté droit, je peux voir une chaîne intéressante :

$text=aGVhcnRibGVlZGJlbGlldmV0aGVoeXBlCg==

C'est du base 64. Essayons le décodeur que nous avons trouvé plus tôt sur /decode.

Image

Je soumets la chaîne et j'obtiens un mot de passe en retour !

heartbleedbelievethehype

Image

Vous pouvez également le décoder sur votre terminal en utilisant la commande suivante.

echo aGVhcnRibGVlZGJlbGlldmV0aGVoeXBlCg== | base64 --decode

Image

J'essaie ce mot de passe nouvellement trouvé sur la clé RSA avec :

openssl rsa -in hype_key.rsa -out hype_key_decrypted.rsa

Je saisis le mot de passe lorsqu'on me le demande.

Image

D'après la phase de reconnaissance, nous avons trouvé un port 22 ouvert. Connectons-nous en SSH à la machine. Je fais une supposition éclairée sur le nom d'utilisateur et je décide de choisir hype car j'ai trouvé ce nom sur la clé dans le dossier /dev.

Je me connecte en SSH à la machine avec :

ssh -i hype_key_decrypted.rsa hype@10.129.1.190

Image

Et je suis maintenant connecté en tant qu'utilisateur hype.

Étape 6 - Rechercher le flag user.txt

Je commence à remonter jusqu'au répertoire /home.

Image

Je continue dans le répertoire /hype.

Image

Et je trouve le flag utilisateur ! Je peux vérifier le contenu du fichier avec :

cat user.txt

Image

Étape 7 - Rechercher le flag root.txt

Je retourne à la racine /. Je ne peux pas accéder au répertoire /root.

Image

Je décide de retourner dans le répertoire de hype et je vois que le fichier .bash_history n'est pas un fichier de zéro octet.

Image

J'affiche son contenu avec :

cat .bash_history

Le shell bash stocke l'historique des commandes que vous avez exécutées dans le fichier d'historique de votre compte utilisateur à ~/.bash_history par défaut.

Image

Je peux voir quelques commandes avec tmux.

tmux est un multiplexeur de terminaux open-source pour les systèmes d'exploitation de type Unix. Il permet d'accéder simultanément à plusieurs sessions de terminal dans une seule fenêtre. Il est utile pour exécuter plus d'un programme en ligne de commande en même temps. Il peut également être utilisé pour détacher des processus de leurs terminaux de contrôle, permettant aux sessions distantes de rester actives sans être visibles. - Wikipedia

Plus d'infos ici.

Je lance ps et je peux voir que la session tmux a été lancée en tant qu'utilisateur root :

ps aux | grep tmux

Image

J'ai lancé la commande pour me connecter à la session, avec les privilèges root complets.

tmux -S /.devs/dev_sess

Image

Je suis maintenant root !

Image

Je peux naviguer vers le répertoire root. Je trouve le fichier root.txt et je vérifie son contenu avec :

cat root.txt

Image

Félicitations ! Vous avez trouvé les deux flags.

Remédiations

  • Mettre à jour vers la dernière version d'OpenSSL
  • Remplacer TOUTES les clés et certificats sur les serveurs web pour atténuer les risques d'une brèche de sécurité, et révoquer les anciens
  • Appliquer le principe du moindre privilège à tous vos systèmes et services

N'hésitez pas à poser des questions ou à partager avec vos amis :)

Vous pouvez voir d'autres articles de la série Keep Calm and Hack the Box ici.

Vous pouvez me suivre sur Twitter ou sur LinkedIn.

Et n'oubliez pas de #GetSecure, #BeSecure & #StaySecure !

Image