Usage HackTheBox (Writeup)
Skills:
Subdomain Enumeration
SQLI - Boolean-Based Blind Injection (MANUAL) + BurpSuite Tips
Python Scripting in order to exploit SQLI
Cracking Hashes
Laravel-admin Exploitation (RCE by abusing file upload)
Binary Analysis (GHIDRA)
Abusing Sudoers Privilege + Custom Binary in order to get Root SSH Private Key [Privilege Escalation]
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:

Analyse des ports ouverts avec extractPorts:
Utilisation de la fonction extractPorts pour afficher de manière synthétique les ports ouverts et les copier dans le clipboard (21,22,80)

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

Pour résoudre les noms de domaine en adresses IP via DNS, on insère dans le fichier /etc/hosts le nom de domaine associé à son adresse IP:
Port 80:
Sur le port 80, nous allons créer un compte utilisateur avec un e-mail fictif "[email protected]" dans la section d'inscription.

Vulnérabilité SQLI:
Nous découvrons un panneau de réinitialisation de mot de passe vulnérable à une injection SQL

. En interceptant les requêtes avec BurpSuite, nous obtenons le message "We have e-mailed your password".

Lorsque nous tentons une injection SQL basique, cela réussit et nous recevons à nouveau le même message d'erreur, confirmant que l'injection fonctionne. Le test d'injection basique est:
iojfeifif' or 1=1-- -

Sqli Conditional responses:
Bien que les résultats de la requête SQL ne soient pas renvoyés et qu'aucun message d'erreur n'apparaisse, l'application affiche le message "We have e-mailed your password" sur la page si la requête renvoie des lignes.
Nous vérifions cette hypothèse en lançant une injection conditionnelle en utilisant la fonction substring pour extraire les premières lettres du nom de la base de données.
Exemples d'injection :
Tester la première lettre du nom de la base :
dwwdw' or substring(database(),1,1)='u'-- -Tester la deuxième lettre du nom de la base :
dwwdw' or substring(database(),2,1)='s'-- -

Énumeration nom de la base de données:
Nous automatisons le processus de découverte du nom de la base de données en utilisant un script Python qui envoie des requêtes avec des charges utiles spécifiques et récupère les résultats lorsque le serveur affiche la réponse "We have e-mailed your password".

Énumération des bases de données :
Nous modifions la charge utile pour énumérer toutes les bases de données présentes sur le serveur. Nous utilisons la fonction group_concat de la base de données information_schema.schemata pour récupérer toutes les bases de données disponibles. Cette étape permet de découvrir toutes les bases de données présentes.

Énumération des tables de la base usage_blog :
usage_blog : Après avoir trouvé la base de données usage_blog, nous modifions à nouveau la charge utile pour énumérer les tables de cette base de données. Nous utilisons la fonction group_concat pour récupérer les noms de toutes les tables de la base usage_blog.

Énumération des colonnes de la table admin_users :
admin_users : Une fois les tables identifiées, nous ciblons la table admin_users pour énumérer ses colonnes. Nous utilisons encore une fois la fonction group_concat pour récupérer les noms des colonnes de cette table spécifique.

Affichage des username et password :
username et password :Pour afficher les identifiants et mots de passe des utilisateurs dans la table admin_users, la requête SQL sera modifiée de manière à concaténer les champs username et password
admin:$2y$10$ohq2kLpBH/ri.P5wR0P3UOmc24Ydvl9DA9H1S6ooOMgH5xVfUPrL2

Crackage du mot de passe avec John :
Une fois le hash du mot de passe récupéré, vous pouvez utiliser John pour le cracker avec un dictionnaire comme rockyou.txt :
admin:whatever1

Panel Administrateur:

Une fois les identifiants trouvés, il est possible de se connecter au panel administrateur en modifiant le fichier /etc/hosts pour ajouter l'entrée admin.usage.htb.

Vulnérabilité File Upload (Laravel-admin)
Dans l'application Laravel-admin, une section permet de télécharger un avatar. En exploitant cette fonctionnalité, nous pouvons envoyer un fichier malveillant pour obtenir un accès non autorisé au serveur.

Étapes d'exploitation :
Interception et modification du fichier d'avatar :
Interceptez la requête avec Burp Suite.
Modifiez la valeur de la variable
filenamepour y ajouter l'extension PHP après un faux fichier d'image, par exemple :hack.jpg.php.

Le contenu du fichier doit être un reverse shell, tel que :

Mise en écoute avec Netcat :
Lancez l'écoute sur le port 443 avec Netcat :

Exécutez les commandes suivantes pour rendre la session shell plus interactive :
Flag user.txt :)

Élévation de privilège:
Information leakage
Dans le répertoire de l’utilisateur dash, un fichier .monitrc est accessible, contenant des informations sensibles

admin:3nc0d3d_pa$$w0rd

Ce mot de passe correspond à l’utilisateur XANDER.

Abusing Sudoers Binary:
En exécutant la commande sudo -l en tant qu’utilisateur xander, on découvre la possibilité d’exécuter le binaire usage_management avec trois options :
Project BackupBackup MySQL dataReset admin password

En sélectionnant la première option ("Project Backup"), le programme crée un fichier .zip avec un backup en tant qu’utilisateur root.


Binary Analysis (GHIDRA)
Installez et exécutez GHIDRA pour analyser le binaire :


Dans la fonction de
Project Backup, on observe que cette fonctionnalité compresse le contenu de/var/www/htmldans un fichierproject.zipavec les droits root.

Création d’un lien symbolique pour accéder à la clé SSH root : Pour exploiter cette fonctionnalité, créez un lien symbolique vers la clé SSH root dans le répertoire html

Exécution du script en tant qu’utilisateur root :
Lancez le script
usage_management:

Dans le fichier
project.zip, récupérez la clé privée root (id_rsa).

Connexion SSH avec la clé root :
Utilisez la clé pour vous connecter en tant que root :

Flag root :)


Mis à jour
Ce contenu vous a-t-il été utile ?