Bonjour, Habr! Dans cet article, je veux vous parler de mon expérience en passant le laboratoire
Friendzone sur le portail hackthebox. Pour ceux qui n'ont pas entendu ce qu'est
hackthebox , il s'agit d'un portail où vous pouvez tester vos compétences de pointe en pratique, il existe des masques CTF et des machines de laboratoire eux-mêmes, dont le passage sera discuté dans cet article.
Je dirai tout de suite que les règles de service disent:
«Ne partagez pas comment vous avez piraté chaque machine avec d'autres membres. Cela inclut la génération de code d'invitation et tous les défis .
" Mais comme cette machine n'est plus active et est stockée dans la section «Machines retirées», seuls les membres VIP ont accès aux machines de cette section et des écritures, cet article ne viole rien et est tout à fait légal. Commençons donc!

Collecte d'informations
Commençons notre exploration en lançant la numérisation de port avec nmap.

De ce qui précède, on peut voir que les ports 21 (ftp), 22 (ssh), 53 (domaine), 80 (http), 139 (netbios-ssn), 443 (https) sont ouverts. Regardons-les.
Énumérer 139 / TCP (NetBIOS-SSN)
Nous utiliserons l'utilitaire
enum4linux pour répertorier les ressources partagées sur l'hôte. De la sortie de l'utilitaire, il est clair qu'il est autorisé à entrer dans les ressources / général et / Développement

Maintenant, nous devons vérifier ces ressources.
En utilisant
smbclient //10.10.10.123/general, nous trouvons le fichier
creds.txt contenant des informations d'identification, enregistrez-le.


Énumération DNS
Nous utiliserons l'utilitaire
dig , qui permet de vérifier les enregistrements sur le serveur DNS spécifié pour le domaine / sous-domaine. Le nom de domaine friendzone.red est extrait du certificat SSL CommonName (sortie nmap pour 443 / tcp).

Nous allons au
10.10.10.123
Nous remarquons la boîte aux lettres info@friendportal.red et utilisons à nouveau dig.

Ajoutez les entrées résultantes à
/ etc / hostsNous avons maintenant une liste d'adresses qui doivent être examinées pour les pistes suivantes. Je vais omettre une partie de l'histoire où les pages se sont avérées être des trous de lapin. Nous considérons uniquement les résultats utiles.
Nous allons sur
administartor1.friendzone.red et saisissons les informations d'identification trouvées sur //10.10.10.123/general/creds.txt


Visitez /dashboard.php

On leur demande d'entrer certains paramètres pour obtenir des images. En conséquence, 2 images sont à notre disposition.


Par essais et erreurs, nous comprenons que la page est vulnérable à
LFI (Local File Inclusion) . Et que nous pouvons charger le shell via smbclient et y accéder en utilisant cette vulnérabilité. Nous essayons!
Téléchargez le shell dans Developments.


Nous revenons à la page et faisons référence au shell chargé.

Avant cela, bien sûr, en exécutant netcat pour écouter sur le port 1234.

Nous obtenons le shell de l'utilisateur www-data.
Après avoir parcouru la volunbox, nous trouvons le fichier mysql_data.conf, qui contient les informations d'identification de l'ami utilisateur.


Essayons d'obtenir un terminal et connectez-vous en tant qu'ami.

Nous allons dans le répertoire personnel / home / friend et prenons le drapeau utilisateur.
Saisissez root.txt
Téléchargez pspy64 dans la volunbox pour suivre les processus en cours.
En-tête de spoilerpspy est un outil conçu pour suivre les processus sans avoir besoin de privilèges root. Il vous permet de voir les commandes exécutées par d'autres utilisateurs, les tâches cron, etc. à mesure qu'ils progressent.

Nous commençons pspy64, avant de définir «l'exécution» dans le fichier chmod + x.

Nous remarquons que reporter.py est lancé à partir d'un utilisateur avec UID = 0 (c'est-à-dire root). Voyons le contenu du fichier reporter.py

Presque toutes les lignes sont commentées et n'ont aucun sens, sauf la première, où le module os est importé.
Détournement de bibliothèque ?
Ce module os.py avait une résolution de 777, afin que nous puissions apporter des modifications en toute sécurité à l'utilisateur Friend.
En ajoutant le
système de ligne
(«cp /root/root.txt /home/Friend/root.txt») au module os.py et en attendant un certain temps pour que le script démarre.

Nous avons obtenu le drapeau racine. Victoire!
