Scapy

Olá pessoal !!! Bem vindo ao site BackTrack Brasil !!!

Neste pequeno tutorial apresentamos o Scapy.

Scapy é um programa de manipulação interativa poderosa de pacote. É capaz de forjar ou decodificar os pacotes de um grande número de protocolos, enviá-los, capturá-los, combinar as perguntas e respostas, e muito mais. Ele pode lidar facilmente com tarefas mais clássicas, como a digitalização, tracerouting, sondagem, testes de unidade, ataques ou descoberta de rede (que pode substituir hping, 85% dos nmap, arpspoof, arp-sk, arping, tcpdump, tethereal, p0f, etc.) Ele também funciona muito bem em um monte de outras tarefas específicas que a maioria das outras ferramentas não pode segurar, como o envio de quadros inválidos, injetando seus próprios quadros 802.11, combinando técnicas (VLAN hopping + envenenamento de cache ARP, VOIP decodificação de canal criptografado WEP. ..), etc.

Para captura de tráfego de um host, digite o seguinte comando no prompt do Scapy:

>>> sniff(filter=”tcp and host 192.168.1.18″, count=30)

Fig 1

Depois execute os seguintes comandos

>>> a=_

>>> a.nsummary()

Fig 2

Este comando fareja os próximos 10 pacotes trafegando na rede para o host 192.168.1.18

Fig 3

 

Mudando o comando e alterando a função (count=60) farejaremos os próximos 60 pacotes trafegando na rede para o host 192.168.1.18

>>> sniff(filter=”tcp and host 192.168.1.18″, count=60

Fig 4

Utilizando a função sprintf()  poderemos obter mais controle sobre o que é exibido.

>>> pkts = sniff(prn=lambda x:x.sprintf(“{IP:%IP.src% -> %IP.dst%\n}{Raw:%Raw.load%\n}”))

 

Fig 5

Podemos farejar qualquer porta, neste exemplo vamos farejar as portas 25 e 110 referente ao e-mail com o seguinte comando.

>>> a=sniff(filter=”tcp and ( port 25 or port 110 )”, prn=lambda x:x.sprintf(“%IP.src%:TCP. sport% -> %IP.dst%:%TCP.dport% 2s, TCP.flags%:%TCP.payload%”))

Fig 6

Com este comando farejamos os pacotes trafegados via TCP nas portas 25 e 110 . Usamos o operador lambda para denotar funções anônimas com a função sprintf(), afim de obtermos mais controle sobre as informações apresentadas.

Com o seguinte comando o Scapy fareja a interface eth0 ligada a uma rede externa.

>> a=sniff(iface=”eth0″, prn=lambda x: x.summary())

Fig 7

  

Podemos mostrar a topologia da rede graficamente, através de um diagrama de fluxo de pacotes utilizando o método conversations(). Neste caso, necessitamos dos programas ImageMagick e Graphviz.

Fig 8

Podemos utilizar o mesmo comando para redes sem fio e através do gráfico gerado verificarmos a topologia de rede.

>>> a=sniff(iface=”wlan0″, prn=lambda x: x.summary())

 >>> a.conversations()

Com o comando  ls() podemos listar os protocolos suportados pelo Scapy. Vejamos:

>>> ls()

 

Fig 9

Fig 9.1

Podemos listar a estrutura do segmento UDP, TCP, ICMP, etc.

>>> ls(UDP)

Fig 10

>>> ls(TCP)

Fig 11

>>> ls(ICMP)

Fig 12

Com o seguinte comando listamos os comandos do usuário.

>>> lsc()

Fig 13

Com Scapy podemos manipular os pacotes da camada 3 e enviá-los com a função send() lidando com roteamento de camada2. A Função sendp() trabalha na camada 2. No entanto precisamos escolher a interface correta.

Fig 14

Fig 14.1

Vamos fazer algo mais interessante que é enviar e receber pacotes com Scapy. A função sr1() é para enviar pacotes e receber respostas. Vamos ver que a função retorna um par de pacotes e respostas e os pacotes não respondidos. A função sr1() é uma variante que retorna apenas um pacote que respondeu o pacote ou um conjunto de pacotes enviados. Os pacotes estão na camada 3, como IP, ARP, etc. A função srp() faz o mesmo com os pacotes na camada 2, como Ethernet, 802.3, etc.

Fig 15

Vamos aplicar uma recursão no DNS do roteador.

Fig 16

Finalizando vamos verificar como gerar um grupo de pacotes com extrema facilidade utilizando o Scapy. Estaremos aplicando um conjunto de pacotes utilizando um tipo de produto cartesiano com campos.

Desta forma, é possível vermos a grande capacidade, desta ferramenta, pela qual consolida uma grande flexibilidade proporcionando uma varredura complexa e personalizada.

 

Fig 17

Um grande abraço a todos e até a próxima !!!

 

By: Gerson Raymond

Técnico em Contabilidade, Técnico em Eletrônica, Técnico em Telecomunicações, Bacharel em Ciência da Computação, Administrador de Redes Linux (CentOS, XEN, Zabbix, Asterisk/Elastix) e Pós-Graduando em Segurança em Tecnologia da Informação – UNIVERSIDADE MACKENZIE – SP.

Homepage: http://www.grsecurity.com.br