MYSQL Üzerinde Penetrasyon Testi (Port 3306)
MySQL, açık kaynaklı bir İlişkisel Veritabanı Yönetim Sistemidir (RDBMS). Verileri yapılandırılmış bir biçimde yönetmek ve düzenlemek için yaygın olarak kullanılır ve verileri depolamak için tablolar kullanır. MySQL, istemci-sunucu mimarisini kullanan bir ağ kurulumunda işlev görür. Bu yapılandırmada, MySQL sunucusu veritabanını yönetirken, istemci uygulamaları veri sorgulama ve güncelleme gibi görevleri yürütmek için sunucuya bağlanır. MySQL istemcileri ile sunucu arasındaki etkileşim TCP/IP protokolü üzerinden gerçekleştirilir ve MySQL varsayılan olarak 3306 numaralı bağlantı noktasını dinler.
İçindekiler
- Laboratuvar kurulumu
- Kurulum
- MySQL sunucusuna bağlanılıyor
- MySQL kimlik bilgilerini zorla ele geçirme
- Metasploit kullanarak sömürü
- Özel bir bağlantı noktası yapılandırma
- Çözüm
Laboratuvar kurulumu
Hedef Makine: Ubuntu (192.168.31.205)
Saldırgan Makinesi: Kali Linux (192.168.31.141)
Kurulum
Ubuntu makinesinde MySQL sunucusu kurulumuyla başlayacağız. Sunucuyu kurmak için komut şudur:
Sunucunun çalışır durumda olup olmadığını kontrol etmek için aşağıdaki komutu kullanın:
Yukarıda görüldüğü gibi sunucumuz 3306 numaralı portta çalışmaktadır.
MySQL sunucusuna bağlanılıyor
Kali Linux'ta nmap aracını kullanarak IP'yi tarayıp servisin kapalı mı yoksa açık mı olduğunu kontrol edeceğiz. Bunu yapmak için Kali Linux'ta şu komutu çalıştıracağız:
Yukarıdan görülebileceği gibi mysql servisinin çalıştığı 3306 numaralı port kapalıdır . Bunun sebebi MySQL sunucusunun o makinede dahili olarak çalışıyor olması ve varsayılan ayarlarda 127.0.0.1 olarak ayarlanan bind-address'i kullanıyor olmasıdır.
Servisi açık hale getirmek için yapılandırmayı değiştirmemiz gerekiyor. Bunun için ubuntu makinesinin içindeki mysqld.cnf dosyasını düzenleyin. Bunu yapmak için aşağıdaki komutu kullanın:
Servisi açık hale getirmek için bind-address = 127.0.0.1 satırını yorum satırına (#) dönüştürün.
Şimdi tekrar nmap aracını kullanarak IP'yi tarayın , servisin artık açık olduğunu görebilirsiniz.
Ancak, servis durumunun açık olarak gösterilmesi durumunda bile servise uzaktan bağlanamayacağımızı belirtmekte fayda var . Kök kullanıcının herhangi bir ana bilgisayardan bağlanabilmesini ve herhangi bir veritabanında herhangi bir işlem yapabilmesini sağlamak için, ubuntu makinesinde aşağıdaki SQL komutları kullanılır:
Yukarıdaki komutlar şu şekilde yorumlanabilir:
İlk komut MySQL sunucusuna kök kullanıcı olarak giriş yapmak için kullanılır. İkinci komut herhangi bir ana bilgisayardan (%) bağlanabilen kök adında yeni bir kullanıcı oluşturur ve parolayı 123 olarak ayarlar . Üçüncü komut yeni oluşturulan kök kullanıcıya tüm veritabanları ve tablolar üzerinde tüm ayrıcalıkları verir. Son komut ayrıcalık tablolarını yeniden yükleyerek değişikliklerin hemen etkili olmasını sağlar.
Şimdi Kali Linux'ta aşağıdaki komutu çalıştırarak MySQL sunucusuna uzaktan giriş yapıp yapamadığımızı kontrol edebiliriz:
Servise uzaktan bağlanabildiğimize göre artık pentesting'e başlayabiliriz.
MySQL kimlik bilgilerini zorla ele geçirme
Kali Linux içindeki Hydra aracını kullanarak kullanıcı adı ve parola listesi geçirerek MySQL kimlik bilgilerini zorla ele geçirebiliriz . Burada kullanıcı adı listesini users.txt ve parola listesini pass.txt olarak kullanıyoruz . Zorla ele geçirme saldırısı için komut şu şekilde olacaktır:
Metasploit kullanarak sömürü
MySQL sunucusuyla ilgili birçok exploit ve yardımcı program vardır. MySQL pentesting'ine dair bir fikir vermek için burada bunlardan birkaçını göstereceğiz.
Öncelikle veritabanına bağlandıktan sonra SQL sorgularını doğrudan çalıştırmak için Metasploit içerisinde utility/admin/mysql/mysql_sql komutunu kullanacağız .
Tüm verileri boşaltmaya yardımcı olan başka bir yardımcı program daha var, yani, yardımcı/tarayıcı/mysql/mysql_schemadump. Veritabanına bağlanmak için sadece kullanıcı adı ve parolayı vermemiz gerekiyor ve tüm şemayı boşaltabiliyoruz.
Kullanıcı adı ve şifre karmalarını boşaltmak için /scanner/mysql/mysql_hashdump yardımcı programını kullanabiliriz , bu bize kullanıcı adlarını ve şifre karmalarını çıktı olarak verir.
Sunucu tarafında yazılabilir bir dosya olup olmadığını kontrol etmek için, bunu yardımcı/scanner/mysql/mysql_writable_dirs kullanarak tanımlayabiliriz . Ancak, varsayılan olarak mümkün değildir. Yapılandırma dosyasında değiştirmemiz gereken bir ayar var, ardından yazılabilir dizini numaralandırabiliriz.
Bu yapılandırmayı yapmak için /etc/mysql/mysql.conf.d/mysqld.cnf dosyasını düzenleyin ve sonuna secure_file_priv= ” “ satırını ekleyin .
Şimdi Metasploit'i kullanarak yazılabilir dizinleri kontrol edelim.
Yukarıdan da görüleceği üzere /tmp dizini yazılabilir bir dizindir.
Dosya ve dizinlerin makinede mevcut olup olmadığını numaralandırmak için /scanner/mysql/mysql_file_enum yardımcısını kullanabiliriz . Bu bize dizinin veya dosyanın mevcut olup olmadığının sonuçlarını verecektir.
Son olarak, tüm MySQL sunucusunu numaralandırmak için , geçerli kimlik bilgilerini kullandıktan sonra MySQL sunucusunda numaralandırmayı gerçekleştirecek olan yardımcı/admin/mysql/mysql_enum komutunu kullanabiliriz .
Özel bir bağlantı noktası yapılandırma
MySQL'de port değişikliğini gerçekleştirmek için yapılandırma dosyasını düzenlememiz gerekir. Dosyanın yolu /etc/mysql/mysql.conf.d/mysqld.cnf 'dir .
Gördüğümüz gibi varsayılan port 3306'dır ve bu kullanılıyor ve yorum satırına eklenmiştir (#). Port numarasını 4403 olarak değiştirebilir ve satırdaki yorumu (#) kaldırabiliriz.
Şimdi IP'yi nmap ile tararsak servisin 4403 portunda çalışır durumda olduğunu görebiliriz .
Çözüm
MySQL sunucusu uzun yıllardır çoğu uygulama geliştiricisi için popüler bir tercih olmuştur, ancak yanlış yapılandırılması veri sızıntısına yol açabilir. Uygun yapılandırmayı kullanmanız ve hizmet için güçlü bir parola politikası uygulamanız önerilir.