MSF mssql_enum_domain_accounts Auxiliary Modülü ile MS SQL Veritabanının Dahil Olduğu Etki Alanındaki Nesnelerin Elde Edilmesi

Sızma testleri sırasında, erişim bilgileri elde edilen MSSQL veritabanı uygulamasında etki alanına ait kullanıcı hesaplarının elde edilmesi gerekmektedir. Bu yazıda, MSF mssql_enum_domain_accounts auxiliary modülü kullanılarak, MS SQL sunucusunun dahil olduğu etki alanına ait nesnelerin (kullanıcı hesaplarının, grupların, bilgisayarların,…) listesi elde edilecektir.

Kurum ağında 100.100.200.60 IP adresindeki MS SQL veritabanındaki standart bir veritabanı kullanıcısına ait erişim bilgileri, “test/test” olarak elde edilmiş olsun. Bu veritabanı sunucusunun dahil olduğu etki alanına ait kullanıcı hesaplarının adlarını elde etmek için MSF mssql_enum_domain_accounts modülü kullanılabilir. Bu amaçla, modül seçilir ve seçenekleri incelenir.

search mssql_enum_domain_accounts
use auxiliary/admin/mssql/mssql_enum_domain_accounts
show options

enumarating-application-users-of-ms-sql-database-by-using-msf-mssql-enum-domain-accounts-auxiliary-module-01

 

Modüle IP adresi, erişim için gerekli kimlik bilgisi verilerek modül seçenekleri ayarlanabilir.

set RHOST 100.100.200.60
set USERNAME test
set PASSWORD test
set FuzzNum 20000
show options

enumarating-application-users-of-ms-sql-database-by-using-msf-mssql-enum-domain-accounts-auxiliary-module-02

 

Seçenekler ayarlandırıldıktan sonra modül çalıştırılabilir. Modül çalıştırıldığında standart veritabanı kullanıcısının hakları ile etki alanındaki tüm kullanıcılar listelenmiş olur.

run

enumarating-application-users-of-ms-sql-database-by-using-msf-mssql-enum-domain-accounts-auxiliary-module-03

 

Not: Kullanılan bu hesap (test); etki alanı hesabı veya sysadmin gibi yetkili bir hesap kullanıcısı olmak zorunda değildir. Böylece etki alanı kullanıcısı olmadan standart bir veritabanı hesabı ile veritabanı sunucusunun dahil olduğu etki alanında sorgulama yapılabilmiştir.

MSF modülü yerine aşağıdaki Powershell modülü kullanılarak da aynı sonuç elde edilebilir.

https://raw.githubusercontent.com/nullbind/Powershellery/master/Stable-ish/MSSQL/Get-SqlServer-Enum-WinAccounts.psm1

 

Powershell modülünün çalıştırılması için aşağıdaki adımlar izlenebilir:

Set-ExecutionPolicy Unrestricted
Import-Module .\Get-SqlServer-Enum-WinAccounts.psm1
Get-SqlServer-Enum-WinAccounts -SQLServerInstance “100.100.200.60” -SqlUser test -SqlPass test –FuzzNum 20000

enumarating-application-users-of-ms-sql-database-by-using-msf-mssql-enum-domain-accounts-auxiliary-module-04

 

 

Detaylı İnceleme

Kullanılan Metaspoloit modülü veya Powershell betiği ile etki alanı ve SID tespit edilerek tüm kullanıcıların RID bilgilerinden adları sorgulanır.

Etki alanında sorgulama işlemleri için xp_enumgroups ve xp_logininfo gibi fonksiyonlar kullanılabilir. “sa” kullanıcısı ile aşağıdaki komutlar çalıştırıldığında etki alanı hakkında bir takım bilgiler (Domain Admins grubu üyeleri gibi) elde edilebilir.

SELECT SYSTEM_USER
EXEC xp_enumgroups ‘EGITIMORTAMI’;
EXEC xp_logininfo ‘EGITIMORTAMI\Domain Admins’, ‘members’;

enumarating-application-users-of-ms-sql-database-by-using-msf-mssql-enum-domain-accounts-auxiliary-module-05

 

Ancak bu komutları çalıştırabilmek için “sysadmin” rolünde olmak gerekir. Aksi halde, “test” gibi sıradan bir veritabanı kullanıcısı hakları ile çalıştırıldığında yetkinin olmadığına dair hata mesajı alınacaktır:

SELECT SYSTEM_USER
EXEC xp_enumgroups ‘EGITIMORTAMI’;
EXEC xp_logininfo ‘EGITIMORTAMI\Domain Admins’, ‘members’;

