Googlebot’u kullanarak kimlik doğrulamasını aşmak

SEO(Search Engine Optimization), yani Arama Motoru Optimizasyonu, web sitelerinde bulunan içeriklerin arama motorları tarafından daha iyi indekslenebilmesi için site ve sayfa yapısında yapılan optimizasyonlar bütünüdür. Yapılan bu düzenlemelerle sitenin arama sonuçlarında çıkması ve sonuçlarda daha üst sıralarda yeralması amaçlanır.
En sık kullanılan arama motorunun Google olması ve site sahiplerinin Google Adsense üzerinden daha fazla para kazanmak istemeleri, insanların sitelerini Google için optimize etmesini de beraberinde getirmektedir.

Bütün bu ıvır zıvırdan neden bahsediyorum, Google’ın veya farklı bir arama motorunun sitesini daha iyi indekslemesini isteyen bazı yerler farkında olmadan sitelerinde bazı güvenlik problemleri oluşturmuş olabiliyor.
Hiç arama motorunda aradığınız bir içeriğin, sayfayı ziyaret ettiğinizde farklı göründüğünü tespit ettiniz mi? Ne olmuş olabilir?

  • Site içeriği değişmiştir/kaldırılmıştır (Ulaşmak istediklerinize arama motorunun cache’ini kullanarak ulaşmayı deneyin)
  • Web sitesi, bu bölüme erişebilmeniz için sizden geçerli bir kullanıcı adı ve şifre istemektedir!

Bu durumda:

  1. Varsa arama motorunun önbellek(cache) bölümünü kullanıp sayfaya erişebilirsiniz,
  2. Kayıt işlemleri ile uğraşmamak için BugMeNot‘ı kontrol edersiniz,
  3. Veya, Googlebot olmayı denersiniz!

Karşılaştığım sitelerden iki tanesini inceleyelim.
Normal bir istek yapıdığında WindowsITPro, sitede yeralan makaleleri okuyabilmek için kayıtlı kullanıcı olmamızı istemekte.

Yapılan bu isteği HTTP header bilgilerinde oynama yapıp, kendimizi Googlebot olarak tanıttığımızda ise bize tüm makaleyi gösteriyor.


Aynı şekilde bir forum sitesi olan GovernmentSecurity, sitenin bazı yerlerine girmek için kayıtlı kullanıcı olmayı şart koşuyor.

Yukarıda görülen isteği HTTP header bilgilerinde oynama yapıp, kendimizi Googlebot olarak tanıttığımızda ise bize forum içeriğini gösteriyor.

Ziyaret ettiğimiz sitede, bu veya benzeri bir güvenlik problemini, “User-agent” HTTP başlık bilgisini kolayca değiştirerek kontrol edebiliriz.
Ben yukarıdaki örneklerde, detaylı görünmesi açısından LiveHTTPHeaders firefox eklentisini kullandım. Tabi ki HTTP header bilgilerini değiştirmeyi daha kolay hale getiren eklentiler var. Ben bunun için modifyheaders‘ı öneririm.

Bu örneklerde gözükenler o kadar da önemsenecek derecede veriler değil. Belki ücretli üyelik sistemi olan bir site için risk seviyesi daha yüksek olabilirdi. Ama özetlemek istediğim, web güvenliğinde kullanıcı tarafından gönderilen verilere hiç bir zaman güvenmemek. Web uygulamalarımızı tasarlarken buna göre önlemler almalıyız.

Sizin yapamadığınız bir şey, yapılamıyor anlamına gelmez! Özellikle web üzerinden yapılan saldırıların artması ve diğer saldırılara göre kolaylığı, verilerinizin güvenliğini riske sokabilir.

mssqlcmd – Yeni sürüm duyurusu ve xp_cmdshell’i aktif hale getirme

Daha önceden yayınladığım Microsoft SQL kullanarak komut çalıştırma script’inde bazı ufak düzenlemeler yaptım.
İşlevini yerine getirmek için xp_cmdshell stored procedure’ını kullandığını iletmiştim. Peki ya xp_cmdshell devre dışı bırakıldıysa veya hedef sunucu Microsoft SQL Server 2005 sürümüyse?

Bu durumda xp_cmdshell’i yeniden devreye alabilmek için aşağıdaki yöntemleri izleyebiliriz:

  1. Microsoft SQL Server 2005 sürümünde, güvenlik nedeniyle xp_cmdshell devre dışı olarak gelmektedir. Aktif hale getirebilmek için aşağıdaki sorgunun çalıştırılması yeterlidir:

    USE master
    GO
    EXEC sp_configure ‘show advanced options’, 1
    GO
    RECONFIGURE WITH OVERRIDE
    GO
    EXEC sp_configure ‘xp_cmdshell’, 1
    GO
    RECONFIGURE WITH OVERRIDE
    GO
    EXEC sp_configure ‘show advanced options’, 0
    GO

  2. Bir güvenlik önlemi olarak, xp_cmdshell stored procedure’ı veritabanı yöneticisi tarafından kaldırıldıysa (ki Microsoft’un bunu pek de önerdiği söylenemez), tanımlamak için xpsql70.dll dosyasının sistemde bulunması yeterli. Bunun için aşağıdaki SQL sorgusunun çalıştırılması gerekir:

    EXEC sp_addextendedproc ‘xp_cmdshell’, ‘xpsql70.dll’

mssqlcmd‘nin yeni sürümünü yine aynı yerden indirebilirsiniz.

Not: mssqlcmd.py dosyasında bu komutlar comment olarak gerekli yerlere eklenmiştir. Gerektiğinde satır başlarındaki # karakteri silinerek çalışmaları sağlanabilir.
Uyarı: Yukarıda yazan SQL sorgularının çalıştırılması ile ilgili sorumluluk kabul edilmemektedir. Gerçek sistemler üzerinde çalışmadan önce, test sistemlerinde denemeler yapın.

mssqlbf – Microsoft SQL brute force yazılımı

Hazır konu Microsoft SQL’den açılmışken, yine güvenlik denetimlerinde zayıf veritabanı şifrelerini tespit etmede kullanılabilecek bir script hazırladım.

Basit bir şekilde, username ve password wordlist kullanarak, şifre deneme-yanılma (brute force) saldırısı yapabiliyor.
Daha sonradan kullanabilmek için, bulduğu kullanıcı adı ve şifreleri bir metin dosyasında arşivliyor.
Threading desteği sayesinde aynı anda birden fazla kullanıcı adı/şifre kombinasyonu deneyerek işlemi büyük oranda hızlandırabilir. Varsayılan maksimum thread sayısını 5 olarak ayarladım. Script içerisinden kolayca değiştirilebilir.

Microsoft SQL Brute Force yazılımına buradan ulaşabilirsiniz.
Python ile yazılmıştır. pymssql kütüphanesine ihtiyaç duymaktadır.

mssqlcmd – Microsoft SQL kullanarak karşı sunucuda komut çalıştırın

Güvenlik denetimlerinde kullanmak üzere hazırladığım bu basit script, Microsoft SQL sunucusu çalışan bir sunucu üzerinde komut çalıştırmaya yarıyor.
Bu işlevi yerine getirmek için xp_cmdshell stored procedure’ını kullanıyor. Zayıf veritabanı yöneticisi şifresi tespit edildiğinde kullanılabilir. (Örneğin ‘sa’ hesabı ve boş şifre)

mssqlcmd.py dosyasına buradan ulaşabilirsiniz.
Python ile yazılmıştır. pymssql kütüphanesine ihtiyaç duymaktadır.