Scapy - pakiety sieciowe na pythonowym warsztacie

19
 Scapy pakiety sieciowe na pythonowym warsztacie Konrad Gawda, PyWaw#4 12.09.2011

Transcript of Scapy - pakiety sieciowe na pythonowym warsztacie

Page 1: Scapy - pakiety sieciowe na pythonowym warsztacie

5/10/2018 Scapy - pakiety sieciowe na pythonowym warsztacie - slidepdf.com

http://slidepdf.com/reader/full/scapy-pakiety-sieciowe-na-pythonowym-warsztacie 1/19

Scapypakiety sieciowe na pythonowym

warsztacie

Konrad Gawda, PyWaw#4 12.09.2011

Page 2: Scapy - pakiety sieciowe na pythonowym warsztacie

5/10/2018 Scapy - pakiety sieciowe na pythonowym warsztacie - slidepdf.com

http://slidepdf.com/reader/full/scapy-pakiety-sieciowe-na-pythonowym-warsztacie 2/19

Scapy - prezentacja

teoria● Co to jest pakiet...● Co to jest Scapy?● Co Scapy robi z pakietami?

 praktyka

● Pakiety● Wysyłanie

● Odbieranie● Sniffing● Dla wzrokowców● Jako biblioteka

Page 3: Scapy - pakiety sieciowe na pythonowym warsztacie

5/10/2018 Scapy - pakiety sieciowe na pythonowym warsztacie - slidepdf.com

http://slidepdf.com/reader/full/scapy-pakiety-sieciowe-na-pythonowym-warsztacie 3/19

Pakiet, sieć... (krótkie przypomnienie)

Page 4: Scapy - pakiety sieciowe na pythonowym warsztacie

5/10/2018 Scapy - pakiety sieciowe na pythonowym warsztacie - slidepdf.com

http://slidepdf.com/reader/full/scapy-pakiety-sieciowe-na-pythonowym-warsztacie 4/19

Co to jest Scapy?

"Scapy is a powerful interactive packet manipulation program." 

Nie ma idealnych narzędzi? Złóż je sobie sam...

● biblioteka pythonowa>>> form scapy.all import *

● narzędzie (dostosowana konsola pythonowa)$ sudo scapy

● głównie pod Linuxa, ale nowsza wersja działa też naWindows

Page 5: Scapy - pakiety sieciowe na pythonowym warsztacie

5/10/2018 Scapy - pakiety sieciowe na pythonowym warsztacie - slidepdf.com

http://slidepdf.com/reader/full/scapy-pakiety-sieciowe-na-pythonowym-warsztacie 5/19

Co Scapy robi z pakietami?

Tworzy oraz dekoduje pakiety dla wielu różnych protokołów.Wysyła, przechwytuje, łączy zapytania i odpowiedzi...

zastępuje:

wykonuje:

prawie zastępuje:

Page 6: Scapy - pakiety sieciowe na pythonowym warsztacie

5/10/2018 Scapy - pakiety sieciowe na pythonowym warsztacie - slidepdf.com

http://slidepdf.com/reader/full/scapy-pakiety-sieciowe-na-pythonowym-warsztacie 6/19

Scapy - założenia

Pakiet - jako obiektPayload jako atrybut pakietuLista pakietów - jako obiekt

Dobre ("sprytne") wartości domyślneŻadna wartość nie jest zabroniona ;)

Nie interpretuje - tylko dekoduje

Page 7: Scapy - pakiety sieciowe na pythonowym warsztacie

5/10/2018 Scapy - pakiety sieciowe na pythonowym warsztacie - slidepdf.com

http://slidepdf.com/reader/full/scapy-pakiety-sieciowe-na-pythonowym-warsztacie 7/19

Praktyka

scapy live

Page 8: Scapy - pakiety sieciowe na pythonowym warsztacie

5/10/2018 Scapy - pakiety sieciowe na pythonowym warsztacie - slidepdf.com

http://slidepdf.com/reader/full/scapy-pakiety-sieciowe-na-pythonowym-warsztacie 8/19

Zaczynamy

$ sudo scapy >> ls() #lista dostępnych typów

 >> lsc() #lista dostępnych funkcji

(w prezentacji podam tylko polecenia - wyniki douzyskania samemu, dla leniwych - w tutorialu...)

Page 9: Scapy - pakiety sieciowe na pythonowym warsztacie

5/10/2018 Scapy - pakiety sieciowe na pythonowym warsztacie - slidepdf.com

http://slidepdf.com/reader/full/scapy-pakiety-sieciowe-na-pythonowym-warsztacie 9/19

Pakiety

a = IP(dst="192.168.1.1") #tak tworzymy pakietb = a / TCP() #operator "/" wkłada jeden pakiet do

b.show()

Ether() #"pakiet" ethernetowy

a = Ether()/IP(dst="www.slashdot.org")/ TCP()/"GET /index.htmlHTTP/1.0 \n\n" hexdump(a) str(a)

a[IP] #zwróć pakiet tylko z warstwami od IP w górę

Page 10: Scapy - pakiety sieciowe na pythonowym warsztacie

5/10/2018 Scapy - pakiety sieciowe na pythonowym warsztacie - slidepdf.com

http://slidepdf.com/reader/full/scapy-pakiety-sieciowe-na-pythonowym-warsztacie 10/19

Wysyłanie

