windowsWindows File Transfer Methods

🌐 Introduction

Le système d'exploitation Windows a évolué au fil des années, apportant de nouveaux outils pour les opérations de transfert de fichiers. Comprendre les méthodes de transfert de fichiers sur Windows est essentiel, tant pour les attaquants que pour les défenseurs :

  • ✈️ Les attaquants peuvent exploiter différentes méthodes pour transférer des fichiers et contourner les mécanismes de défense.

  • 🔒 Les défenseurs peuvent analyser ces méthodes pour mettre en place des politiques de surveillance et de protection adaptées.

Un bon exemple de menace avancée persistante (APT) est illustré dans l'article de Microsoft sur l'attaque Astaroth. Cette attaque fileless (sans fichier à proprement parler sur le disque) utilise des outils légitimes du système pour être exécutée directement en mémoire.

🔄 Schéma de l'attaque Astaroth :

Cette attaque illustre la combinaison de plusieurs outils Windows natifs pour effectuer des opérations de transfert de fichiers tout en évitant les mécanismes de défense classiques.


🔧 Méthodes de téléchargement de fichiers

Nous disposons d'une machine cible (ex. MS02) sur laquelle nous devons télécharger un fichier à partir de notre machine d'attaque (ex. Pwnbox). Voici quelques techniques utilisables dans un environnement Windows.

🔐 Encodage / Décodage Base64 avec PowerShell

Cette méthode permet de transférer un fichier sans communication réseau directe. Il suffit d'avoir accès à un terminal.

  1. Sur la machine attaquante (Linux / Pwnbox) :

  1. Sur la machine cible (Windows) :

  1. Vérification de l'intégrité du fichier :

Cette méthode permet de s'assurer que le fichier n'a pas été altéré pendant le transfert. Attention toutefois :

  • La taille maximale d'une commande dans cmd.exe est de 8 191 caractères.

  • Certaines interfaces (comme les webshells) peuvent planter avec de très longues chaînes.

🌐 Téléchargement via PowerShell Web

Dans la majorité des entreprises, le trafic sortant HTTP et HTTPS est autorisé afin de garantir la productivité. Ces canaux peuvent donc être exploités en post-exploitation pour transférer des fichiers. Toutefois, des mécanismes de défense peuvent limiter cette approche : filtrage web, blocage de certains types de fichiers (.exe, .ps1, etc.) ou restriction d'accès à des domaines spécifiques (whitelist).

PowerShell propose de nombreuses options pour transférer des fichiers via Internet. Même dans les anciennes versions de PowerShell, la classe .Net.WebClient permet d'effectuer des téléchargements via HTTP, HTTPS ou FTP.

📚 Méthodes WebClient principales :

Méthode
Description

OpenRead

Retourne les données d'une ressource sous forme de flux (Stream)

DownloadData

Télécharge les données et retourne un tableau de bytes

DownloadFile

Télécharge un fichier vers un chemin local

DownloadString

Télécharge une chaîne de texte (souvent un script)

...Async

Même logique que ci-dessus mais sans bloquer le thread principal

📁 Exemple : DownloadFile (téléchargement classique)

🧠 Exemple : DownloadString (téléchargement "fileless" + exécution mémoire)

Cela permet d'exécuter un script directement en mémoire sans l'enregistrer sur disque (attaque "fileless").

🐢 Variante : Invoke-WebRequest

Depuis PowerShell 3.0, la commande Invoke-WebRequest (alias : iwr, curl, wget) est aussi disponible, mais elle est souvent plus lente :

🛠️ Problème courant : IE non initialisé

Si Internet Explorer n’a pas été initialisé, la commande peut échouer avec une erreur IEDomNotSupportedException. Pour contourner cela :

🛑 Problème SSL/TLS

En cas de certificat non valide, le téléchargement échoue avec une erreur de canal SSL/TLS. Solution temporaire :


📂 Téléchargement via un serveur SMB

