linuxLinux File Transfer Methods

Linux est un systĂšme d’exploitation polyvalent qui propose de nombreux outils pour effectuer des transferts de fichiers. Comprendre ces mĂ©thodes permet aussi bien aux attaquants qu’aux dĂ©fenseurs d’amĂ©liorer leurs compĂ©tences, qu’il s’agisse d’attaquer un rĂ©seau ou de prĂ©venir des attaques sophistiquĂ©es.


🎯 Contexte d’attaque : transfert de fichiers malveillants

Lors d’une intervention de rĂ©ponse Ă  incident sur plusieurs serveurs web, nous avons dĂ©couvert que des attaquants exploitaient une vulnĂ©rabilitĂ© SQL Injection. Ces attaquants utilisaient un script Bash qui tentait de tĂ©lĂ©charger un second malware, lequel se connectait ensuite au serveur de commande et contrĂŽle (C2) des attaquants.

Le script Bash tentait successivement trois méthodes de téléchargement :

  1. cURL

  2. wget

  3. Python

Toutes communiquaient via HTTP. MĂȘme si Linux peut utiliser d’autres protocoles comme FTP ou SMB (plus typiques de Windows), la majoritĂ© des malwares, sur tous systĂšmes, privilĂ©gient HTTP/HTTPS pour leurs communications.


🔍 Aperçu des mĂ©thodes de transfert de fichiers sous Linux

Dans cette section, nous allons étudier plusieurs méthodes pour transférer des fichiers sous Linux, incluant :

  • HTTP via wget, curl

  • Base64

  • Bash (/dev/tcp)

  • SSH / SCP

  • Transferts "fileless" (sans sauvegarde sur disque)


1. 🔄 Transfert de fichiers via encodage Base64 (sans rĂ©seau)

Lorsque la taille du fichier Ă  transfĂ©rer est raisonnable et qu’on dispose d’un terminal, il est possible d’utiliser base64 pour encoder un fichier en chaĂźne de caractĂšres, la copier, puis la dĂ©coder sur la machine cible.

Exemple : transférer une clé SSH

Vérifier le hash MD5 de la clé sur la source

Encoder le fichier en Base64, en une seule ligne pour faciliter la copie

(Cette commande produit une longue chaĂźne base64)

Sur la machine cible, décoder la chaßne pour recréer le fichier

Vérifier que le hash MD5 du fichier est identique

Remarque : Cette méthode ne nécessite aucune communication réseau directe.


2. 🌐 TĂ©lĂ©chargement HTTP avec wget et cURL

Les deux outils les plus courants sous Linux pour interagir avec des ressources web sont wget et curl. Ils sont généralement préinstallés.

Télécharger un fichier avec wget

Télécharger un fichier avec cURL


3. ⚡ Attaques sans fichier (fileless attacks)

Linux permet, grĂące Ă  ses pipes (|), d’exĂ©cuter des scripts directement sans les sauvegarder sur disque.

Exécuter un script Bash directement avec cURL

Exécuter un script Python directement avec wget

Note : Certaines payloads peuvent malgré tout créer des fichiers temporaires sur le systÚme.


4. 📡 TĂ©lĂ©chargement avec Bash via /dev/tcp

Si les outils classiques manquent, et si Bash est compilé avec le support des redirections réseau (--enable-net-redirections), on peut utiliser le pseudo-fichier /dev/tcp pour réaliser des connexions TCP simples.

Exemple : connexion et requĂȘte HTTP

Cette mĂ©thode permet de rĂ©cupĂ©rer le contenu d’un fichier via une requĂȘte HTTP brute.


5. 🔐 Transfert sĂ©curisĂ© via SSH et SCP

SSH permet un accÚs sécurisé à distance. Le protocole SCP (Secure Copy) utilise SSH pour transférer des fichiers de maniÚre sécurisée.

Copier un fichier de la machine locale vers une machine distante

Copier un fichier de la machine distante vers la machine locale

Activer et démarrer le serveur SSH sur une machine Linux

VĂ©rifier que le port SSH est Ă  l’écoute


⚠ Points importants Ă  retenir

  • Les mĂ©thodes HTTP (wget, curl) sont trĂšs rĂ©pandues chez les attaquants et dĂ©fenseurs car elles sont souvent disponibles et passent souvent Ă  travers les firewalls.

  • Les transferts "fileless" sont pratiques pour Ă©viter de laisser des traces sur le disque.

  • Base64 est une mĂ©thode simple mais peu adaptĂ©e aux fichiers volumineux.

  • SSH/SCP reste la mĂ©thode la plus sĂ»re pour les transferts lĂ©gitimes.

  • La mĂ©thode /dev/tcp peut ĂȘtre utile dans les environnements restreints, mais nĂ©cessite une configuration spĂ©cifique de Bash.


📚 Ressources utiles


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

Nous récupérons le contenu du fichier flag.txt présent sur notre cible à l'aide de wget :

Nous obtenons alors le flag attendu :


circle-info

SSH to 10.129.234.168 (ACADEMY-MISC-NIX04) with user "htb-student" and password "HTB_@cademy_stdnt!"

Upload the attached file named upload_nix.zip to the target using the method of your choice. Once uploaded, SSH to the box, extract the file, and run "hasher " from the command line. Submit the generated hash as your answer.

Nous téléchargeons sur notre cible le fichier zip attendu et nous ouvrons un serveur python afin de pouvoir récupérer le fichier sur notre cible par la suite :

Nous nous connectons Ă  distance Ă  notre cible via SSH :

Une fois connectés, nous récupérons sur notre cible le fichier zip présent sur notre machine attaquante :

Nous pouvons maintenant essayer d'extraire l'archive :

Nous observons alors que nous ne pouvons pas extraire notre fichier sur notre cible. Nous le faisons donc sur notre machine attaquante l'extraction de l'archive et récupérons le contenu de cette archive sur notre cible. Extraction de l'archive sur notre poste attaquant :

Récupération de ce fichier texte sur notre cible à l'aide du serveur http lancé sur le poste attaquant à l'aide de python :

Utilisation de la commande hasher sur le fichier texte récupéré :

Nous obtenons donc le hash du fichier upload_nix.txt :


Last updated