Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
pig — Uma ferramenta de criação de pacotes para Linux. | Kitploit
Ferramentas/GitHubGitHub/rafael-santiago/pig
Evasão de IDS/IPSSegurança de RedeTestes de Penetração
GitHubrafael-santiago/pig

pig

Uma ferramenta de criação de pacotes para Linux.

Ver Repositório
47941há 5 anosRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Pig

Pig (que pode ser entendido como Packet intruder generator) é uma ferramenta Linux de criação de pacotes. Você pode usar Pig para testar seu IDS/IPS entre outras coisas.

Pig traz um monte de assinaturas de ataque conhecidas prontas para uso e você pode expandir essa coleção com coisas mais específicas de acordo com suas necessidades.

Até agora é possível criar assinaturas IPv4 com camada de transporte baseada em TCP, UDP e ICMP. Você também pode criar assinaturas baseadas no protocolo ARP, além de montar o pacote desde seu quadro Ethernet.

Se você chegou aqui pelo meu artigo da 2600 da edição SPRING 2016 número, continue lendo as próximas seções da documentação porque este pequeno Pig tem evoluído desde então.

Como clonar este repositório?

É bem simples:

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

Como compilá-lo?

Você precisa usar o Hefesto para compilar pig. Após seguir os passos para colocar Hefesto funcionando no seu sistema. Vá para o subdiretório pig chamado src e execute o seguinte comando:

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

Após este comando, você deve encontrar o binário pig no caminho src/bin. Você pode usar o binário relativamente a partir de src/bin ou instalá-lo.

Se por algum motivo você estiver tendo problemas de compilação, tente ler alguns comentários presentes em BUILD.md.

Como instalá-lo?

Para instalar você precisa estar dentro do subdiretório src e chamar:

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

Para desinstalar, estando dentro do subdiretório src, você deve chamar:

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

Os arquivos pigsty

Arquivos Pigsty são arquivos de texto simples onde você pode definir um conjunto de assinaturas de pacotes. Há uma sintaxe específica a ser seguida. Veja um exemplo de um arquivo 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!!" ]

Basicamente, todos os dados da assinatura devem estar entre colchetes: [ ... ].

Dentro desta área, a informação é fornecida pelo esquema field = data.

Se você tem alguma experiência com Redes de Computadores, certamente a maioria dos campos listados na Tabela 1 tem um significado forte para você. Você deve usar esses campos para criar suas futuras assinaturas.

Tabela 1: Os campos de assinatura do pig.

Ao criar uma assinatura, você não precisa especificar todos os dados. Se você especificar apenas as partes mais relevantes do pacote, as partes restantes serão preenchidas com valores padrão. As checksums são sempre recalculadas.

Dica: dê uma olhada no subdiretório pigsty. Você encontrará muitos arquivos de assinatura e verá que é bem simples definir novos.

Especificando endereços IP geograficamente

Sim, é possível. Para usar este recurso, você só precisa especificar os valores listados na Tabela 2 em campos do tipo ip address.

Tabela 2: IPs por área geográfica.

Valor a usar

Especificando meus próprios endereços

Em qualquer campo do tipo ip address você deve usar user-defined-ip como valor. Observe que você precisa usar a opção de linha de comando --targets neste caso. Veja a seção Usando pig para mais informações.

Contribua enviando mais assinaturas de pacotes

Se você criar arquivos pigsty que julgar relevantes além do seu próprio ambiente, abra um pull request para incluir esses arquivos úteis aqui. Desde já agradeço!

Usando pig

O uso do Pig é muito direto, sendo necessário fornecer quatro opções básicas que são:

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

Quer saber mais sobre cada opção, hein?... Então vamos lá:

  • A opção --signatures recebe uma lista de caminhos de arquivos para arquivos pigsty.
  • A opção --gateway é onde você especifica o endereço do seu gateway. Esteja ciente de que pig também gera ou pelo menos tenta gerar os quadros ethernet. Por isso, o endereço do gateway é bastante importante para compor corretamente os dados da camada 1.
  • A opção --net-mask para fins de roteamento deve receber sua máscara de rede.
  • A opção --lo-iface é o lugar onde você deve informar o nome da interface de rede local que usará para "drenar" os pacotes gerados.
  • A opção --no-gateway indica que nenhum pacote será enviado para fora da rede.

Supondo que queremos gerar tráfego baseado em DDoS:

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