enumarating-application-users-of-ms-sql-database-by-using-msf-mssql-enum-domain-accounts-auxiliary-module-06

 

Sınırlı yetkide bir kullanıcı ile etki alanında sorgulama için SUSER_SNAME() fonksiyonu kullanılabilir. Bu fonksiyonun kullanımından önce mevcut etki alanı, kullanıcı ID’leri,… elde edilmesi gerekir.

Etki alanının tespiti için DEFAULT_DOMAIN() fonksiyonu kullanılabilir.

SELECT DEFAULT_DOMAIN() as EtkiAlani;

enumarating-application-users-of-ms-sql-database-by-using-msf-mssql-enum-domain-accounts-auxiliary-module-07

 

Etki alanının EgitimOrtami olduğu durumda Domain Admins gibi bir grubun SID değeri SUSER_SID() fonksiyonu ile öğrenilebilir.

SELECT SUSER_SID(‘EgitimOrtami\Domain Admins’)

enumarating-application-users-of-ms-sql-database-by-using-msf-mssql-enum-domain-accounts-auxiliary-module-08

 

Çıkan sonuçlara göre Domain Admins grubunun belirteci (SID), etki alanına ait belirteç (kısmi SID), nesneye ait belirteç (RID) aşağıdaki gibidir:

  • Domain Admins grubu nesnesine ait tam SID: 0x010500000000000515000000766CD47D2205C1F3E6DED7C300020000
  • Mevcut etki alanına ait SID: 0x010500000000000515000000766CD47D2205C1F3E6DED7C3
  • Domain Admins grubu nesnesine ait RID: 00020000

 

Etki alanındaki Administrators hesabına ait kullanıcının varsayılan hesabın RID değeri (“Principal ID” olarak da geçiyor olabilir) onluk düzende 500, Guest için 501,… şeklinde ilerlemektedir. Bu RID değerleri, 500’den başlayarak FuzzNum ile belirtilen ID’ye dek 1 arttırılır ve MSSQL sunucusunun dahil olduğu etki alanındaki kullanıcılar tespit edilir. Örneğin; RID değeri 500 olan Administrator kullanıcısının adının tespit edilmesi aşağıdaki adımlar ile gerçekleştirilir.

  • Principal ID değerinin (500) onaltılık (hex) karşılığı bulunur: 1F4
  • (Gerekiyorsa) Sonuç 4 haneye tamamlanacak şekilde on altılık formattaki haline göre düzenlenir: 01F4
  • Onaltılık değerin ilk ve ikinci yarısının sırası değiştirilir: F401
  • “0” karakterleri eklenerek sağ tarafa eklenerek 8 haneye tamamlanarak RID elde edilir: F4010000
  • RID değerinin başına, etki alanınma ait SID eklenerek; nesneye ait tam SID değeri elde edilir: 0x010500000000000515000000766CD47D2205C1F3E6DED7C3F4010000
  • Elde edilen SID için SUSER_SNAME fonksiyonu ile nesnenin mevcudiyeti sorgulanır:
    • Select SUSER_SNAME($Rid) as KullaniciAdi

 

Örnek bazı ID’ler (500, 501, 1105, 1113, 1124, 1220,..) ve bu ID’lerin çıktıları aşağıdaki gibidir.

enumarating-application-users-of-ms-sql-database-by-using-msf-mssql-enum-domain-accounts-auxiliary-module-09

 

Daha açıklayıcı olması açısından Powershell betiğinde aşağıdaki gibi bir değişiklik ile kullanıcıların RID değerleri ile beraber kullanıcı adları listelenebilir.

Write-Output “[*] – RID (Onluk): $PrincipalID; RID (Onaltılık): $PrincipalIDPad; Kullanıcı Adı: $EnumUser”
Get-SqlServer-Enum-WinAccounts -SQLServerInstance “100.100.200.60” -SqlUser test -SqlPass test –FuzzNum 1123

enumarating-application-users-of-ms-sql-database-by-using-msf-mssql-enum-domain-accounts-auxiliary-module-10

 

 

Kaynak:

https://blog.netspi.com/hacking-sql-server-procedures-part-4-enumerating-domain-accounts/

 

 

Yazarın Bilgileri

Ertuğrul BAŞARANOĞLU
Ertuğrul BAŞARANOĞLU

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Kullanabileceğiniz HTLM etiketleri ve özellikleri: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

Bu sayfada incelenen konulardan doğacak sorunlar kişinin kendi sorumluluğundadır.