- 12 Kas 2023
- 73
- 35
Scapy Nedir?
Scapy pythonla yazılmış olan, spesifik paketler oluşturup bunları iletmemizi sağlayan açık kaynak kodlu bir araç/python kütüphanesidir.
![1*eL6Iwuc__uB1UpXknQhEug.png](https://miro.medium.com/v2/resize:fit:457/1*eL6Iwuc__uB1UpXknQhEug.png)
Scapy Nasıl Kurulur?
Kişiye ait scapy'i kurabilmeniz için Python'un kurulu olması gerekmektedir. Python'un 2 veya 3 olması önemli değildir, ancak 2.7 ve 3.3 sürümlerinden biri yada daha güncel olması önemlidir. Ayrıca bileşenler python'u yüklerken yol olarak tanımlamalarınız ürünlerinize zarar vermez. GNU/Linux sistemlerinde python kurulu olarak gelir ve yol olarak tanımlamalı yani doğrudan terminale python yazdığınızda program çalışmaya başlar ayrıca bir yol belirtmenize gerek kalmaz windows'a yüklerken yükleme seçeneklerinden yol olarak tanımlamayı sağlayan tiki işaretlemeyi unutmayınız.
![1*yZKejdz627LzWHuIPTly6w.png](https://miro.medium.com/v2/resize:fit:500/1*yZKejdz627LzWHuIPTly6w.png)
Debian/Ubuntu'da Kurulumu:
Kod:
sudo apt-get install scapy
Not: Kali Linux kullanıcıları için belirteyim scapy zaten mevcut da yüklü geliyor bu işlemi yapmanız gerek yok.
Kod:
sudo apt-get install scapy
Windows'da Kurulum:
Scapy'nin çalışması için Npcap veya Winpcap yazılımlarından biri köklü kurulmalıdır. Eğer Wireshark gibi programlar yüklüyse Windows'a yüklenirken zaten Winpcap'i varsayılan olarak programla beraber kuruyor. Ben böyle bir durumun söz konusu olmadığı kullanıcılar için ayrı ayrı kurulumunu anlatacağım.
![1*G9ZfJMk3MqPmxoScrvnZHA.png](https://miro.medium.com/v2/resize:fit:480/1*G9ZfJMk3MqPmxoScrvnZHA.png)
Npcap Kurulumu:
Adresinden çalıştırılabilir pencereleri yükleyip çalıştırarak tipik program kurulumu yapar gibi adımları takip ederek kurabilirsiniz.
Winpcap Kurulumu:
Adresinden yine npcap'ın kurulumuyla aynı şekilde kurabilirsiniz.
Not: Açgözlülük içeren fazla mal göz çıkarmaz yaparak, kayıtlı de yüklemeyin. Birbirlerine olumsuz etki yaratır ki zaten yüklerken birinden biri varsa kaldırmanızı söyleyip hatta kendisi kaldırıyor.
Yazılımlarımızı kurduktan sonra gelelim scapy'nin kurulumuna:
Yazılımlarımızı kurduktan sonra gelelim scapy'nin kurulumuna:
Adresinden zip dosyamızı indirip sunabileceğimiz bir yere çıkarıyoruz. Daha sonra komut satırını açıyoruz. Dosyayı çıkardığımız diziye gelip çıkardığımız dizine giriyoruz. “Setup.py” dizisinin geldiğimizde olduğu yer. satıra aşağıdaki kod yazıp çalıştırıyoruz Komutu veriyoruz:
Kod:python setup.py kurulumu
Scapy Nasıl Kullanılır?
Şimdi scapy kullanımından önce konuyu daha iyi görebilmeniz için ağ temelleri hakkında birkaç bilgi vermek istiyorum. Scapy'i doğru bir şekilde kullanabilmeniz için paket başlıklarını bilmenizin gerekli olduğunu biliyor. Ben şimdi burada size tek kaplar, başlıklar, protokolleri anlatamam lakin ödemeleri gereken yerlerden birkaç tanesim. Sürekli tekrarlamayı ve konularımda devam edeceğim gibi kişisel siber güvenlik alanında ilerlemek istediğiniz temellerin sağlam olması gerekmektedir. Üşenip sıkılıp ben doğrudan güvenliğe girecem diye dalamazsınız yoksa bir durmaz anlamaz ezbere iş yaparsınız bu yüzden ağ, web bağlantıları ve her yerde başlarsınız bizim burada verebileceğimiz bilgiler kısıtlı bilgilerdir.
![1*47fGQ0y8rrrt-G47SIFlZw.png](https://miro.medium.com/v2/resize:fit:500/1*47fGQ0y8rrrt-G47SIFlZw.png)
IP Başlığı Hk.
Kaynak IP: Kaynağın IP adresi
Hedef IP: Hedef IP adresi
Bayraklar: Paketin bozulmadan iletilebilmesi için gerekirse parçalanıp parçalanmayacağı hk. Bilgi veren kısımdır.
Başlık Sağlama Toplamı: Karşıdaki makinenin paketi bozulmadan alıp almadığını kontrol etmesini sağlayan paketin bilgi kısmı.
TTL(Time to Live): Gönderdiğimiz paketin loop'a(sonsuz döngü) girmesi için ne kadar süre sonra yok olacağı hakkında bilgi veren kısımdır.
Hedef IP: Hedef IP adresi
Bayraklar: Paketin bozulmadan iletilebilmesi için gerekirse parçalanıp parçalanmayacağı hk. Bilgi veren kısımdır.
Başlık Sağlama Toplamı: Karşıdaki makinenin paketi bozulmadan alıp almadığını kontrol etmesini sağlayan paketin bilgi kısmı.
TTL(Time to Live): Gönderdiğimiz paketin loop'a(sonsuz döngü) girmesi için ne kadar süre sonra yok olacağı hakkında bilgi veren kısımdır.
![1*hrueRCijPxpnfo7KOJOzJA.png](https://miro.medium.com/v2/resize:fit:500/1*hrueRCijPxpnfo7KOJOzJA.png)
TCP Başlığı Hk.
Sec ve Ack Num: Üçlü el sıkışma sırasında cihazların birbirlerini tanımaları için değerleri değerleri.
Kod Bitleri: Paket çeşidini oluşturan kısımdır.
Kod Bitleri: Paket çeşidini oluşturan kısımdır.
![1*dLpKqjw-FtZaQY-0zz9kKQ.png](https://miro.medium.com/v2/resize:fit:500/1*dLpKqjw-FtZaQY-0zz9kKQ.png)
ICMP Başlığı Hk.
Tür: Kontrol mesajının tipi
Kod: Kontrol mesajı tipinin alt dalı, daha spesifik bilgi.
DHCP: Dinamik Ana Bilgisayar Yapılandırma Protokolü. Ağda bulunan cihazlara IP, alt ağ maskesi, ağ geçidi gibi verilerin otomatik olarak atanmasını sağlayan protokoldür. IP çakışması vb durumların önlenmesi için çok önemlidir.
Şimdi bu bilgilerimizi koruyarak scapy kullanımına geçebiliriz. öncelikle temel komutlarımızla başlarız.
Help(): Scapy hakkında yardım sağlayan komuttur. Parantez içine yardım almak istediğiniz şeyi yazabilir veya boş çalışma fonksiyonunu çalıştırıp komut satırına yardım almak istediğiniz konuyu yazabilirsiniz. Girip çıkamayan olursa diye çıkmak için “q”ya basın.
Ls(): Scapy içinde bulunan hazır protokolleri sizin için listeler.
Ls(Protokol): Kullanacağınız protokolün özelliklerini ve varsayılan değerleri gösterir.
Sendp(): 2.katmandan paket yollamaya yarar.
Send(): 3.katmandan paket yollamaya yarar.
Not: Bu ikisi arasında farklı oldukça önemli programlarınızda kullanırken birini değilde diğerini kullanırsanız “Lan nerede bu hata” diye saçınızı başlatabilirsiniz.
Kod: Kontrol mesajı tipinin alt dalı, daha spesifik bilgi.
DHCP: Dinamik Ana Bilgisayar Yapılandırma Protokolü. Ağda bulunan cihazlara IP, alt ağ maskesi, ağ geçidi gibi verilerin otomatik olarak atanmasını sağlayan protokoldür. IP çakışması vb durumların önlenmesi için çok önemlidir.
Şimdi bu bilgilerimizi koruyarak scapy kullanımına geçebiliriz. öncelikle temel komutlarımızla başlarız.
Help(): Scapy hakkında yardım sağlayan komuttur. Parantez içine yardım almak istediğiniz şeyi yazabilir veya boş çalışma fonksiyonunu çalıştırıp komut satırına yardım almak istediğiniz konuyu yazabilirsiniz. Girip çıkamayan olursa diye çıkmak için “q”ya basın.
![1*4hobgr_bRmjv7YZdt-3RXg.png](https://miro.medium.com/v2/resize:fit:700/1*4hobgr_bRmjv7YZdt-3RXg.png)
Ls(): Scapy içinde bulunan hazır protokolleri sizin için listeler.
![1*qPHqJRz_si2MV_UtW45E0Q.png](https://miro.medium.com/v2/resize:fit:700/1*qPHqJRz_si2MV_UtW45E0Q.png)
Ls(Protokol): Kullanacağınız protokolün özelliklerini ve varsayılan değerleri gösterir.
![1*CC87xIE5T1LeAc_ECivF8w.png](https://miro.medium.com/v2/resize:fit:700/1*CC87xIE5T1LeAc_ECivF8w.png)
Sendp(): 2.katmandan paket yollamaya yarar.
Send(): 3.katmandan paket yollamaya yarar.
Not: Bu ikisi arasında farklı oldukça önemli programlarınızda kullanırken birini değilde diğerini kullanırsanız “Lan nerede bu hata” diye saçınızı başlatabilirsiniz.
Temel komutlarımızı dosyalarımıza göre şimdi paketlerimizi yapılandırmaya geçebiliriz. Paketlerimizi oluştururken katman katman içeriklerini gireceğiz.
Scapy İle Ağ Paketi Oluşturmak ve Göndermek:
ICMP Paketi:
İp başlığı ve icmp başlığını oluşturmamız gerekiyor. Aşağıdaki kodları sırayla takip edin.
Kod:
ip_basligi=IP(dst=”Hedef ip”, src=”kaynak ip”, ttl=20)[/COLOR][/CENTER]
[COLOR=rgb(184, 49, 47)][CENTER]icmp_basligi=ICMP(type=8, code=0)
icmp_paketi=ip_basligi/icmp_basligi
send(icmp_paketi)
Şimdi paketimiz bulunsun mi bakalım:
![1*WgzT5OI53kZYBPbCIuiLsw.png](https://miro.medium.com/v2/resize:fit:700/1*WgzT5OI53kZYBPbCIuiLsw.png)
DHCP Paketi:
IP, udp ve dhcp baslıklarını kullanacağız.
Kod:
ip_basligi=IP(src=”0.0.0.0", dst=”255.255.255.255")[/COLOR][/CENTER]
[COLOR=rgb(184, 49, 47)][CENTER]
udp_basligi=UDP(dport=67, spor=68)
dhcp_basligi=DHCP(seçenekler=[(“kira_süresi”, 70000)])
dhcp_paketi=ip_basligi/udp_basligi/dhcp_basligi
gönder(dhcp_paketi)
Paketimizi kontrol edelim:
![1*DMSs6WcteGquCc5scONG3Q.png](https://miro.medium.com/v2/resize:fit:700/1*DMSs6WcteGquCc5scONG3Q.png)
DNS Paketi:
IP, UDP ve DNS kullanacağız.
Kod:
ip_basligi=IP(dest=”8.8.8.8")[/COLOR][/CENTER]
[COLOR=rgb(184, 49, 47)][CENTER]udp_basligi=UDP(dport=53)
dns_basligi=DNS(rd=1, qd=DNSQR(qname=”www.thirdarrowsec.com"))
dns_paketi=ip_basligi/udp_basligi/dns_basligi
gönder(dns_paketi)
Kontrol edelim:
![1*BeXCNyZT_es1pGwhTDDpMg.png](https://miro.medium.com/v2/resize:fit:700/1*BeXCNyZT_es1pGwhTDDpMg.png)
TCP Paketi:
Kod:
tcp_basligi=TCP(sport=8080, dport=22, flags=”S”)[/COLOR][/CENTER]
[COLOR=rgb(184, 49, 47)][CENTER]ip_basligi=IP(src=”127.0.0.1",dst=”127.0.0.1")
tcp_paketi=ip_basligi/tcp_basligi
send(tcp_paketi)
Kontrol edelim:
NOT: Paketleri oluştururken örneklerde olduğu gibi alt katmandan üst katmana doğru yazmamızı unutmayalım.
![1*YF9_G9Jx8wdFiZp7qNz83w.png](https://miro.medium.com/v2/resize:fit:700/1*YF9_G9Jx8wdFiZp7qNz83w.png)
NOT: Paketleri oluştururken örneklerde olduğu gibi alt katmandan üst katmana doğru yazmamızı unutmayalım.
Scapy Kodu Nasıl Dönüştürürüz?
Mesela siz Python 2.7 kullanıyorsunuz ama kodunuzu Python 3.x'e çevirmeniz gerekiyor. Bunu nasıl yaparsınız? Anlatacağım bu aracı sadece scapy kodlarınız için değil, başka python betikleriniz için de kullanabilirsiniz. Bunun için 2to3 adında bir python aracı mevcut. Anlatımımda bu araçtan faydalanacağız.
2to3 aracımız genellikle yorumlayıcı olarak python betiğimize ek olarak ancak Araçlar/komut dosyaları python dizinde de bulunmaktadır. Mesela python 2.7 ile yazılmış “scapy_deneme.py” olarak bir betiğimiz olsun. Bu betiği python 3.x bir sürüme dönüştürmek için terminalin kullanımı aşağıdaki gibidir:
Yukarıdaki gibi kullanırsanız Orijinal betiğinize ek olarak başka bir dosya halinde 3.x sürümünde bir python betiği oluşur. Kod Aşağıdaki dizimini kullanırsanız orijinal dosyanızdan bir kopya oluşturarak doğrudan orijinal dosyanız üzerindeki değişiklikleri yedekleyin
.
Kod:
2 ila 3 $ scapy_deneme.py
Yukarıdaki gibi kullanırsanız Orijinal betiğinize ek olarak başka bir dosya halinde 3.x sürümünde bir python betiği oluşur. Kod Aşağıdaki dizimini kullanırsanız orijinal dosyanızdan bir kopya oluşturarak doğrudan orijinal dosyanız üzerindeki değişiklikleri yedekleyin
Kod:
$ 2to3 -w scapy_deneme.py
Scapy Ne İşimize Yarar?
Scapy ağ değişimine müdahale edebilmemizi, istekler ve yanıtların yollanabilmesini sağlar. Scapy'i kullanarak ağ saldırıları yapabilirsiniz. (Örn:MITM) Kendiniz ağ bilginizi pekiştirmek veya test etmek için scapy'i kullanabilirsiniz. NMAP mevcut koddaki gibi araçlar yazmak için kullanabilirsiniz. Yani içinde ağ geçen neredeyse her şeyi de kullanabilirsiniz. Gerisi sizin hayal gücünüze ve yeteneğinize bağlıdır.Umarım faydalı olur. Bir yanlışımız varsa belirtiniz biz de feyzlenelim. Sürç-ü lisan ettiysek affola hayırlı geceler.