Hacking con Python 3: Capitulo 8 — Entendiendo Scapy

Vay3t
3 min readDec 13, 2020

Instalando Scapy y entendiendo su funcionamiento

Que es Scapy?

Scapy es una herramienta de manipulación de paquetes para redes de computadoras, escrita en Python por Philippe Biondi. Puede forjar o decodificar paquetes, enviarlos por cable, capturarlos y hacer coincidir solicitudes y respuestas. También puede manejar tareas como el escaneo, el seguimiento de trazas, el sondeo, las pruebas unitarias, los ataques y el descubrimiento de redes. En pocas palabras Scapy es una navaja suiza que nos permite manipular todo a bajo nivel.

Instalando Scapy

sudo pip3 install scapy

Cómo funciona Scapy?

Tiene 2 formas de funcionamiento, el interactivo y el programático. En el interactivo es igual al tener la consola de Python pero con todo el paquete de Scapy importado. El modo programático funciona igual que una biblioteca cualquiera de Python. Para un funcionamiento correcto de Scapy se necesita permisos de root

root@vay3t:~# scapy -H
INFO: Can't import matplotlib. Won't be able to plot.
INFO: Can't import PyX. Won't be able to use psdump() or pdfdump().
WARNING: No route found for IPv6 destination :: (no default route?)
WARNING: IPython not available. Using standard Python shell instead.
AutoCompletion, History are disabled.
Welcome to Scapy (2.4.3)
>>>

Ayuda en Scapy

Cuando estemos en el modo interactivo tenemos la posibilidad de usar ciertas funciones que nos proporcionarán ayuda necesaria para poder usar Scapy.

  • ls(): Lista los protocolos compatibles con Scapy
  • lsc(): Lista las funciones disponibles en Scapy
  • help(): Nos proporciona los detalles de cada elemento en Scapy
  • <TAB><TAB>: (Doble tabulación) Lista todos los elementos de Scapy

Construyendo paquetes

Para poder construir paquetes en Scapy tenemos que entender primero el modelo TCP/IP (https://es.wikipedia.org/wiki/Modelo_TCP/IP) que es en que se basa la herramienta. Se construye desde la capa más baja a la más alta:

pkt = Ether()/IP()/TCP()

En caso de que no brindemos información en las capas, estas serán rellenadas con valores por defecto:

Si nos damos cuenta tenemos destino y origen de la capa 1 con el protocolo Ethernet:

Tenemos la versión, el ttl, el origen y destino de la capa 2 con el protocolo IP:

Y el puerto de origen y destino de la capa 3 con el protocolo TCP:

Estos son los valores más comunes que podremos asignarle a un paquete creado.

Haciendo un ping

Como demostración para poder entender mejor Scapy haremos un sencillo ejemplo, haciendo un ping al Gateway. Para eso necesitaremos crear un paquete antes de enviarlo.

>>> pkt = IP(dst="192.168.100.1")/ICMP()
>>> pkt
<IP frag=0 proto=icmp dst=192.168.100.1 |<ICMP |>>
>>> pkt.show()
###[ IP ]###
version= 4
ihl= None
tos= 0x0
len= None
id= 1
flags=
frag= 0
ttl= 64
proto= icmp
chksum= None
src= 192.168.100.232
dst= 192.168.100.1
\options\
###[ ICMP ]###
type= echo-request
code= 0
chksum= None
id= 0x0
seq= 0x0

Donde dst es el destino. Luego de crear el paquete nos toca enviarlo.

>>> send(pkt)
.
Sent 1 packets.

Si nos damos cuenta no recibimos ningún tipo de respuesta, eso es porque la función send sólo se encarga de enviar el paquete, pero no de esperar una respuesta. Para poder recibir una respuesta usaremos sr1 (también se puede usar sr pero esta captura y recibe paquetes continuamente). Lo que hace es enviar un paquete y esperar la respuesta de ese paquete. Podremos guardar la respuesta en una variable para su posterior análisis.

>>> ans = sr1(pkt)
Begin emission:
Finished sending 1 packets.
*
Received 1 packets, got 1 answers, remaining 0 packets
>>> ans
<IP version=4 ihl=5 tos=0x0 len=28 id=47006 flags= frag=0 ttl=64 proto=icmp chksum=0x7908 src=192.168.100.1 dst=192.168.100.232 |<ICMP type=echo-reply code=0 chksum=0xffff id=0x0 seq=0x0 |>>

Ahora, si nos ponemos a analizar el resultado nos damos cuenta que tenemos la respuesta del host donde src=192.168.100.1 es la IP proveniente del host y dst=192.168.100.18 vendría siendo nuestra IP.

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

Vay3t
Vay3t

No responses yet

What are your thoughts?