MYSQL Üzerinde Penetrasyon Testi (Port 3306)

 

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:

uygun kurulum mysql-server

Sunucunun çalışır durumda olup olmadığını kontrol etmek için aşağıdaki komutu kullanın:

netstat -tlnp

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:

nmap -p3306 -sV 192.168 .31 .205

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:

nano /etc/mysql/mysql.conf .d /mysqld.cnf

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.

nmap -p3306 -sV 192.168 .31 .205

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:

mysql -uroot
'root' KULLANICISINI OLUŞTUR @ '%' '123' İLE TANIMLANAN ;
*.* ÜZERİNDEKİ TÜM AYRICALIKLARI 'root' @ '%' ' ye VER ;
FLUSH AYRICALIKLARI;

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:

mysql -h 192.168 .31 .205 -uroot -p

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:

hydra -L kullanıcıları.txt -P şifresi.txt 192.168.31.205 mysql

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 .

msfkonsole -q
yardımcı/yönetici/mysql/mysql_sql kullanın
rhosts'u 192.168 olarak ayarla . 31. 205
kullanıcı adı kökünü ayarla
şifreyi ayarla 123
sql set veritabanlarını göster
koşmak

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.

yardımcı/tarayıcı/mysql/mysql_schemadump kullanın
rhosts'u 192.168 olarak ayarla . 31. 205
kullanıcı adı kökünü ayarla
şifreyi ayarla 123
koşmak

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.

yardımcı/tarayıcı/mysql/mysql_hashdump kullanın
rhosts'u 192.168 olarak ayarla . 31. 205
kullanıcı adı kökünü ayarla
şifreyi ayarla 123
koşmak

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.

yardımcı/tarayıcı/mysql/mysql_yazılabilir_dizinleri kullanın
rhosts'u 192.168 olarak ayarla . 31. 205
kullanıcı adı kökünü ayarla
şifreyi ayarla 123
dir_list dir.txt'yi ayarla
koşmak

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 .

yardımcı/yönetici/mysql/mysql_enum kullanın
rhosts'u 192.168 olarak ayarla . 31. 205
kullanıcı adı kökünü ayarla
şifreyi ayarla 123
koşmak

Ö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 .

nano etc/mysql / mysql.conf . d /mysqld.cnf

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.

Yorum Gönder

Daha yeni Daha eski