Merhaba
Arkadaşlar,
Bu yazıda
python script dili ile kendi host ve port tarama scriptimizi nasıl
hazırlayacağımızı anlatacağım. Bir önceki yazımda scapy programı ile tarama
işlemlerinin nasıl gerçekleştirildiğinden bahsetmiştim. Aşağıdaki bağlantıdan
bu yazıma ulaşabilirsiniz.
http://msesli.blogspot.com.tr/2015/06/scapy-ile-host-ve-port-tarama.html
Bu scripti
hazırlarken scapy programının python dili için hazırlanmış kütüphanesinden
faydalandım.
Yukarıdaki scriptimizi satır satır incelemektense gerçekleştirdiğimiz
işlemleri anlatacağım. Genel olarak scriptten bahsedecek olursak, kullanıcıdan
tarama tipini, hedef IP adresini, eğer port tarama yapılacaksa port numarası
ya da port numaraları alıyoruz. Eğer bu parametreler eksik veya fazla girilirse,
konsola örnek kullanımlarla ilgili ipuçlarını yazdırıyoruz.
İlk olarak scriptin Host tarama işlemini ARP protokolünü kullanarak nasıl
gerçekleştirdiğine bakalım. Kullanıcı -a parametresini girdiğinde, script 46.
satırdaki if sorgusuna giriyor. 47. satırda "sr1" isimli methodla bir
ARP istek paketi oluşturuyoruz. "pdst" parametresine
"target" değişkeninde tuttuğumuz hedef IP adresini atıyoruz.
"timeout" parametresine 1 değerini girerek "sr1" methodunun
cevap için ne kadar beklemesi gerektiğini belirliyoruz. "verbose"
parametresini 0 yapıyoruz çünkü scapy'nin çıktılarını değil kendi çıktılarımızı
ekrana yazdıracağız. Bu işlemi, "answer" değişkeninde tuttuğumuz
"sr1" methodunun çıktısını "hostresult" methodumuza
göndererek yapıyoruz. 5. satırda yer alan "hostresult" methodumuzu
incelediğimizde, eğer answer değişkeninde bir cevap paketi yer almıyor ise
taradığımız host'un kapalı olabileceğini ekrana yazdırıyoruz. Net bir ifade
kullanmamın sebebi, paketin gelmemesinin birden fazla sebebinin olabileceğinden
dolayı yani host aktif olabilir ama bize cevap paketinin ulaşmamış olma
olasılığı da var. Eğer "answer" bir cevap paketi içeriyorsa
taradığımız host aktif mesajını ekrana yazdırıyoruz.
ICMP'yi kullanarak host tarama işlemini de benzer şekilde yapıyoruz.
Kullanıcı tarama tipini "-p" olarak girdiyse script 50. satırdaki if
sorgusuna giriyor. Bu sefer "sr1" methodunda bir IP paketini
oluşturuyoruz ve bu paketin içine ICMP paketini ekliyoruz. Hedef IP adresini
"target" değişkeninden alıyoruz. "sr1" methodunun
"timeout" ve "verbose" parametrelerini girdikten sonra
"answer" değişkenini "hostresult" methoduna gönderiyoruz.
Bu methodun cevap paketini nasıl yorumladığını yukarıda bahsetmiştim.
UDP port taraması ise şu şekilde gerçekleşiyor. Kullanıcı tarama tipini
"-u" olarak belirlediyse ve "last port" parametresi de
girildiyse belirli bir aralıktaki UDP portları tarayacağımızdan script, 54.
satırdaki if sorgusuna düşüyor. Bu sorgunun içinde yer alan for döngüsü ile girilen
değerler arasındaki bütün portlar için tarama işlemini gerçekleştirmiş
oluyoruz. Burada "sr1" methoduna bir IP paketi ve bu paketin içine de
bir UDP paketi oluşturuyoruz. "target" değişkenindeki hedef IP
adresini "dst" parametresine atıyoruz. UDP paketinin
"dport" parametresine "port" değişkenini atarak taramak
istediğimiz portu belirlemiş oluyoruz. UDP port taramasının sağlıklı sonuç
vermesi için "timeout" parametresini 5 olarak belirledik ve scripti
sleep mod'a aldık. "answer" değişkenini analiz etmesi için 11.satırda
yer alan "portresult" methoduna yolladık. Bu method cevap almadığında
portu açık olarak belirleyip ekrana ilgili mesajı yazdırıyor. Eğer cevap alıyor
ise bu portun kapalı olduğu anlamına geliyor. Kullanıcı eğer "last port"
parametresini girmediyse script sadece "first port" parametresine
girilen değer için tarama işlemini gerçekleştiriyor.
Scriptimiz TCP port taraması için iki farklı modu destekliyor. Bunlar SYN
tarama ve FIN tarama. SYN taramasını 65. satırdaki if sorgusu, FIN taramasını
ise 74. satırdaki if sorgusu gerçekleştiriyor. Sonuçları yazdırma işlemini
farklı methodlarla(tcpsynresult, portresult) yapıyoruz çünkü SYN tarama açık
port için bir cevap paketi bekler, FIN tarama ise kapalı port için bir cevap
paketi bekler.
Şimdi scripti deneme vakti. Kali'de çalıştıracağım ve Metasploitable
işletim sistemine sahip hostun portlarını tarayacağım. Kali'de konsola
"nano scanner.py" komutunu girerek bir dosya açıyoruz ve yukarıdaki
kodu dosyaya kopyalıyoruz. Daha sonra " chmod +x scanner.py"
komutuyla dosyamıza çalıştırılabilme yetkisini veriyoruz.
Sırasıyla yukarıda bahsettiğim işlemleri gerçekleştirelim.
Ekran Görüntüsü 1: ARP Tarama
Yukarıdaki ekran görüntüsünde aktif bir host ile pasif durumdaki bir hostun
tarama işleminin, scriptimizi kullanarak nasıl yapıldığını görebiliriz.
Benzer şekilde, aşağıdaki komut ile ICMP ile host taramasını
gerçekleştirebiliriz.
#./scanner.py -p 192.168.200.130
Ekran Görüntüsü 2: ICMP Tarama
UDP port taraması için belli bir portu veya belirli bir port aralığını
tarayabiliriz. Bunun için aşağıdaki komutları kullanıyoruz.
#./scanner.py -u 192.168.200.130 53
#./scanner.py -u 192.168.200.130 1 10
Ekran Görüntüsü 3: UDP Port Tarama
Yukarıdaki görüntüden scriptin UDP tarama sonuçlarını görebiliriz.
TCP port taramasını ise tarama tipini SYN tarama için "-s", FIN
tarama için "-f" olarak belirleyerek kullanabiliriz.
#./scanner.py -s 192.168.200.130 80
#./scanner.py -s 192.168.200.130 1 10
Ekran Görüntüsü 4:TCP SYN Tarama
#./scanner.py -f 192.168.200.130 80
#./scanner.py -f 192.168.200.130 1 10
Ekran Görüntüsü 5:TCP FIN Tarama
Yukarıdaki ekran görüntülerinden SYN ve FIN tarama sonuçlarını görebiliriz.
Bugün kendi host ve port tarama aracımızı python script dili ile nasıl
hazırlayabileceğimizi gördük. NMAP kadar profesyonel bir araç olmasa da en
azından bir başlangıç yapmış olduk. Bir sonraki yazıda görüşmek üzere.
Yararlandığım Kaynak:
Justin Hutchens, "Kali Linux Network Scanning Cookbook"
Hiç yorum yok:
Yorum Gönder