Backfire HackTheBox (Writeup)

Reconnaissance:

Création de l'espace de travail :

Nous établirons notre espace de travail en créant trois dossiers pour stocker les contenus importants, les exploits et les résultats de la reconnaissance à l'aide de Nmap.

Vérification de la Connectivité VPN

Vérification de la connexion VPN pour assurer une communication stable avec la machine cible.

Recherche des ports ouverts avec Nmap :

Exploration des ports ouverts et exportation dans le fichier "allPorts" dans le répertoire Nmap:

Scan de la version des ports avec Nmap: (22,443,8000)

Utilisation de Nmap pour scanner la version des ports et extraction des informations dans le fichier "targeted" :

Port 8000

Sur le port 8000, nous trouvons deux fichiers intéressants :

  • disable_tls.path

  • havoc.yaotl

Le fichier havoc.yaotl contient deux utilisateurs avec leurs mots de passe ainsi qu'un nom de domaine :

  • ilya: CobaltStr1keSuckz!

  • sergej: 1w4nt2sw1tch2h4rdh4tc2

  • Host: backfire.htb

Nous ajoutons ce nom d'hôte dans notre fichier /etc/hosts pour faciliter l'accès.

Le fichier disable_tls.path contient un patch pour désactiver TLS sur le port de gestion WebSocket (40056) dans Havoc. Ce patch remplace "wss://" par "ws://" et retire la configuration SSL pour le client et le serveur. L'auteur justifie ce changement en précisant que ce port n'accepte que les connexions locales via SSH forwarding, réduisant ainsi les risques de sécurité. Ce patch semble également être une ironie sur le manque de travail de l'utilisateur sergej.

Port 40046 Havoc-C2

Pour exploiter la vulnérabilité SSRF dans Havoc, nous créons un fichier payload.sh contenant le code suivant :

Ensuite, nous mettons en place un serveur web pour héberger notre payload avec la commande suivante :

Nous écoutons ensuite sur le port 4444 avec netcat pour recevoir la connexion inversée :

Nous modifions le script pour y inclure les informations pertinentes, puis exécutons l'exploitation via la commande suivante :

Accès utilisateur :

L'utilisateur ilya permet de se connecter à la machine cible.

Traitement de la terminal

Flag user.txt

Nous observons qu'une tâche cron expulse notre session toutes les 2 minutes. Pour contourner ce problème, nous allons créer des clés SSH.

Création de clés SSH :

Nous générons une nouvelle clé SSH en utilisant la commande suivante :

Nous modifions ensuite le fichier authorized_keys pour y ajouter notre clé publique :

Nous nous connectons ensuite à la machine cible en utilisant SSH :

Pivoting utilisateur Sergej :

Dans le répertoire de l'utilisateur ilya, nous trouvons un fichier hardhat.txt contenant le message suivant :

Sergej a dit qu'il avait installé HardHatC2 pour effectuer des tests et n'avait pas modifié les paramètres par défaut. J'espère qu'il préfère Havoc car je ne veux pas apprendre un autre framework C2, et Go

Nous examinons les ports internes avec la commande netstat :

Les ports 5000 et 7096 semblent particulièrement intéressants.

Port forwarding :

Nous effectuons un port forwarding avec SSH pour accéder aux services internes :

Port 7096 - HardHatC2 CMS :

Sur le port 7096, nous trouvons le CMS HardHat.

Bypass d'authentification HardHat C2 :

Nous utilisons le script suivant pour contourner l'authentification et créer un nouvel utilisateur :

Le script génère l'utilisateur jordan avec le rôle TeamLead.

Hardhat C2 (RCE)

Sur la partie ImplantInteract, nous avons accès à un terminal. En exécutant la commande whoami, nous voyons que nous sommes connectés en tant qu'utilisateur sergej.

Nous établissons une reverse shell pour l'utilisateur sergej en écoutant sur le port 443 :

Et exécutons la commande suivante pour établir la connexion inversée

Une fois connecté, nous ajoutons notre clé SSH à authorized_keys pour pouvoir nous reconnecter facilement :

Élévation de privilèges :

Sudo - IP-Tables

Vérification des droits sudo

Nous commençons par vérifier les droits sudo disponibles sur la machine :

Nous découvrons que l'utilisateur dispose des droits sudo sans mot de passe pour les commandes suivantes :

  • /usr/sbin/iptables

  • /usr/sbin/iptables-save

Génération d’une paire de clés SSH

Nous générons une paire de clés SSH pour injecter notre clé publique dans les fichiers d'authentification de root :

Voici la clé publique générée :

Injection de la clé publique dans iptables

Nous utilisons le champ --comment d’iptables pour injecter notre clé publique dans une règle

Nous vérifions que la règle a bien été ajoutée :

Sauvegarde dans le fichier authorized_keys

Nous sauvegardons les règles iptables dans un fichier qui sera utilisé comme fichier authorized_keys de l'utilisateur root :

Connexion en tant que root

Enfin, nous pouvons nous connecter en SSH en tant que root :

Flag root.txt :)

Mis à jour

Ce contenu vous a-t-il été utile ?