Sniper HackTheBox (Writeup)
Skills:
Local File Inclusion (LFI)
Remote File Inclusion (RFI) [Failed]
Remote File Inclusion through SMB Server (net usershare technique) [Success]
Creating a webshell and achieving remote command execution [RCE]
Information Leakage [User Pivoting]
Playing with Chisel and ScriptBlocks using Invoke-Command
Creating a malicious CHM file (Out-CHM.ps1) [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. (80,135,139,445,49667)

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" :

Port 80:

Analyse avec whatweb :
Nous avons utilisé whatweb pour identifier les technologies utilisées par le serveur web :
Vulnérabilité LFI :
Sur la page de changement de langue, il y avait un paramètre lang permettant de charger des fichiers PHP différents selon la langue choisie.

Nous avons testé avec un fichier système local :
Ce qui nous a permis d'afficher le contenu du fichier
hosts.

Tentatives de lecture de fichiers sensibles avec php://filter :
Nous avons tenté d'exploiter le LFI pour lire le fichier index.php du serveur web Microsoft IIS situé dans \inetpub\wwwroot\index.php, mais l'exploitation via php://filter n'a pas fonctionné.


Remote File Inclusion (RFI) [Failed]
Test de RFI via serveur web distant :
Nous avons tenté de charger un fichier distant via l'URL ?lang=http://10.10.14.3/index.html en pointant vers notre serveur web local avec Python3.
mais cela n'a pas fonctionné.

Remote File Inclusion (SMB Server)
Création d'un serveur SMB:
Nous avons créé un serveur SMB local à l'aide de smbserver.py et partagé le répertoire courant :
Ensuite, nous avons tenté de charger un fichier à partir du serveur SMB en modifiant le paramètre lang
Cette fois, le serveur a correctement interprété notre fichier
index.html, affichant son contenu ("Hello World").

Création d'un fichier webshell PHP (cmd.php)
Nous avons créé un fichier cmd.php sur notre serveur SMB pour exécuter des commandes à distance via le paramètre cmd :
Exécution de commandes via SMB
En utilisant l'URL suivante, nous avons exécuté la commande whoami :

Reverse Shell (nc.exe)
Téléchargement de nc.exe pour reverse shell :
Nous avons récupéré le binaire nc.exe depuis les outils de fuzzing dans /usr/share/SecLists/Web-Shells/FuzzDB/nc.exe et l'avons copié dans le répertoire de travail.
Écoute sur le port 443 :
Nous avons mis en place un listener avec nc pour écouter sur le port 443 :
Exécution du reverse shell via SMB :
Nous avons ensuite lancé un reverse shell en pointant le paramètre cmd vers notre fichier
Nous avons ainsi obtenu un reverse shell vers notre machine.

Élévation de privilèges
Recherche de fichiers sensibles :
Nous avons cherché des informations sensibles dans les fichiers PHP et avons trouvé le fichier db.php contenant des identifiants pour la base de données :
Utilisateur :
dbuserMot de passe :
36mEAhz/B8xQ~2VM

Validation des identifiants pour un autre utilisateur :

Nous avons découvert un autre utilisateur nommé Chris en plus de l'utilisateur Administrator. Nous avons utilisé CrackMapExec pour valider si les identifiants de Chris étaient valides :
La connexion a réussi.

Vérification des privilèges de l'utilisateur "Chris" :
Nous avons observé que l'utilisateur
Chrisappartenait au groupe Remote Management User, ce qui lui permet de se connecter à distance.

Analyse des ports ouverts:
Le port nécessaire pour la connexion à distance (port 5985, utilisé par WinRM) n'était pas ouvert en externe, mais l'était en interne. Nous avons utilisé netstat pour vérifier les ports en écoute sur la machine cible :

Port Forwarding (5985 WinRm)
1. PowerShell
Nous avons lancé PowerShell sur notre machine d'attaque :
Nous avons récupéré le nom de l'environnement Windows avec la commande hostname, et avons constaté que le nom d'hôte était Sniper.
Ensuite, nous avons créé une variable pour l'utilisateur Chris et une autre pour le mot de passe en utilisant ConvertTo-SecureString :
Puis, nous avons créé un objet PSCredential pour pouvoir exécuter des commandes à distance sur la machine cible :
Exécution de commandes à distance :
Nous avons utilisé la commande suivante pour exécuter whoami à distance et valider l'accès :
Cela nous a permis de confirmer que nous étions bien connectés en tant que Chris.

Reverse shell : Pour obtenir un accès complet au système, nous avons mis en place un listener sur le port 4444 :
Ensuite, nous avons exécuté un reverse shell en utilisant nc.exe depuis notre serveur SMB :

2. Chisel
Téléchargement et préparation des fichiers : Nous avons téléchargé les fichiers Chisel compressés, à savoir :
chisel-linuxchisel-windows.exe
Après les avoir extraits, nous avons transféré le fichier Chisel pour Windows vers la machine cible :

Mise en écoute sur la machine attaquante avec Chisel : Nous avons lancé Chisel en mode serveur sur la machine attaquante sur le port 8888 :
Ensuite, sur la machine Windows cible, nous avons exécuté Chisel en mode client pour nous connecter à notre machine attaquante et rediriger le port 5985 vers notre machine :

Vérification du port redirigé avec lsof :
Nous avons vérifié que le port 5985 était bien en écoute après la redirection avec la commande :

Connexion avec WinRM : Nous avons utilisé CrackMapExec pour tester la connexion via WinRM sur le port 5985 redirigé :
Nous avons obtenu le symbole pwned, confirmant que nous avions réussi à accéder à la machine via WinRM.

Connexion finale avec Evil-WinRM : Enfin, nous avons utilisé Evil-WinRM pour obtenir un shell à distance en tant que Chris :
Flag user.txt :)

