Scapy Generación y manipulación básica de paquetes de red David Cristóbal López “ Osito” Arroutada 18 – A Coruña 17 a 20 d...
<ul><li>¿Qué es Scapy? </li></ul><ul><li>Protocolos </li></ul><ul><li>Comandos </li></ul><ul><li>Generación de paquetes </...
<ul><li>Es un script escrito en Python </li></ul><ul><li>Genera paquetes de red </li></ul><ul><li>Permite manipular captur...
<ul><li>- Al ser un script, está disponible tanto para Linux como para Windows, ya que Python permite ambos sistemas </li>...
Scapy es capaz de “diseccionar” la mayoría de protocolos que existen (IP, Ethernet, STP, HSRP…) Para ver todos los protoco...
ARP ASN1_Packet BOOTP CookedLinux DHCP DNS DNSQR DNSRR Dot11 Dot11ATIM Dot11AssoReq Dot11AssoResp Dot11Auth Dot11Beacon Do...
Para el control de Scapy, disponemos de varios comandos, que pueden ser listados con el comando  lsc() Comandos Comandos
Hay comandos que no se muestran en la ayuda, como los de gestión de ficheros (rdpcap, wrpcap) o los de mostrar gráficos (p...
Para generar paquetes, hay que utilizar los protocolos antes mencionados. Se pueden generar paquetes tanto de capa 2 (Ethe...
Para generar datos de paquete de capa 2, utilizamos el protocolo Ethernet, abreviado como Ether(), indicando MAC de origen...
En capa 3, tenemos más campos dentro del comando, aparte de un campo de checksum. Éste campo puede rellenarse o no, ya que...
Crear un paquete desde cero, puede ser lioso si necesitamos introducir demasiados parámetros.  paquete=Ether(src=“00:00:0c...
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
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...
Evidentemente, es necesario ver de vez en cuando cómo está el paquete de datos en memoria y si lo hemos generado correctam...
El comando  show()  nos muestra el contenido del paquete tal y como lo hemos introducido al generarlo. Es una función here...
El comando  show2()  rellena automáticamente los campos que deben autogenerarse al enviarlo, como el checksum, para ver el...
Mediante  hexdump()  obtenemos el paquete de datos en formato hexadecimal, tal y como se mostraría en cualquier captura de...
Una vez generado el paquete de datos, es necesario lanzarlo a la red, ya que para ello se ha creado. Podemos enviarlo como...
sendp(NombreDelPaquete) sendp(capa2) Envío
send(NombreDelPaquete) send(capa3) Envío
send([NombreDelPaquete]*NúmeroDeVeces) send([capa3]*10) Envío
Generar tráfico mandando paquetes de uno en uno, es lioso y complicado, aparte de lento. Por ello, podemos cargar una capt...
rdpcap(NombreDelFichero) rdpcap(“capt.pcap”) Manipulación de ficheros
Para visualizar un único paquete, se trata como a un elemento de un array. NombreDelArray[NumeroDePaquete].show() captura[...
Para guardar un paquete o un conjunto de paquetes en un fichero pcap, usamos  wrpcap() Debemos indicar el nombre del fiche...
También es posible obtener directamente el tráfico de red con scapy, sin necesidad de importarlo de otros programas, media...
capturalarga=sniff() capturaacotada=sniff(50) Manipulación de ficheros
Cuando tenemos una captura completa y queremos modificar algún campo de algún paquete en concreto, tener que generar todo ...
paquete[IP].src=“172.16.0.1” Edición de paquetes capturados
capturalarga[0][Ether].dst=“ff:ff:ff:ff:ff:ff” Edición de paquetes capturados
De esta manera, podemos capturar tráfico entre equipos (STP, HSRP, VRRP…) y replicarlo cambiando valores, para realizar at...
<ul><li>¿Preguntas? </li></ul><ul><li>¿Dudas? </li></ul><ul><li>&quot;Quien pregunta lo que ignora puede pasar por tonto c...
<ul><li>GRACIAS </li></ul><ul><li> </li></ul><ul><li>David Cristóbal López </li></ul><ul><li>“ Osito” </li></ul><ul><li>[...
Próxima SlideShare
Cargando en…5
×

Scapy. Generación y manipulación básica de paquetes de red

6.131 visualizaciones

Publicado el

Charla impartida en la Arroutada 18 (A Coruña) el 19 de Noviembre de 2011. Es muy básica, ya que la tuve que montar en un par de horas, pero como introducción a Scapy da una idea general de funcionamiento.

Publicado en: Tecnología
0 comentarios
2 recomendaciones
Estadísticas
Notas
  • Sé el primero en comentar

Sin descargas
Visualizaciones
Visualizaciones totales
6.131
En SlideShare
0
De insertados
0
Número de insertados
1.170
Acciones
Compartido
0
Descargas
86
Comentarios
0
Recomendaciones
2
Insertados 0
No insertados

No hay notas en la diapositiva.

Scapy. Generación y manipulación básica de paquetes de red

  1. 1. Scapy Generación y manipulación básica de paquetes de red David Cristóbal López “ Osito” Arroutada 18 – A Coruña 17 a 20 de Noviembre de 2011
  2. 2. <ul><li>¿Qué es Scapy? </li></ul><ul><li>Protocolos </li></ul><ul><li>Comandos </li></ul><ul><li>Generación de paquetes </li></ul><ul><li>Apilado de capas </li></ul><ul><li>Visualización </li></ul><ul><li>Envío </li></ul><ul><li>Manipulación de ficheros </li></ul><ul><li>Edición de paquetes capturados </li></ul><ul><li>Preguntas - Dudas </li></ul>Índice
  3. 3. <ul><li>Es un script escrito en Python </li></ul><ul><li>Genera paquetes de red </li></ul><ul><li>Permite manipular capturas </li></ul><ul><li>Es capaz de realizar ataques </li></ul><ul><li>Funciona con los principales protocolos de comunicación </li></ul>¿Qué es Scapy?
  4. 4. <ul><li>- Al ser un script, está disponible tanto para Linux como para Windows, ya que Python permite ambos sistemas </li></ul><ul><li>Scapy < 2.X  Python 2.4 </li></ul><ul><li>Scapy 2.X  Python 2.5 o superior </li></ul><ul><li>Para funcionar, necesita tener instalado Python junto con varias dependencias, según lo que necesitemos (dnet, pcap, pyreadline, pywin32, winpcap) </li></ul><ul><li>Aparte, puede utilizar varias librerías para servicios avanzados (Plot, mostrar en pdf el paquete…) </li></ul>¿Qué es Scapy?
  5. 5. 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
  6. 6. ARP ASN1_Packet BOOTP CookedLinux DHCP DNS DNSQR DNSRR Dot11 Dot11ATIM Dot11AssoReq Dot11AssoResp Dot11Auth Dot11Beacon Dot11Deauth Dot11Disas Dot11Elt Dot11ProbeReq Dot11ProbeResp Dot11QoS Dot11ReassoReq Dot11ReassoResp Dot11WEP Dot1Q Dot3 EAP EAPOL Ether GPRS GRE HCI_ACL_Hdr HCI_Hdr Protocolos HDLC HSRP ICMP ICMPerror IP IPerror IPv6 ISAKMP ISAKMP_class ISAKMP_payload ISAKMP_payload_Hash ISAKMP_payload_ID ISAKMP_payload_KE ISAKMP_payload_Nonce ISAKMP_payload_Proposal ISAKMP_payload_SA ISAKMP_payload_Transform ISAKMP_payload_VendorID IrLAPCommand IrLAPHead IrLMP L2CAP_CmdHdr L2CAP_CmdRej L2CAP_ConfReq L2CAP_ConfResp L2CAP_ConnReq L2CAP_ConnResp L2CAP_DisconnReq L2CAP_DisconnResp L2CAP_Hdr L2CAP_InfoReq L2CAP_InfoResp L2TP LLC MGCP MobileIP MobileIPRRP MobileIPRRQ MobileIPTunnelData NBNSNodeStatusResponse NBNSNodeStatusResponseEnd NBNSNodeStatusResponseService NBNSQueryRequest NBNSQueryResponse NBNSQueryResponseNegative NBNSRequest NBNSWackResponse NBTDatagram NBTSession NTP NetBIOS_DS NetflowHeader NetflowHeaderV1 NetflowRecordV1 NoPayload PPP PPP_ECP PPP_ECP_Option PPP_IPCP PPP_IPCP_Option PPPoE PPPoED Packet Padding PrismHeader RIP RIPEntry RTP RadioTap Radius Raw SMBMailSlot SMBNegociate_Protocol_Request_Header SMBNegociate_Protocol_Request_Tail SMBNegociate_Protocol_Response_Advanced_Security SMBNegociate_Protocol_Response_No_Security SMBNegociate_Protocol_Response_No_Security_No_Key SMBNetlogon_Protocol_Response_Header SMBNetlogon_Protocol_Response_Tail_LM20 SMBNetlogon_Protocol_Response_Tail_SAM SMBSession_Setup_AndX_Request SMBSession_Setup_AndX_Response SNAP SNMP SNMPbulk SNMPget SNMPinform SNMPnext SNMPresponse SNMPset SNMPtrapv1 SNMPtrapv2 SNMPvarbind STP SebekHead SebekV1 SebekV2 SebekV2Sock SebekV3 SebekV3Sock Skinny TCP TCPerror TFTP TFTP_ACK TFTP_DATA TFTP_ERROR TFTP_OACK TFTP_Option TFTP_Options TFTP_RRQ TFTP_WRQ UDP UDPerror X509Cert X509RDN X509v3Ext _IPv6OptionHeader Scapy 1.2.0.2 – 150 protocolos
  7. 7. Para el control de Scapy, disponemos de varios comandos, que pueden ser listados con el comando lsc() Comandos Comandos
  8. 8. 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
  9. 9. 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
  10. 10. 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
  11. 11. 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
  12. 12. 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
  13. 13. 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
  14. 14. 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
  15. 15. 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
  16. 16. 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
  17. 17. 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
  18. 18. 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
  19. 19. 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
  20. 20. sendp(NombreDelPaquete) sendp(capa2) Envío
  21. 21. send(NombreDelPaquete) send(capa3) Envío
  22. 22. send([NombreDelPaquete]*NúmeroDeVeces) send([capa3]*10) Envío
  23. 23. 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
  24. 24. rdpcap(NombreDelFichero) rdpcap(“capt.pcap”) Manipulación de ficheros
  25. 25. Para visualizar un único paquete, se trata como a un elemento de un array. NombreDelArray[NumeroDePaquete].show() captura[0].show() Manipulación de ficheros
  26. 26. 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
  27. 27. 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
  28. 28. capturalarga=sniff() capturaacotada=sniff(50) Manipulación de ficheros
  29. 29. 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
  30. 30. paquete[IP].src=“172.16.0.1” Edición de paquetes capturados
  31. 31. capturalarga[0][Ether].dst=“ff:ff:ff:ff:ff:ff” Edición de paquetes capturados
  32. 32. 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
  33. 33. <ul><li>¿Preguntas? </li></ul><ul><li>¿Dudas? </li></ul><ul><li>&quot;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&quot;. </li></ul><ul><li>Proverbio chino </li></ul>¿Preguntas? ¿Dudas?
  34. 34. <ul><li>GRACIAS </li></ul><ul><li> </li></ul><ul><li>David Cristóbal López </li></ul><ul><li>“ Osito” </li></ul><ul><li>[email_address] </li></ul><ul><li>www.nosecnofun.com </li></ul>Arroutada 18 – A Coruña 17 a 20 de Noviembre de 2011

×