Le protocole SMB (port TCP/445) est très courant dans les environnements Windows. Il permet un accès distant à des ressources partagées.

🔧 Lancer un serveur SMB (depuis Kali/Pwnbox)

📥 Télécharger un fichier depuis la cible Windows :

🚫 Accès invité bloqué (cas courant)

Des versions récentes de Windows bloquent l'accès SMB sans authentification. Le message suivant peut apparaître :

"You can't access this shared folder because your organization's security policies block unauthenticated guest access."

✅ Solution : utiliser une authentification

  1. Lancer le serveur SMB avec un utilisateur :

  1. Monter le partage SMB depuis la cible :


🖥️ Serveur SMB avec Identifiant et Mot de Passe

Il est possible de configurer un serveur SMB sur la machine de l’attaquant pour transférer des fichiers vers une machine Windows cible. La commande suivante permet de le faire en définissant un nom d’utilisateur et un mot de passe :

Exemple de sortie :

📂 Monter le Partage SMB depuis Windows

Une fois le serveur en place, il est possible de le monter avec la commande suivante :

Puis copier un fichier depuis ce partage :

💡 Si la commande copy ne fonctionne pas directement, il peut être nécessaire de monter d’abord le partage comme montré ci-dessus.


🌐 Téléchargement via FTP

Une autre méthode consiste à utiliser FTP, qui fonctionne sur les ports TCP 21 (commande) et 20 (données). Le module pyftpdlib permet de rapidement mettre en place un serveur FTP.

🔧 Installer pyftpdlib

🚀 Lancer le Serveur FTP sur le port 21

Exemple de sortie :

📥 Télécharger un fichier depuis Windows avec PowerShell

📝 Télécharger avec un fichier de commandes FTP

Utile en shell non interactif :

Vérifier ensuite le contenu avec more file.txt.


📤 Téléversement de fichiers depuis la machine cible

Pour des besoins d’exfiltration ou d’analyse, il peut être utile d’uploader un fichier depuis la machine cible vers la machine de l’attaquant.

🔐 Encodage Base64 en PowerShell

Permet de copier un fichier sous forme texte pour le transférer facilement.

📋 Vérifier l'intégrité avec un hash

Sur l’attaquant :


🌐 Upload via PowerShell et un Serveur Web

PowerShell ne permet pas directement l’envoi de fichier, mais des scripts comme PSUpload.ps1 peuvent utiliser Invoke-RestMethod pour uploader des fichiers sur un serveur web configuré.

🛠️ Installer un serveur web avec upload

Le fichier peut ensuite être envoyé depuis la cible avec un script comme PSUpload.

Le serveur écoute par défaut sur http://0.0.0.0:8000/, et la page de transfert est disponible à /upload


📚 Ressources utiles


Download the file flag.txt from the web root using wget from the Pwnbox. Submit the contents of the file as your answer.

Nous réalisons cet exercice à l'aide de la Pwnbox mise à disposition par HackTheBox.

Nous ouvrons alors Powershell et récupérons le fichier flag.txt présent à la racine de notre cible :

Nous obtenons ainsi le flag attendu :


circle-info

RDP to 10.129.201.55 (ACADEMY-MISC-MS02) with user "htb-student" and password "HTB_@cademy_stdnt!"

Upload the attached file named upload_win.zip to the target using the method of your choice. Once uploaded, unzip the archive, and run "hasher upload_win.txt" from the command line. Submit the generated hash as your answer.

Afin de télécharger le fichier mentionné, nous utilisons wget dans un premier temps sur notre machine attaquante :

Une fois sur notre poste, nous rézippons le fichier :

Une fois ceci effectué, nous ouvrons une connexion à distance dans notre répertoire WGET afin de permettre le téléchargement du zip sur notre cible :

Nous utilisons xfreerdp afin d'accéder à la cible :

Une fois sur notre cible, nous récupérons le fichier .zip pour en obtenir le hash :

Nous obtenons alors le hash retourné par le fichier :


Last updated