Sızma Testlerinde Python Kullanımı: BeautifulSoup Kütüphanesi



Web sayfaları sızma testleri sırasında son derece faydalı bilgiler sağlayabilir. Olası parolalar, kullanıcı adları, kurumsal projeler hakkında bilgiler ve kuruluşun sahip olması muhtemel altalanadları ve dizinler bunlardan yalnızca bazıları. 

Bu nedenle, tıpkı bir siber saldırganın yapacağı gibi, kuruluş internet sayfası dikkatlice incelenir. İnternet sayfasından kastettiğim sadece sayfanın görülen kısmı değil, kaynak kodu da dahil her şeyidir. 

Bu aşamada genellikle aradıklarımız şunlar olur; 
  • Kuruluş sayfasından bağlantı verilen adresler: Altalanadı, dizin veya farklı alanadında yürütülen projeler gibi daha kolay hedef olabilecek sayfaların tespit edilmesini sağlayabilir.
  • Sayfada geçen sektörel jargon: Altalanadı tespitinde olduğu kadar kullanıcı adı ve parola denemelerinde kullanılabilecek kelimeleri belirlemeye yardımcı olur. 
  • Sayfanın teknik yapısı: Kullanılan kütüphaneler veya Wordpress benzeri içerik yönetim sistemlerinde yapılan sitelerde yüklü olan eklentileri (plug-in) tespit edip bunlarda bulunabilecek zafiyetlerin de bizim için birer saldırı vektörü olarak değerlendirilmesi. 
  • Diğer: Geliştirme süreci hakkında veya sadece sayfaya tarayıcıda bakarak gözden kaçabilecek şeyleri görmemizi sağlayabilir. 
Kaynak kodu üzerinde durmamın nedeni aslında basit; tarayıcıda gördüğümüz haliyle internet sayfası aslında sayfanın HTML kodunun tarayıcımız tarafından yorumlan halidir. Aynı internet sayfasına farklı tarayıcılardan bağlanıldığında farklı şeyler görülmesinin temel nedeni de bu yorumlardır. 

Aşağıda fotoğraf paylaşım sitesi Flickr’ı görebilirsiniz. Bu sitenin Firefox tarayıcısı ile görüntülenmiş halidir. 

Burada ise kaynak koduna gizlenmiş “burayı okuyorsanız, eleman arıyoruz” yazısını görebilirsiniz. 

Sonuçta burası bir yazılım şirketi ve ihtiyaç duydukları çalışan profilinin bir miktar kaynak kodla ilgilenmesini beklemeleri gayet doğal. 

Sayfayı incelemek için yanınıza bir kağıt kalem alıp gördüklerinizi not etmek bir seçenek olabilir. Ancak bu oldukça yavaş ve verimsiz bir yöntem olacaktır. Onun yerine Python ile bu keşif çalışmalarını otomatize etmek işi hızlandıracaktır. 

Bunun için URLLIB ve BeautifulSoup kütüphanelerini kullanabiliriz. 

Urllib
Python ile HTTP bağlantısı kurup internet sayfasını talep etmemizi sağlayacak, kolay kullanılan bir kütüphanedir. 
Basit bir bağlantı isteği aşağıdaki gibi gönderilebilir;
Burada kullandığımız 3 satır var;
  • import urllib: Urllib kütüphanesini kodumuza dahil ediyoruz. 
  • sayfa =urllib.urlopen("http://www.alperbasaran.com"): sayfa olarak www.alperbasaran.com adresini talep ediyoruz. 
  • print sayfa.code: Talebimize gönderilen yanıtı kontrol ediyoruz (200 OK sayfaya sorunsuz bir şekilde bağlanıldığını gösteriyor)
Bu noktada kodumuzun son satırı print sayfa.read() ile değiştirip alınan cevabın görüntülenmesi sağlanabilir. Görüldüğü gibi sunucudan alınan bilgi aslında sayfanın HTML kodudur. Evet, gördüğünüz bütün o şirintoş animasyonlar aslında çirkin HTML kodlarından ibaret. 


İkinci aşamada BeautifulSoup (güzel çorba) kütüphanesini kullanarak hedef sayfada bulunan bağlantıları alacağız. Lütfen dikkat: Burada verilen kod örnekte ele alınan sayfada işe yarayabilir, farklı bir sayfada çalışmasını sağlamak için bazı ufak tefek değişiklikler yapılması gerekebilir. Ne yapmaya çalıştığımın mantığını anlatabileceğimi umuyorum, böylece özelleştirmeniz gerektiğinde nelerin değiştirilmesi gerektiği konusunda da bir fikriniz olur. 

Son halinde 3 kütüphaneden faydalanmış olacağız; urllib, BeautifulSoup ve re. 
Yukarıda gördüğümüz gibi Urllib internet sayfasına ulaşmamızı, BeautifulSoup sayfanın içeriğini ayıklamamızı ve re regular expression kullanarak ayıklama işlemini daha kolay yapmamızı sağlayacak. 
Güzel çorba (gc) BeautifulSoup işlevlerini kullanmama imkan verecek. Aslında bunun için kullandığım tek satır var “gc = BeautifulSoup(html)”

Sonrası yine oldukça basit, gc içerisinde bulduğumuz ve link olabilecek (href HTML etiketiyle belirlenmiş) kısımları ayıklıyoruz ve ekranda gösteriyoruz. 


Kodun tamamı aşağıdaki gibidir. Kodu karmaşıklaştırmamak için çalışınca verilen hatayı ortadan kaldırmak için gerekli argümanı eklemedim. 

Sonuç; alperbasaran.com sayfasındaki bağlantıları alabiliyoruz.

Herhangi bir uygulamayı test etmeniz gerektiğinde kaynak kodu görüntülemek için biraz zaman ayırmanın zararı olmayacaktır. Bu süreci otomatize edebilirseniz de zaman kazanırsınız. 


Comments