Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
pig — Un outil de création de paquets pour Linux. | Kitploit
Outils/GitHubGitHub/rafael-santiago/pig
Évasion IDS/IPSSécurité RéseauTests d'Intrusion
GitHubrafael-santiago/pig

pig

Un outil de création de paquets pour Linux.

Voir le dépôt
47941il y a 5 ansVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Pig

Pig (que l'on peut comprendre comme Packet intruder generator) est un outil de création de paquets pour Linux. Vous pouvez utiliser Pig pour tester votre IDS/IPS entre autres choses.

Pig apporte un ensemble de signatures d'attaques bien connues prêtes à l'emploi et vous pouvez étendre cette collection avec des choses plus spécifiques selon vos besoins.

Jusqu'à présent, il est possible de créer des signatures IPv4 avec une couche de transport basée sur TCP, UDP et ICMP. Vous pouvez également créer des signatures basées sur le protocole ARP, en plus de construire le paquet depuis sa trame Ethernet.

Si vous êtes arrivé ici grâce à mon article dans le 2600 du numéro SPRING 2016 issue, continuez à lire les sections de documentation suivantes car ce petit Pig a évolué depuis.

Comment cloner ce dépôt ?

C'est très simple :

root@kitploit:~
[email protected]:~/src# git clone https://github.com/rafael-santiago/pig pig
[email protected]:~/src# cd pig
[email protected]:~/src/pig# git submodule update --init

Comment le construire ?

Vous devez utiliser Hefesto pour construire pig. Après avoir suivi les étapes pour faire fonctionner Hefesto sur votre système, déplacez-vous dans le sous-répertoire src de pig et exécutez la commande suivante :

root@kitploit:~
[email protected]:~/src/pig/src# hefesto

Après cette commande, vous devriez trouver le binaire pig sous le chemin src/bin. Vous pouvez utiliser le binaire relativement depuis src/bin ou l'installer.

Si pour une raison quelconque vous rencontrez des problèmes de construction, vous devriez essayer de lire quelques remarques dans BUILD.md.

Comment l'installer ?

Pour l'installation, vous devez être dans le sous-répertoire src et appeler :

root@kitploit:~
[email protected]:~/src/pig/src# hefesto --install

Pour désinstaller, en étant dans le sous-répertoire src, vous devez appeler :

root@kitploit:~
[email protected]:~/src/pig/src# hefesto --uninstall

Les fichiers pigsty

Les Fichiers Pigsty sont des fichiers texte brut où vous pouvez définir un ensemble de signatures de paquets. Il y a une syntaxe spécifique à suivre. Regardez un exemple de fichier pigsty :

root@kitploit:~
[ signature   =      "Hello",
  ip.version  =            4,
  ip.ihl      =            5,
  ip.tos      =            0,
  ip.src      = 192.30.70.10,
  ip.dst      =  192.30.70.3,
  ip.protocol =           17,
  udp.dst     =         1008,
  udp.src     =        32000,
  udp.payload =    "Hello!!" ]

En gros, toutes les données de signature doivent être entre crochets : [ ... ].

À l'intérieur de cette zone, l'information est fournie par le schéma champ = donnée.

Si vous avez de l'expérience avec les réseaux informatiques, la majorité des champs listés dans le Tableau 1 ont une signification forte pour vous. Vous devez utiliser ces champs pour créer vos futures signatures.

Tableau 1 : Les champs de signature de pig.

Lors de la création d'une signature, vous n'avez pas besoin de spécifier toutes les données. Si vous spécifiez uniquement les parties les plus pertinentes du paquet, les parties restantes seront remplies avec des valeurs par défaut. Les sommes de contrôle sont toujours recalculées.

Astuce : jetez un œil au sous-répertoire pigsty. Vous trouverez beaucoup de fichiers de signature et vous verrez qu'il est très simple d'en définir de nouveaux.

Spécifier des adresses IP géographiquement

Oui, c'est possible. Pour utiliser cette fonctionnalité, il suffit de spécifier les valeurs listées dans le Tableau 2 dans les champs de type adresse IP.

Tableau 2 : IPs par zone géographique.

Valeur à utiliser

Spécifier mes propres adresses

Vous devez, dans tout champ de type adresse IP, utiliser user-defined-ip comme valeur. Notez que vous devez utiliser l'option de ligne de commande --targets dans ce cas. Voir la section Utiliser pig pour plus d'informations.

Contribuer en envoyant plus de signatures de paquets

Si vous créez des fichiers pigsty que vous jugez pertinents au-delà de votre propre environnement, ouvrez une pull request afin d'inclure ces fichiers utiles ici. Merci d'avance !

Utiliser pig

L'utilisation de Pig est très simple, il est nécessaire de fournir quatre options de base :

  • --signatures
  • --gateway
  • --net-mask
  • --lo-iface

Vous voulez en savoir plus sur chaque option, hein ?... Alors allons-y :

  • L'option --signatures reçoit une liste de chemins de fichiers vers des fichiers pigsty.
  • L'option --gateway est l'endroit où vous spécifiez l'adresse de votre passerelle. Soyez conscient que pig génère ou du moins essaie de générer les trames ethernet aussi. De ce fait, l'adresse de la passerelle est plutôt importante pour composer correctement les données de la couche-1.
  • L'option --net-mask pour les problèmes de routage doit recevoir votre masque de réseau.
  • L'option --lo-iface est l'endroit où vous devez indiquer le nom de l'interface réseau locale que vous utiliserez pour "évacuer" les paquets générés.
  • L'option --no-gateway indique qu'aucun paquet ne sera envoyé en dehors du réseau.

Supposons que nous voulions générer du trafic basé sur DDos :

root@kitploit:~
[email protected]:~# pig --signatures=pigsty/ddos.pigsty\
> --gateway=10.0.2.2\
> --net-mask=255.255.255.0 --lo-iface=eth0

Maintenant, nous voulons tout perturber :

root@kitploit:~
[email protected]:~# pig --signatures=pigsty/ddos.pigsty,pigsty/attackresponses.pigsty,\
> pigsty/badtraffic.pigsty,pigsty/backdoors.pigsty\
> --gateway=10.0.2.2 --net-mask=255.255.255.0 --lo-iface=eth0

Options supplémentaires

Définir les délais d'attente entre les envois de signatures

Pour cela, utilisez l'option --timeout=<millisecondes>

Suppression de l'écho

Utilisez l'option --no-echo.

Définir les cibles

Utilisez l'option --targets. Vous pouvez spécifier une liste basée sur des IP exactes, des masques IP et des CIDRs.

Regardez ceci :

root@kitploit:~
[email protected]:~# pig --signatures=pigsty/local-mess.pigsty\
> --targets=192.30.70.3,192.30.70.*,192.30.70.0/9\
> --gateway=10.0.2.2\
> --net-mask=255.255.255.0\
> --lo-iface=eth0

Ne pas utiliser la passerelle

Ceci est utile lorsque les signatures chargées n'enverront pas de données en dehors du réseau actuel. Pour le signaler, vous devez utiliser l'option --no-gateway. Lorsque l'option --no-gateway est utilisée, vous n'avez pas besoin de spécifier l'adresse de la passerelle car les paquets ne circuleront pas en dehors du segment actuel. En conséquence, indiquer le masque de réseau devient également inutile.

Par exemple :

root@kitploit:~
[email protected]:~# pig --signatures=pigsty/local_traffic.pigsty --no-gateway --lo-iface=eth2

Dans l'exemple ci-dessus, la trame ethernet ne sera plus de la responsabilité de pig. Pour cette raison, pig ne se plaindra pas du manque des options --gateway et --net-mask.

L'option --no-gateway est très pratique dans les cas où vous devez générer du trafic ARP. Jetez un œil à cet autre document expliquant comment effectuer une usurpation ARP avec pig.

Envoyer une seule signature et revenir

Peut-être avez-vous besoin d'envoyer une seule signature, puis de revenir à l'appelant pour vérifier ce qui s'est passé après. Ce genre de besoin est courant lorsque vous utilisez cette application comme support pour des tests système ou des tests unitaires. Donc, si vous avez besoin de faire cela, vous devriez essayer d'utiliser l'option --single-test :

root@kitploit:~
[email protected]:~# pig --signature=pigsty/syn-scan.pigsty --targets=127.0.0.1 --single-test\
> --gateway=10.0.2.2 --net-mask=255.255.255.0 --lo-iface=eth0

Après avoir exécuté cette commande, pig sélectionnera une seule signature du fichier syn-scan.pigsty, essaiera de l'envoyer, puis se fermera. Si une erreur s'est produite pendant le processus, pig se fermera avec un code de sortie égal à 1, sinon pig se fermera avec un code de sortie égal à 0.

Spécifier le mode de parcours des pigsty

Le mode de fonctionnement de base de pig est une boucle sans fin qui crache des tonnes de paquets sur le réseau en respectant un délai d'attente préalablement défini.

Vous pouvez définir la manière dont pig parcourt les paquets chargés pour les envoyer en utilisant l'option --loop=<mode>. Pour l'instant, les modes sont deux : random (par défaut) et sequential.

Le mode sequential réitérera les signatures lorsqu'il atteindra la fin de la liste des signatures de paquets chargées.

Les sous-tâches

Les sous-tâches sont des tâches mineures utiles liées à la création de paquets qui sont intégrées dans pig pour vous aider lors de vos sessions de création. Ces tâches peuvent être accessibles en utilisant l'option --sub-task=<nom-tache>.

En raison du fait qu'elles sont pratiquement des sous-programmes, les sous-tâches ont leurs propres particularités et, de ce fait, les détails les concernant se trouvent dans leur propre manuel. Jetez un œil au Tableau 3 pour y accéder.

Tableau 3 : Les sous-tâches de pig.

Astuces Pig

De la trame Ethernet à la couche la plus haute...

Jusqu'à présent, vous pouvez construire des paquets basés sur IPv4 avec UDP ou TCP dans leur couche de transport. Vous pouvez également construire des paquets ARP.

Cependant, vous pouvez aussi construire des paquets en partant de la trame Ethernet. L'avantage est la possibilité de virtuellement construire n'importe quoi au-dessus de la charge utile Ethernet.

Par exemple, même si pig ne propose pas encore de support pour la construction IPv6 cuisinée, vous pouvez toujours la construire en utilisant un pigsty basé sur Ethernet brut. Regardez :

root@kitploit:~
[ eth.hwdst = "5C:AC:4C:AA:F5:B5",
  eth.hwsrc = "08:95:2A:AD:D6:4F",
  eth.type = 0x86DD,
  eth.payload = "\x60\x00\x00\x00\x00\x20\x3a\xff\xfe\x80\x00\x00\x00\x00\x00\x00\x0a\x95\x2a\xff\xfe\xad\xd6\x4f\xfe\x80\x00\x00\x00\x00\x00\x00\x55\x51\x00\xc2\x18\x0f\xdb\x46\x88\x00\x32\x01\xe0\x00\x00\x00\xfe\x80\x00\x00\x00\x00\x00\x00\x0a\x95\x2a\xff\xfe\xad\xd6\x4f\x02\x01\x08\x95\x2a\xad\xd6\x4f",
  signature = "IPv6 from Sparta" ]

En tenant compte du fait que l'inclusion des adresses MAC de destination et source dans un "pigsty Ethernet" est facultative, nous pouvons faire le travail même sans utiliser de champ peluche.

C'est intéressant lorsque vous devez tester de nouveaux protocoles dans votre environnement, entre autres choses amusantes et anormales. De cette manière brute, pig peut rester utile pour vous.

Tester pig depuis zéro

Enregistrez les données suivantes sous le nom "oink.pigsty" :

root@kitploit:~
[ signature   =           "oink",
  ip.version  =                4,
  ip.ihl      =                5,
  ip.tos      =                0,
  ip.src      =        127.0.0.1,
  ip.dst      =  user-defined-ip,
  ip.protocol =               17,
  udp.dst     =             1008,
  udp.src     =            32000,
  udp.payload =        "Oink!!\n" ]

Sur un autre tty, exécutez netcat en mode UDP à l'écoute des connexions sur le port 1008 :

root@kitploit:~
[email protected]:~# nc -u -l -p 1008

Maintenant, exécutez pig en utilisant "oink.pigsty", en indiquant comme cible le loopback :

root@kitploit:~
[email protected]:~# pig --signatures=oink.pigsty --targets=127.0.0.1\
> --gateway=10.0.2.2 --net-mask=255.255.255.0 --lo-iface=eth0

Le netcat devrait commencer à recevoir plusieurs oink et... oui, félicitations !! pig est opérationnel sur votre système ! ;)

