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.

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.

J'utilise la commande suivante pour effectuer un scan intensif :
nmap -A -v 10.129.1.190

-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

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

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

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

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).
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.
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.
https://heartbleed.com/
Il y a aussi une excellente bande dessinée en ligne de xkcd
https://xkcd.com/1354/
Étape 3 – Visiter la page Web
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.

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

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).

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

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/.

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

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

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

et un encodeur sur /encode.

Étape 4 – Décrypter la clé
Je retourne sur mon terminal et je copie/colle le contenu de hype_key dans un fichier.

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

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.

Je capture la sortie dans un nouveau fichier, hype_key.rsa, avec :
cat hype.key | xxd -r -p > hype_key.rsa

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

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


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.
https://www.exploit-db.com/exploits/32764
J'obtiens plus d'informations avec :
searchsploit -p 32764.py

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

Je renomme le fichier en heartbleed.py avec :
mv 32764.py heartbleed.py

Je lance ensuite l'exploit avec la commande suivante :
python2 heartbleed.py 10.129.1.190

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.

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

Vous pouvez également le décoder sur votre terminal en utilisant la commande suivante.
echo aGVhcnRibGVlZGJlbGlldmV0aGVoeXBlCg== | base64 --decode

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.

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

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.

Je continue dans le répertoire /hype.

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

Étape 7 - Rechercher le flag root.txt
Je retourne à la racine /. Je ne peux pas accéder au répertoire /root.

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.

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.

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

J'ai lancé la commande pour me connecter à la session, avec les privilèges root complets.
tmux -S /.devs/dev_sess

Je suis maintenant root !

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

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 !