Agora queremos bagunçar tudo:

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

Opções extras

Definindo timeouts entre os envios de assinaturas

Para isso use a opção --timeout=<millisecs>

Supressão de eco

Use a opção --no-echo.

Definindo alvos

Use a opção --targets. Você pode especificar uma lista baseada em IPs exatos, máscaras de IP e CIDRs.

Veja:

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

Não usando o gateway

Isso é útil quando as assinaturas carregadas não enviarão dados para fora da rede atual. Para sinalizar isso, você precisa usar a opção --no-gateway. Quando a opção --no-gateway é usada, você não precisa especificar o endereço do gateway porque os pacotes não fluirão para fora do segmento atual. Como resultado, informar a máscara de rede também se torna irrelevante.

Por exemplo:

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

No exemplo acima, o quadro ethernet não será mais responsabilidade do pig. Por esta razão, pig não reclamará da falta das opções --gateway e --net-mask.

A opção --no-gateway é bastante útil nos casos em que você precisa gerar tráfego ARP. Dê uma olhada neste outro documento explicando como realizar ARP spoofing com pig.

Enviando apenas uma assinatura e retornando

Talvez você precise enviar apenas uma assinatura e então retornar ao chamador para verificar o que aconteceu depois. Esse tipo de requisito é comum quando você usa esta aplicação como suporte para testes de sistema ou testes unitários. Então, se você precisa fazer isso, tente usar a opção --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

Após executar este comando, pig selecionará apenas uma assinatura do arquivo syn-scan.pigsty e tentará enviá-la e então sairá. Se algum erro ocorrer durante o processo, pig sairá com código de saída igual a 1, caso contrário, pig sairá com código de saída igual a 0.

Especificando o modo de travessia do pigsty

O modo de operação básico do pig é um loop infinito que cospe toneladas de pacotes na rede respeitando um timeout previamente definido.

Você pode definir como pig percorre os pacotes carregados para enviá-los usando a opção --loop=<mode>. Até agora são dois modos: random (o padrão) e sequential.

O modo sequential irá reiterar as assinaturas quando chegar ao fim da lista de assinaturas de pacotes carregadas.

As sub-tarefas

As sub-tarefas são tarefas menores úteis relacionadas à criação de pacotes que são enviadas junto com pig para ajudá-lo em sua sessão de criação. Essas tarefas podem ser acessadas usando a opção --sub-task=<task-name>.

Pelo fato de praticamente serem subprogramas, as sub-tarefas têm suas próprias idiossincrasias e, por isso, os detalhes sobre elas seguem em seu próprio manual. Dê uma olhada na Tabela 3 para acompanhar.

Tabela 3: As sub-tarefas do pig.

Truques do Pig

Do quadro Ethernet até a camada mais alta...

Até agora você pode montar pacotes baseados em IPv4 com UDP ou TCP em sua camada de transporte. Você também pode montar pacotes ARP.

No entanto, você ainda pode montar pacotes começando pelo quadro Ethernet. O legal disso é a possibilidade de montar virtualmente qualquer coisa acima do payload do Ethernet.

Por exemplo, mesmo que pig até agora não ofereça suporte para montagem de IPv6 cozinhado, você ainda pode montá-lo usando um pigsty baseado em Ethernet bruto. Veja:

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" ]

Considerando que a inclusão dos endereços MAC de destino e origem dentro de um "pigsty Ethernet" é opcional, podemos realizar o trabalho mesmo sem usar nenhum campo extra.

É bom quando você precisa testar novos protocolos em seu ambiente, entre outras coisas anômalas e divertidas. Desta forma bruta, pig pode continuar sendo útil para você.

Testando pig do zero

Salve os seguintes dados como "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" ]

Em outro tty execute o netcat no modo UDP ouvindo por conexões na porta 1008:

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

Agora execute pig usando o "oink.pigsty", informando como alvo o 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

O netcat deve começar a receber vários oinks e... sim, parabéns!! pig está funcionando no seu sistema! ;)

Tente farejar sua rede para obter mais informações sobre esses pacotes UDP que estão fluindo pelas suas interfaces...

Divirta-se!