Essayez de sniffer votre réseau pour obtenir plus d'informations sur ces paquets UDP qui circulent sur vos interfaces...

Amusez-vous bien !

Télécharger l’outil
ChampSignificationProtocoleType de donnéesExemple de définition
signatureLe nom de la signature-chaînesignature = "Inondation UDP"
eth.hwdstMAC dest. EthernetEthernetMACeth.hwdst = "00:de:ad:be:ef:00"
eth.hwsrcMAC source EthernetEthernetMACeth.hwsrc = "00:de:ad:be:ef:00"
eth.typeType EtherEthernetnombreeth.type = 0x0800
eth.payloadCharge utile EthernetEthernetchaîneeth.payload = "f\x00ob\x04r"
ip.versionVersion IPIPnombreip.version = 4
ip.ihlLongueur en-tête IPIPnombreip.ihl = 5
ip.tosType de serviceIPnombreip.tos = 0
ip.tlenLongueur totaleIPnombreip.tlen = 20
ip.idID du paquetIPnombreip.id = 0xbeef
ip.flagsDrapeaux IPIPnombreip.flags = 4
ip.offsetDécalage fragmentIPnombreip.offset = 0
ip.ttlDurée de vieIPnombreip.ttl = 64
ip.protocolProtocoleIPnombreip.protocol = 6
ip.checksumSomme de contrôleIPnombreip.checksum = 0
ip.srcAdresse sourceIPadresse IPip.src = 192.30.70.3
ip.dstAdresse destinationIPadresse IPip.dst = 192.30.70.3
ip.payloadCharge utile brute IPIPchaîneip.payload = "\x01\x02"
tcp.srcPort sourceTCPnombretcp.src = 80
tcp.dstPort destinationTCPnombretcp.dst = 21
tcp.seqnoNuméro de séquenceTCPnombretcp.seqno = 10202
tcp.acknoNuméro d'accusé de récep.TCPnombretcp.ackno = 10200
tcp.sizeLongueur TCPTCPnombretcp.size = 4
tcp.reservChamp réservé TCPTCPnombretcp.reserv = 0
tcp.urgDrapeau urg. TCPTCPbittcp.urg = 0
tcp.ackDrapeau ack. TCPTCPbittcp.ack = 1
tcp.pshDrapeau psh. TCPTCPbittcp.psh = 0
tcp.rstDrapeau rst. TCPTCPbittcp.rst = 0
tcp.synDrapeau syn. TCPTCPbittcp.syn = 0
tcp.finDrapeau fin. TCPTCPbittcp.fin = 0
tcp.wsizeTaille fenêtre TCPTCPnombretcp.wsize = 0
tcp.checksumSomme de contrôleTCPnombretcp.checksum = 0
tcp.urgpPointeur urgentTCPnombretcp.urgp = 0
tcp.payloadCharge utileTCPchaînetcp.payload = "\x01abc"
udp.srcPort sourceUDPnombreudp.src = 53
udp.dstPort destinationUDPnombreudp.dst = 7
udp.sizeLongueur UDPUDPnombreudp.size = 8
udp.checksumSomme de contrôleUDPnombreudp.checksum = 0
udp.payloadCharge utileUDPnombreudp.payload = "boo!"
icmp.typeType ICMPICMPnombreicmp.type = 0
icmp.codeCode ICMPICMPnombreicmp.code = 0
icmp.checksumSomme de contrôleICMPnombreicmp.checksum = 0
icmp.payloadCharge utileICMPchaîneicmp.payload = "ping!"
arp.hwtypeType matériel ARPARPnombrearp.hwtype = 0x1
arp.ptypeType protocole ARPARPnombrearp.ptype = 0x0800
arp.hwlenLongueur matériel ARPARPnombrearp.hwlen = 6
arp.opcodeCode opération ARPARPnombrearp.opcode = 2
arp.hwsrcAdresse matérielle src ARPARPMACarp.hwsrc = "de:ad:be:ef:0:0"
arp.psrcAdresse protocole src ARPARPadresse IParp.psrc = 192.30.70.3
arp.hwdstAdresse matérielle dst ARPARPMACarp.hwdst = "de:ad:be:ef:0:0"
arp.pdstAdresse protocole dst ARPARPadresse IParp.pdst = 192.30.70.3
Signification
north-american-ipAdresses IP d'Amérique du Nord
south-american-ipAdresses IP d'Amérique du Sud
asian-ipAdresses IP d'Asie
european-ipAdresses IP d'Europe
Sous-tâcheQue fait-elle ?Manuel
pcap-importImporte un paquet depuis un fichier PCAP vers un fichier pigstycat doc/pcap-import.md
shellExécute pig en mode interactifcat doc/shell.md