send (IP(dst="1.2.3.4")/ICMP()) #wysyłamy w warstwie IPsend (IP(dst=("wp.pl","onet.pl"))/TCP(dport=[80,443]))#wiele wartości - jeden obiekt przedstawia wiele pakietów -różne możliwości zapisu:#("wp.pl","onet.pl")

#["wp.pl","onet.pl"]#"192.168.1.*"#"192.168.1.10-100"#"192.168.1.0/24"

sendp(Ether()/IP(dst="1.2.3.4",ttl=(1,4)), iface="eth1")

  #send z literką "p" - wysyłamy w warstwie 2 (Ethernet) sendp("I'm travelling on Ethernet", iface="wlan0",

loop=1, inter=0.2) #powtarzaj wysyłanie...

Page 11: Scapy - pakiety sieciowe na pythonowym warsztacie

5/10/2018 Scapy - pakiety sieciowe na pythonowym warsztacie - slidepdf.com

http://slidepdf.com/reader/full/scapy-pakiety-sieciowe-na-pythonowym-warsztacie 11/19

Wysyłanie + odbieranie

ans,unans = sr(IP(dst='wp.pl')/ICMP())#wyślij i zbieraj odpowiedzi aż do przerwania#domyślne wartości! dla ICMP: echo request

 p = sr1(IP(dst="8.8.8.8")/UDP()

/DNS(rd=1,qd=DNSQR(qname="www.wp.pl")))#wyślij i czekaj na jedną odpowiedź

p.sprintf("%.time% %-15s,IP.src% -> %-15s,IP.dst% %IP.chksum% %03xr,IP.proto%") #wydrukujmy...

ans. make_table( #wydrukujmy tabelkę...lambda(s,r): (s.dst, s.dport,r.sprintf(

"{TCP:%TCP.flags%}{ICMP:%IP.src% - %ICMP.type%}"))) #własna notacja z klamrami i procentami...

Page 12: Scapy - pakiety sieciowe na pythonowym warsztacie

5/10/2018 Scapy - pakiety sieciowe na pythonowym warsztacie - slidepdf.com

http://slidepdf.com/reader/full/scapy-pakiety-sieciowe-na-pythonowym-warsztacie 12/19

Sniffing

tshark() sniff(iface="eth1", prn=lambda x: x.summary())

sniff(filter="icmp and host 66.35.250.151", count=2)

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

))

pkts[TCP] #zwróć tylko pakiety TCP pkts = 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%"

))

Page 13: Scapy - pakiety sieciowe na pythonowym warsztacie

5/10/2018 Scapy - pakiety sieciowe na pythonowym warsztacie - slidepdf.com

http://slidepdf.com/reader/full/scapy-pakiety-sieciowe-na-pythonowym-warsztacie 13/19

Dla wzrokowców

### Gnuplot a. multiplot(lambda x: (x[Ether].src, len(x))) 

### Graphviz

res,unans = traceroute(["www.microsoft.com","www.cisco.com","www.yahoo.com","www.wanadoo.fr","www.pacsec.com"],dport=[80,443],maxttl=20,retry=-2)

res.graph() #patrz następna plansza... res.trace3D() #kolejna plansza...

Page 14: Scapy - pakiety sieciowe na pythonowym warsztacie

5/10/2018 Scapy - pakiety sieciowe na pythonowym warsztacie - slidepdf.com

http://slidepdf.com/reader/full/scapy-pakiety-sieciowe-na-pythonowym-warsztacie 14/19

Page 15: Scapy - pakiety sieciowe na pythonowym warsztacie

5/10/2018 Scapy - pakiety sieciowe na pythonowym warsztacie - slidepdf.com

http://slidepdf.com/reader/full/scapy-pakiety-sieciowe-na-pythonowym-warsztacie 15/19

Page 16: Scapy - pakiety sieciowe na pythonowym warsztacie

5/10/2018 Scapy - pakiety sieciowe na pythonowym warsztacie - slidepdf.com

http://slidepdf.com/reader/full/scapy-pakiety-sieciowe-na-pythonowym-warsztacie 16/19

Jako biblioteka

#! /usr/bin/env python from scapy.all import * def arp_monitor_callback(pkt):

if ARP in pkt and pkt[ARP].op in (1,2):return pkt.sprintf("%ARP.hwsrc% %ARP.psrc%")

sniff(prn=arp_monitor_callback,filter="arp", store=0)

Page 17: Scapy - pakiety sieciowe na pythonowym warsztacie

5/10/2018 Scapy - pakiety sieciowe na pythonowym warsztacie - slidepdf.com

http://slidepdf.com/reader/full/scapy-pakiety-sieciowe-na-pythonowym-warsztacie 17/19

Finał

Scapy? Where is Scapy?.... 

http://www.secdev.org/projects/scapy/ 

Oczywiście jest tutorial :)

Page 18: Scapy - pakiety sieciowe na pythonowym warsztacie

5/10/2018 Scapy - pakiety sieciowe na pythonowym warsztacie - slidepdf.com

http://slidepdf.com/reader/full/scapy-pakiety-sieciowe-na-pythonowym-warsztacie 18/19

Pytania? 

Page 19: Scapy - pakiety sieciowe na pythonowym warsztacie

5/10/2018 Scapy - pakiety sieciowe na pythonowym warsztacie - slidepdf.com

http://slidepdf.com/reader/full/scapy-pakiety-sieciowe-na-pythonowym-warsztacie 19/19