Bilindiği üzere Python, özellikle güvenlik profesyonelleri için, öğrenilmesi kolay, kısa zamanda ve az miktarda eforla önemli işler yapılabilecek yüksek-seviye bir programlama dilidir. Sadeliği ve güçlü kütüphaneleri ile bilişimin herhangi bir alanında gerçekleştirilecek bir program için hem profesyoneller hem de yeni başlayanlar tarafından tercih edilmektedir. Özellikle betik yazımını desteklemesi ve can sıkıcı görevleri kısa sürede otomatize hale getirebilmesi ile siber güvenlik alanında da oldukça rağbet görmektedir. Python programlama dilinin yüksek okunabilirliği sayesinde herhangi bir programlama diline daha önceden aşinalığı bulunan birinin kodlama ve yazılmış kodları anlama becerisi kısa sürede oluşacaktır.

Bu ve bu yazı serisinin devamında, başlıktan da anlaşılacağı üzere, python dilini açık kaynak istihbarat konusu kapsamında ve yazdığımız kodlar üzerinde satır satır inceleyeceğiz. Açık kaynak istihbarat uygulamaları, genelde birçok araç veya dağıtık uygulamadan sağlanan verilerin bir araya getirilmesi ile gerçekleştirilmeye çalışılıyor. Uygulanan metodolojiler ile birçok veri elde ediliyor. Bu kirliliğin arasından kurtulmak ve rapor aşamasında büyük resme bakmayı kolay hale getirebilmek için, ayrıca son kullanıcıların kendileri için de kullanabileceği basit otomasyonlar üretebilmek için python dili ile örnek oluşturup inceleme yapacağız.

Envanterinizde bulunan veya bulunmayan herhangi bir URL’in en meşhur arama motoru Google tarafından indekslenip indekslenmediğini nasıl anlarsınız? Google ile yapılacak basit bir arama ile bu sayfaya ulaşılıp ulaşılamadığını yani bir nevi “gözden uzak olma” durumunu kontrol etmek istediğimizi varsayalım. Python ile bu durumun kontrolünü rahatlıkla sağlayabiliriz.

Google Index Check Kod ve Analizi

Bilindiği gibi Google, bir arama sonucunun başarılı olma durumunda bulduğu URL’leri kullanıcılara direkt olarak göstermektedir. Bulamadığı sonuçlar için ise herhangi bir adres veremeyeceğinden, aradığınız sorgu ile ilgili hiçbir arama sonucu mevcut değil gibi bir yazı ekrana basmaktadır. Biz de bu mantıkla beraber Google’ın sağladığı arama motoru parametrelerinden “info” parametresini kullanarak amacımıza ulaşmaya çalışacağız. Aşağıda bulunan kodu satır satır analiz edelim.

Python ile OSINT Uygulamaları #1

• 1. satır: Google’a GET isteği gönderebilmek için kullanacağımız “requests” kütüphanesini dahil ettik.
• 2.satır: Gönderdiğimiz isteğe dönen HTML cevap üzerindeki elemetlere rahatça ulaşabilmemizi sağlayan BeatifulSoup kütüphanesini dahil ettik.
• 3.satır: URL Encode özelliğini kullanabilmek için urllib kütüphanesinden ilgili fonksiyonu dahil ettik.
• 5.satır: GET isteği yaparken kullanmak üzere User-Agent başlığı tanımladık.
• 6.satır: Tanımladığımız başlığı get() fonksiyonu ile kullanabilmek için başlıklar isminde sözlüğe attık.
• 7.satır: Kontrol etmek istediğimiz URL’i bir değişkene string değer olarak atadık.
• 8.satır: Google sorgu yapısındaki “q” parametresine, “info” sorgu filtresini ön ek olarak almış sorgu öbeğini key-value yapıda olacak şekilde atadık ve bu değeri barındırdığımız bir sözlük oluşturduk.
• 9.satır: Oluşturduğumuz sorguyu urlencode() fonksiyonu ile encode edip istek göndermeye hazır hale getirdik.
• 10.satır: Google’a, req_url için, oluşturduğumuz başlıkları kullanarak istek yolladık ve dönen cevabı resp objesine atadık.
• 11.satır: Dönen HTML cevap üzerindeki elementlerle işlem yapabilmek için, cevabın içeriğini(resp.content) “html.parser” yardımıyla parse eden bir BeatifulSoup objesi oluşturduk.
• 12.satır: Hata kontrolü amacıyla try-except bloğu açtık.
• 13.satır: Google cevap sayfasında bulunan linkler “rc” adlı bir sınıfın içerisinde tutulmakta. Biz de cevap içerisinde bu sınıfı ve barındırdığı “a” taglerinin varlığı kontrol etmek istediğimizden soup objesinin select() adlı metodunu kullanarak cevap üzerinde arama yaptık. Metoda gönderdiğimiz parametre ile “rc” sınıfında bulunan tüm “a” taglerini döndürmesini istedik.
• 14.satır: Dönen cevap bir liste olacağından, listenin boş olup olmadığını kontrol ediyoruz. Çünkü listenin boş olması, herhangi bir URL bulunamadığı ve sorgu olarak gönderdiğimiz URL’in indekslenmediği anlamına gelmekte.
• 15.satır: Bu bloğa girişin gerçekleşmesi, indekslenmeme anlamına geldiği için bu durumu ifade eden bir print() fonksiyonu çalıştırdık.
• 16.satır: else durumunda, yani href_check listesinin boş olmama durumunda gerçekleştirilecek işlemler için blok açtık.
• 17.satır: Bu bloğa girişin gerçekleşmesi, indekslenme durumu oluştuğunu gösterdiği için bu durumu ifade eden bir print() fonksiyonu çalıştırdık.
• 18.satır: Cevap üzerindeki etiketlerle gerçekleştirdiğimiz işlemlerde herhangi bir hata oluşma durumunu yakaladık ve bu durumda yapılması gerekenler için bir blok oluşturduk.
• 19.satır: Oluşan hatayı ekrana yazdırmak için bir print() fonksiyonu çalıştırdık.

Yukarıda detaylı olarak incelediğimiz kodu gereksinimlere göre kolayca modifiye edebiliriz. Birden fazla URL’in indekslenme durumunu kontrol ettiğimizde basit bir for döngüsü eklemek veya indekslenme durumunu belirli aralıklarla kontrol etmesi için sleep() fonksiyonu yardımıyla bir “daemon” oluşturmak gibi örnekler verilebilir.

Serimizin ilk yazısında python’ın en çok kullanılan kütüphaneleri ile bir web isteği oluşturduk ve Google’ın crawling sınırlarını kendi varlıklarımız için ölçmeye çalıştık. Kendi varlıklarımızın bulunabilirliğini ölçmeye ve sonuçlardan haberdar olmaya çalıştık. Diğer yazılarımızda görüşmek üzere, güvenli günler dileriz.