Exploration du répertoire "docs" :
Dans la racine de Windows, nous avons trouvé un dossier docs contenant un fichier note.txt avec le message suivant :

Salut Chris,
Tes compétences en PHP sont vraiment mauvaises. Contacte Yamitenshi pour qu'il t'apprenne à l'utiliser, puis corrige le site car il y a beaucoup de bugs dessus. J'espère aussi que tu as préparé la documentation pour notre nouvelle application. Dépose-la ici quand tu auras terminé.
Cordialement, Sniper CEO.
Recherche de la documentation dans le système : Nous avons cherché la documentation mentionnée par le CEO et l'avons trouvée dans le répertoire Downloads sous le fichier instructions.chm.

Création Fichier CHM malveillant :
Après avoir découvert que le CEO cherchait à consulter des fichiers CHM dans le répertoire docs, nous avons recherché sur Internet comment créer des fichiers CHM malveillants.
Téléchargement de l'outil HTML Help : Nous avons téléchargé HTML Help et utilisé un script PowerShell pour créer un fichier CHM malveillant
Puis, nous avons modifié le script pour exécuter une commande malveillante à distance via nc.exe :


Injection du fichier CHM malveillant dans le répertoire cible : Nous avons configuré un serveur SMB sur notre machine d’attaque pour transférer le fichier malveillant vers la machine Windows cible :
Connexion au partage SMB depuis la machine victime :
Depuis la machine Windows cible, nous avons monté le partage SMB et copié le fichier malveillant doc.chm :
Mise en écoute pour le reverse shell : Nous avons lancé un listener sur notre machine attaquante, en attente d’une connexion reverse shell :


Problème rencontré :
Bien que le fichier CHM ait été consulté, nous n’avons pas reçu de reverse shell. Cependant, nous avons réussi à capturer un SMB Relay V2 sur notre serveur. Cela nous a fourni un hash d’authentification pour l’utilisateur Administrator

Crack du hash de l'administrateur :
Administrator:butterfly!#1

Connexion en tant qu’administrateur:
Avec les identifiants obtenus, nous avons utilisé Evil-WinRM pour nous connecter à la machine en tant qu’administrateur :

Flag root.txt :)


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