![Page 1: Scapy. Generación y manipulación básica de paquetes de red](https://reader033.vdocumento.com/reader033/viewer/2022052311/5577c9e2d8b42ae0418b47c8/html5/thumbnails/1.jpg)
Scapy
Generación y manipulación básica
de paquetes de red
David Cristóbal López
“Osito”
Arroutada 18 – A Coruña17 a 20 de Noviembre de 2011
![Page 2: Scapy. Generación y manipulación básica de paquetes de red](https://reader033.vdocumento.com/reader033/viewer/2022052311/5577c9e2d8b42ae0418b47c8/html5/thumbnails/2.jpg)
• ¿Qué es Scapy?• Protocolos• Comandos• Generación de paquetes• Apilado de capas• Visualización• Envío• Manipulación de ficheros• Edición de paquetes capturados• Preguntas - Dudas
Índice
![Page 3: Scapy. Generación y manipulación básica de paquetes de red](https://reader033.vdocumento.com/reader033/viewer/2022052311/5577c9e2d8b42ae0418b47c8/html5/thumbnails/3.jpg)
• Es un script escrito en Python
• Genera paquetes de red
• Permite manipular capturas
• Es capaz de realizar ataques
• Funciona con los principales protocolos de comunicación
¿Qué es Scapy?
![Page 4: Scapy. Generación y manipulación básica de paquetes de red](https://reader033.vdocumento.com/reader033/viewer/2022052311/5577c9e2d8b42ae0418b47c8/html5/thumbnails/4.jpg)
- Al ser un script, está disponible tanto para Linux como para Windows, ya que Python permite ambos sistemas
Scapy < 2.X Python 2.4
Scapy 2.X Python 2.5 o superior
-Para funcionar, necesita tener instalado Python junto con varias dependencias, según lo que necesitemos (dnet, pcap, pyreadline, pywin32, winpcap)
- Aparte, puede utilizar varias librerías para servicios avanzados (Plot, mostrar en pdf el paquete…)
¿Qué es Scapy?
![Page 5: Scapy. Generación y manipulación básica de paquetes de red](https://reader033.vdocumento.com/reader033/viewer/2022052311/5577c9e2d8b42ae0418b47c8/html5/thumbnails/5.jpg)
Scapy es capaz de “diseccionar” la mayoría de protocolos que existen (IP, Ethernet, STP, HSRP…)
Para ver todos los protocolos que soporta, se usa el comando ls()
Protocolos
Protocolos
![Page 6: Scapy. Generación y manipulación básica de paquetes de red](https://reader033.vdocumento.com/reader033/viewer/2022052311/5577c9e2d8b42ae0418b47c8/html5/thumbnails/6.jpg)
ARPASN1_PacketBOOTPCookedLinuxDHCPDNSDNSQRDNSRRDot11Dot11ATIMDot11AssoReqDot11AssoRespDot11AuthDot11BeaconDot11DeauthDot11DisasDot11EltDot11ProbeReqDot11ProbeRespDot11QoSDot11ReassoReqDot11ReassoRespDot11WEPDot1QDot3EAPEAPOLEtherGPRSGREHCI_ACL_HdrHCI_Hdr
Protocolos
HDLCHSRPICMPICMPerrorIPIPerrorIPv6ISAKMPISAKMP_classISAKMP_payloadISAKMP_payload_HashISAKMP_payload_IDISAKMP_payload_KEISAKMP_payload_NonceISAKMP_payload_ProposalISAKMP_payload_SAISAKMP_payload_TransformISAKMP_payload_VendorIDIrLAPCommandIrLAPHeadIrLMPL2CAP_CmdHdrL2CAP_CmdRejL2CAP_ConfReqL2CAP_ConfRespL2CAP_ConnReqL2CAP_ConnRespL2CAP_DisconnReqL2CAP_DisconnRespL2CAP_HdrL2CAP_InfoReqL2CAP_InfoResp
L2TPLLCMGCPMobileIPMobileIPRRPMobileIPRRQMobileIPTunnelDataNBNSNodeStatusResponseNBNSNodeStatusResponseEndNBNSNodeStatusResponseServiceNBNSQueryRequestNBNSQueryResponseNBNSQueryResponseNegativeNBNSRequestNBNSWackResponseNBTDatagramNBTSessionNTPNetBIOS_DSNetflowHeaderNetflowHeaderV1NetflowRecordV1NoPayloadPPPPPP_ECPPPP_ECP_OptionPPP_IPCPPPP_IPCP_OptionPPPoEPPPoEDPacket
PaddingPrismHeaderRIPRIPEntryRTPRadioTapRadiusRawSMBMailSlotSMBNegociate_Protocol_Request_HeaderSMBNegociate_Protocol_Request_TailSMBNegociate_Protocol_Response_Advanced_SecuritySMBNegociate_Protocol_Response_No_SecuritySMBNegociate_Protocol_Response_No_Security_No_KeySMBNetlogon_Protocol_Response_HeaderSMBNetlogon_Protocol_Response_Tail_LM20SMBNetlogon_Protocol_Response_Tail_SAMSMBSession_Setup_AndX_RequestSMBSession_Setup_AndX_ResponseSNAPSNMPSNMPbulk
SNMPgetSNMPinformSNMPnextSNMPresponseSNMPsetSNMPtrapv1SNMPtrapv2SNMPvarbindSTPSebekHeadSebekV1SebekV2SebekV2SockSebekV3SebekV3SockSkinnyTCPTCPerrorTFTPTFTP_ACKTFTP_DATATFTP_ERRORTFTP_OACKTFTP_OptionTFTP_OptionsTFTP_RRQTFTP_WRQUDPUDPerrorX509CertX509RDNX509v3Ext_IPv6OptionHeader
Scapy 1.2.0.2 – 150 protocolos
![Page 7: Scapy. Generación y manipulación básica de paquetes de red](https://reader033.vdocumento.com/reader033/viewer/2022052311/5577c9e2d8b42ae0418b47c8/html5/thumbnails/7.jpg)
Para el control de Scapy, disponemos de varios comandos, que pueden ser listados con el comando lsc()
Comandos
Comandos
![Page 8: Scapy. Generación y manipulación básica de paquetes de red](https://reader033.vdocumento.com/reader033/viewer/2022052311/5577c9e2d8b42ae0418b47c8/html5/thumbnails/8.jpg)
Hay comandos que no se muestran en la ayuda, como los de gestión de ficheros (rdpcap, wrpcap) o los de mostrar gráficos (psdump, pdfdump)
La disponibilidad de muchos de los comandos, depende de si están instaladas las librerías adicionales para dar esa funcionalidad (desencriptación WEP, dibujo, …)
Algunas de las extensiones sólo están disponibles para Linux
Comandos
![Page 9: Scapy. Generación y manipulación básica de paquetes de red](https://reader033.vdocumento.com/reader033/viewer/2022052311/5577c9e2d8b42ae0418b47c8/html5/thumbnails/9.jpg)
Para generar paquetes, hay que utilizar los protocolos antes mencionados.
Se pueden generar paquetes tanto de capa 2 (Ethernet) como de capa 3 (IP), necesarios para la comunicación.
Después, se añaden el resto de protocolos que necesitemos
Generación de paquetes
Generación de paquetes
![Page 10: Scapy. Generación y manipulación básica de paquetes de red](https://reader033.vdocumento.com/reader033/viewer/2022052311/5577c9e2d8b42ae0418b47c8/html5/thumbnails/10.jpg)
Para generar datos de paquete de capa 2, utilizamos el protocolo Ethernet, abreviado como Ether(), indicando MAC de origen (src) y de destino (dst). Para introducir ambos campos, se separan por una coma (,)
capa2=Ether(src=“00:00:0c:12:34:56”,dst=“00:fa:ba:da:00:01”)
Generación de paquetes
![Page 11: Scapy. Generación y manipulación básica de paquetes de red](https://reader033.vdocumento.com/reader033/viewer/2022052311/5577c9e2d8b42ae0418b47c8/html5/thumbnails/11.jpg)
En capa 3, tenemos más campos dentro del comando, aparte de un campo de checksum. Éste campo puede rellenarse o no, ya que se puede generar al momento de enviarse
capa3=IP(src=“192.168.0.1”,dst=“10.200.250.18”)
Generación de paquetes
![Page 12: Scapy. Generación y manipulación básica de paquetes de red](https://reader033.vdocumento.com/reader033/viewer/2022052311/5577c9e2d8b42ae0418b47c8/html5/thumbnails/12.jpg)
Crear un paquete desde cero, puede ser lioso si necesitamos introducir demasiados parámetros.
paquete=Ether(src=“00:00:0c:12:34:56”,dst=“00:fa:ba:da:00:01”)/IP(src=“192.168.0.1”,dst=“10.200.250.18”)
Podemos trabajar con varios “paquetes” de datos, cada uno en un tipo de capa
Una vez creadas todas las capas, podemos apilarlas, generando un único paquete
Apilado de capas
Apilado de capas
![Page 13: Scapy. Generación y manipulación básica de paquetes de red](https://reader033.vdocumento.com/reader033/viewer/2022052311/5577c9e2d8b42ae0418b47c8/html5/thumbnails/13.jpg)
paquete=Ether(src=“00:00:0c:12:34:56”,dst=“00:fa:ba:da:00:01”)/IP(src=“192.168.0.1”,dst=“10.200.250.18”)
Apilado de capas
![Page 14: Scapy. Generación y manipulación básica de paquetes de red](https://reader033.vdocumento.com/reader033/viewer/2022052311/5577c9e2d8b42ae0418b47c8/html5/thumbnails/14.jpg)
capa2=Ether(src=“00:00:0c:12:34:56”,dst=“00:fa:ba:da:00:01”)
capa3=IP(src=“192.168.0.1”,dst=“10.200.250.18”)
paquete=capa2/capa3
Apilado de capas
![Page 15: Scapy. Generación y manipulación básica de paquetes de red](https://reader033.vdocumento.com/reader033/viewer/2022052311/5577c9e2d8b42ae0418b47c8/html5/thumbnails/15.jpg)
Evidentemente, es necesario ver de vez en cuando cómo está el paquete de datos en memoria y si lo hemos generado correctamente.
Para visualizar los paquetes en memoria, tenemos 3 comandos: show(), show2() y hexdump()
Sintaxis:
p.show() Muestra el paquete en memoria
p.show2() Muestra el paquete rellenando los campos que se deben autogenerar
hexdump(p) Vuelca el contenido hexadecimal
Visualización
Visualización
![Page 16: Scapy. Generación y manipulación básica de paquetes de red](https://reader033.vdocumento.com/reader033/viewer/2022052311/5577c9e2d8b42ae0418b47c8/html5/thumbnails/16.jpg)
El comando show() nos muestra el contenido del paquete tal y como lo hemos introducido al generarlo. Es una función heredada en cada paquete de datos automáticamente
NombreDelPaquete.show()
Visualización
![Page 17: Scapy. Generación y manipulación básica de paquetes de red](https://reader033.vdocumento.com/reader033/viewer/2022052311/5577c9e2d8b42ae0418b47c8/html5/thumbnails/17.jpg)
El comando show2() rellena automáticamente los campos que deben autogenerarse al enviarlo, como el checksum, para ver el paquete exacto que saldrá a la red
NombreDelPaquete.show2()
Visualización
![Page 18: Scapy. Generación y manipulación básica de paquetes de red](https://reader033.vdocumento.com/reader033/viewer/2022052311/5577c9e2d8b42ae0418b47c8/html5/thumbnails/18.jpg)
Mediante hexdump() obtenemos el paquete de datos en formato hexadecimal, tal y como se mostraría en cualquier captura de red. Se le pasa como variable el nombre del paquete de datos
Visualización
![Page 19: Scapy. Generación y manipulación básica de paquetes de red](https://reader033.vdocumento.com/reader033/viewer/2022052311/5577c9e2d8b42ae0418b47c8/html5/thumbnails/19.jpg)
Una vez generado el paquete de datos, es necesario lanzarlo a la red, ya que para ello se ha creado.
Podemos enviarlo como paquete de capa 2 o de capa 3, mediante los comandos sendp() y send() respectivamente.
Estos comandos, generan automáticamente campos como el Checksum. Se le pasa como variable el nombre del paquete de datos.
También podemos enviar varias veces el mismo paquete.
Envío
Envío
![Page 20: Scapy. Generación y manipulación básica de paquetes de red](https://reader033.vdocumento.com/reader033/viewer/2022052311/5577c9e2d8b42ae0418b47c8/html5/thumbnails/20.jpg)
sendp(NombreDelPaquete)
sendp(capa2)
Envío
![Page 21: Scapy. Generación y manipulación básica de paquetes de red](https://reader033.vdocumento.com/reader033/viewer/2022052311/5577c9e2d8b42ae0418b47c8/html5/thumbnails/21.jpg)
send(NombreDelPaquete)
send(capa3)
Envío
![Page 22: Scapy. Generación y manipulación básica de paquetes de red](https://reader033.vdocumento.com/reader033/viewer/2022052311/5577c9e2d8b42ae0418b47c8/html5/thumbnails/22.jpg)
send([NombreDelPaquete]*NúmeroDeVeces)
send([capa3]*10)
Envío
![Page 23: Scapy. Generación y manipulación básica de paquetes de red](https://reader033.vdocumento.com/reader033/viewer/2022052311/5577c9e2d8b42ae0418b47c8/html5/thumbnails/23.jpg)
Generar tráfico mandando paquetes de uno en uno, es lioso y complicado, aparte de lento.
Por ello, podemos cargar una captura hecha con un sniffer, tipo Wireshark o tcpdump.
De la misma manera, capturas modificadas con scapy pueden ser guardadas a un fichero pcap.
Para ello, disponemos de los comando rdpcap() y wrpcap(). También podemos capturar tráfico directamente con scapy, mediante sniff()
Manipulación de ficheros
Manipulación de ficheros
![Page 24: Scapy. Generación y manipulación básica de paquetes de red](https://reader033.vdocumento.com/reader033/viewer/2022052311/5577c9e2d8b42ae0418b47c8/html5/thumbnails/24.jpg)
rdpcap(NombreDelFichero)
rdpcap(“capt.pcap”)
Manipulación de ficheros
![Page 25: Scapy. Generación y manipulación básica de paquetes de red](https://reader033.vdocumento.com/reader033/viewer/2022052311/5577c9e2d8b42ae0418b47c8/html5/thumbnails/25.jpg)
Para visualizar un único paquete, se trata como a un elemento de un array.
NombreDelArray[NumeroDePaquete].show()
captura[0].show()
Manipulación de ficheros
![Page 26: Scapy. Generación y manipulación básica de paquetes de red](https://reader033.vdocumento.com/reader033/viewer/2022052311/5577c9e2d8b42ae0418b47c8/html5/thumbnails/26.jpg)
Para guardar un paquete o un conjunto de paquetes en un fichero pcap, usamos wrpcap()
Debemos indicar el nombre del fichero y los datos a guardar.
wrpcap(NombreDelFichero,Paquete/Array)
wrpcap(“capt2.pcap”,paquete)
Manipulación de ficheros
![Page 27: Scapy. Generación y manipulación básica de paquetes de red](https://reader033.vdocumento.com/reader033/viewer/2022052311/5577c9e2d8b42ae0418b47c8/html5/thumbnails/27.jpg)
También es posible obtener directamente el tráfico de red con scapy, sin necesidad de importarlo de otros programas, mediante el comando sniff
Podemos indicar el número máximo de paquetes que queremos recibir o dejarlo obteniendo tráfico hasta pulsar Ctrl+c
capturalarga=sniff()
capturaacotada=sniff(50)
Manipulación de ficheros
![Page 28: Scapy. Generación y manipulación básica de paquetes de red](https://reader033.vdocumento.com/reader033/viewer/2022052311/5577c9e2d8b42ae0418b47c8/html5/thumbnails/28.jpg)
capturalarga=sniff()
capturaacotada=sniff(50)
Manipulación de ficheros
![Page 29: Scapy. Generación y manipulación básica de paquetes de red](https://reader033.vdocumento.com/reader033/viewer/2022052311/5577c9e2d8b42ae0418b47c8/html5/thumbnails/29.jpg)
Cuando tenemos una captura completa y queremos modificar algún campo de algún paquete en concreto, tener que generar todo de nuevo mediante comandos sería extremadamente largo y tedioso.
Tampoco podemos indicarle de nuevo el mismo protocolo, ya que lo duplicaría en el paquete o eliminaría el resto de capas.
Para editar cualquier campo, es necesario indicar el paquete, el protocolo y el campo a editar.
NombreDelPaquete[Protocolo].Campo=NuevoValor
Edición de paquetes capturados
Edición de paquetes capturados
![Page 30: Scapy. Generación y manipulación básica de paquetes de red](https://reader033.vdocumento.com/reader033/viewer/2022052311/5577c9e2d8b42ae0418b47c8/html5/thumbnails/30.jpg)
paquete[IP].src=“172.16.0.1”
Edición de paquetes capturados
![Page 31: Scapy. Generación y manipulación básica de paquetes de red](https://reader033.vdocumento.com/reader033/viewer/2022052311/5577c9e2d8b42ae0418b47c8/html5/thumbnails/31.jpg)
capturalarga[0][Ether].dst=“ff:ff:ff:ff:ff:ff”
Edición de paquetes capturados
![Page 32: Scapy. Generación y manipulación básica de paquetes de red](https://reader033.vdocumento.com/reader033/viewer/2022052311/5577c9e2d8b42ae0418b47c8/html5/thumbnails/32.jpg)
De esta manera, podemos capturar tráfico entre equipos (STP, HSRP, VRRP…) y replicarlo cambiando valores, para realizar ataques, contraataques, manipulaciones en la elección de servidores, envenenamientos ARP, etc.)
También generar paquetes desde cero para hacer ataques de flooding o de spoofing, ya sea en ARP, DHCP, DNS)
Edición de paquetes capturados
![Page 33: Scapy. Generación y manipulación básica de paquetes de red](https://reader033.vdocumento.com/reader033/viewer/2022052311/5577c9e2d8b42ae0418b47c8/html5/thumbnails/33.jpg)
¿Preguntas?
¿Dudas?
"Quien pregunta lo que ignora puede pasar por tonto cinco minutos; pero quien jamás se atreve a formular pregunta alguna, será tonto toda su vida".
Proverbio chino
¿Preguntas? ¿Dudas?
![Page 34: Scapy. Generación y manipulación básica de paquetes de red](https://reader033.vdocumento.com/reader033/viewer/2022052311/5577c9e2d8b42ae0418b47c8/html5/thumbnails/34.jpg)
GRACIAS
David Cristóbal López
“Osito”
www.nosecnofun.com
Arroutada 18 – A Coruña17 a 20 de Noviembre de 2011