Baixar ferramenta
CampoSignificaProtocoloTipo de dadoExemplo de definição
signatureO nome da assinatura-stringsignature = "Udp flood"
eth.hwdstMAC de destino EthernetEthernetMACeth.hwdst = "00:de:ad:be:ef:00"
eth.hwsrcMAC de origem EthernetEthernetMACeth.hwsrc = "00:de:ad:be:ef:00"
eth.typeTipo EtherEthernetnúmeroeth.type = 0x0800
eth.payloadPayload EthernetEthernetstringeth.payload = "f\x00ob\x04r"
ip.versionVersão IPIPnúmeroip.version = 4
ip.ihlTamanho do cabeçalho InternetIPnúmeroip.ihl = 5
ip.tosTipo de serviçoIPnúmeroip.tos = 0
ip.tlenComprimento totalIPnúmeroip.tlen = 20
ip.idID do pacoteIPnúmeroip.id = 0xbeef
ip.flagsFlags IPIPnúmeroip.flags = 4
ip.offsetDeslocamento de fragmentoIPnúmeroip.offset = 0
ip.ttlTempo de vidaIPnúmeroip.ttl = 64
ip.protocolProtocoloIPnúmeroip.protocol = 6
ip.checksumChecksumIPnúmeroip.checksum = 0
ip.srcEndereço de origemIPendereço IPip.src = 192.30.70.3
ip.dstEndereço de destinoIPendereço IPip.dst = 192.30.70.3
ip.payloadPayload IP brutoIPstringip.payload = "\x01\x02"
tcp.srcPorta de origemTCPnúmerotcp.src = 80
tcp.dstPorta de destinoTCPnúmerotcp.dst = 21
tcp.seqnoNúmero de sequênciaTCPnúmerotcp.seqno = 10202
tcp.acknoNúmero de confirmaçãoTCPnúmerotcp.ackno = 10200
tcp.sizeComprimento TCPTCPnúmerotcp.size = 4
tcp.reservCampo reservado TCPTCPnúmerotcp.reserv = 0
tcp.urgFlag urg. TCPTCPbittcp.urg = 0
tcp.ackFlag ack. TCPTCPbittcp.ack = 1
tcp.pshFlag psh. TCPTCPbittcp.psh = 0
tcp.rstFlag rst. TCPTCPbittcp.rst = 0
tcp.synFlag syn. TCPTCPbittcp.syn = 0
tcp.finFlag fin. TCPTCPbittcp.fin = 0
tcp.wsizeTamanho da janela TCPTCPnúmerotcp.wsize = 0
tcp.checksumChecksumTCPnúmerotcp.checksum = 0
tcp.urgpPonteiro urgenteTCPnúmerotcp.urgp = 0
tcp.payloadPayloadTCPstringtcp.payload = "\x01abc"
udp.srcPorta de origemUDPnúmeroudp.src = 53
udp.dstPorta de destinoUDPnúmeroudp.dst = 7
udp.sizeComprimento UDPUDPnúmeroudp.size = 8
udp.checksumChecksumUDPnúmeroudp.checksum = 0
udp.payloadPayloadUDPnúmeroudp.payload = "boo!"
icmp.typeTipo ICMPICMPnúmeroicmp.type = 0
icmp.codeCódigo ICMPICMPnúmeroicmp.code = 0
icmp.checksumChecksumICMPnúmeroicmp.checksum = 0
icmp.payloadPayloadICMPstringicmp.payload = "ping!"
arp.hwtypeTipo de hardware ARPARPnúmeroarp.hwtype = 0x1
arp.ptypeTipo de protocolo ARPARPnúmeroarp.ptype = 0x0800
arp.hwlenComprimento do hardware ARPARPnúmeroarp.hwlen = 6
arp.opcodeCódigo de operação ARPARPnúmeroarp.opcode = 2
arp.hwsrcEndereço de hardware ARP origemARPMACarp.hwsrc = "de:ad:be:ef:0:0"
arp.psrcEndereço de protocolo ARP origemARPendereço IParp.psrc = 192.30.70.3
arp.hwdstEndereço de hardware ARP destinoARPMACarp.hwdst = "de:ad:be:ef:0:0"
arp.pdstEndereço de protocolo ARP destinoARPendereço IParp.pdst = 192.30.70.3
Significa
north-american-ipEndereços IP da América do Norte
south-american-ipEndereços IP da América do Sul
asian-ipEndereços IP da Ásia
european-ipEndereços IP da Europa
Sub-tarefaO que faz?Manual
pcap-importImporta pacote de um arquivo PCAP para um arquivo pigstycat doc/pcap-import.md
shellExecuta pig no modo interativocat doc/shell.md