Bu yazıda ele geçirdiğimiz windows makinede düşük yetkilere sahip bir kullanıcı hesabından yüksek yetkili kullanıcı hesaplara nasıl sıçrayabileceğimizden bahsedeceğim.
Registry Escalation – Autorun
Kayıt defeterinde başlangıçta çalışan programlara bakıyoruz. Bunun için sysinternals‘dan Autoruns64’ü kullanabilirsiniz. Ben bu örnekte reg query ile başlangıçta çalışan uygulamaları sorgulayacağım.
C:\program files\autorun program\ dizini altında progam.exe olduğunu görüyoruz. program.exe isimli yazılım başlangıçta çalışmaya ayarlanmış. şimdi de yazma iznimiz olup olmadığına bakalım. Bunun için Accesschk64’ü kullanacağım.
-w yazma izni olup olmadığını
-v verbose ouput
-u ise hataları bastırmak için kullanılan parametredir.
Yazma iznimiz var (everyone) bu şu demek ben aynı isimdeki backdoorumu bu alana yazarsam administrator yetkilerine sahip bir kullanıcı makineye giriş yaptığında bu program.exe de başlangıçta çalıştığı için administrator yetkilerine sahip shell alabilirim.
msfvenom ile aynı isimde oluşturduğum dosyayı ilgili dizine attıktan sonra netcat ile bağlantı noktamı oluşturuyorum. Sonrasında Administrator yetkisine sahip kullanıcının giriş yapmasını bekliyorum. Bu sayede yetki yükseltmiş oluyorum.
Registry Escalation – AlwaysInstallElevated
AlwaysInstallElevated registry değeri 1 olarak bırakılan sistemde .msi uzantılı dosyalar sistem yetkileriyle çalıştırılabilmektedir. Bunun kontrolü için şu iki registry kaydını kontrol edelim.
Şimdi de msfvenom ile .msi uzantılı zararlımızı oluşturup yazma iznimizin olduğu Temp dizinine atalım.
Bağlantı noktamı açtıktan sonra zararlımı çalıştırıyorum ve “nt authority\system” yetkilerine sahip oluyorum.
Service Escalation – Registry ( Weak Registry Permissions )
Windowsda bütün servisler için “HKLM\SYSTEM\CurrentControlSet\Services” altında aynı isimde anahtar oluşturulur. Şayet servislere ait registry değerlerinde değişiklik yapma yetkimiz var ise bu servislerin konfigürasyonlarında değişiklik yaparak yetki yükseltebiliriz. Servisler üzerindeki haklarımızı kontrol etmek için accesschk kullanabiliriz.
Burada regsvc isimli servis üzerindeki yetkilerimize bakıyoruz. Access kısmında “NT AUTHORITY\INTERACTIVE” eğer “FullControl” ise bu servisin “ImagePath” değerini oluşturduğumuz zararlının adresiyle değiştirip servisi tekrar başlatarak administrator yetkileriyle shell alabiliriz.
Şimdi daha önce oluşturduğum program.exe’yi kullanarak yetki yükselteceğim. Bunun için ilgili servisin ImagePath değerini program.exe olarak değiştirip servisi tekrar başlatacağım.
Service Escalation – Executable Files (Weak Folder Permissions)
Düşük yetkilere sahip bir kullanıcı olsak bile ilgili servisin bulunduğu dizinde yazma iznimiz varsa servis dosyasıyla aynı isimde oluşturacağımız zararlı ile değiştirip servisi tekrar başlatarak hak yükseltebiliriz. Öncelikle accesschk64 ile ilgili dizindeki izinleri kontrol ediyorum.
Everyone grubu filepermservice.exe üzerinde bütün yetkilere sahip. Sonuç olarak oluşturduğumuz zararlıyı bu dizin altına aynı isimle atarsak servisi tekrar çalıştırdığımızda admin yetkilerine sahip shell alırız.
Service Escalation – DLL Hijacking
Örneğin hedef sistemde halo_dayi isimli bir servis olsun. Biz bu servisi kendi makinemizde incelediğimizde ilgili servisin helikopter.dll dosyasını çaığırdığını fakat bulamadığını görelim. Bu dosyayı C:\Temp dizininde arıyor olsun ki bu bizim yazma iznimizin olduğu dizin. Temp dizininde bulamayacağı için kendi oluşturduğum zararlı dll’i aynı isimde buraya atarsam halo_dayi servisini tekrar çalıştırdığımda benim zararlım çalışacağı için yetki yükseltebileceğim. Bu arada helikopter.dll dosyası olsa bile eğer bulunduğu dizinde yazma iznim varsa yine aynı işlemleri yapabilirim. Şimdi basit bir örnek yapalım. Hedef sistemde bulunan dllhijackservice isimli bir servisi inceleyelim
Process monitor’ü (procmon) açıp Filter sekmesinden Process NAME ‘İ dllhijackservice.exe yapıp ekliyorum. Process Name is dllhijackservice.exe olacak.
Sonrasında Result is NAME NOT FOUND olacak şekilde ekliyorum.
apply -> ok dedikten sonra komut isteminden dllsvc’yi başlatıyorum.
Servisi başlattıktan sonra C:\Windows dizini altında hijackme.dll arandığını ve bulunmadığını görüyoruz. Tabii bu dizinlerde yazma iznimiz yok ama en altta C:\Temp dizininde de hijackme.dll arandığını görebilirsiniz. Eğer C:\Temp dizini altına kendi hijackme.dll dosyamı atarsam servisi tekrar başlattığımda amacıma ulaşırım.
Öncelikle şu kodu güzelce derleyelim. Kodun yaptığı şey “user” kullanıcısını administrator grubuna eklemek. Derleyip C:\Temp dizinine atalım.
// For x64 compile with: x86_64-w64-mingw32-gcc windows_dll.c -shared -o output.dll
// For x86 compile with: i686-w64-mingw32-gcc windows_dll.c -shared -o output.dll
#include <windows.h>
BOOL WINAPI DllMain (HANDLE hDll, DWORD dwReason, LPVOID lpReserved) {
if (dwReason == DLL_PROCESS_ATTACH) {
system("cmd.exe /k net localgroup administrators user /add");
ExitProcess(0);
}
return TRUE;
}
Servisi tekrar çalıştırdığımda “user” kullanıcısının administrator grubuna alındığını görüyoruz ve böylelikle yetki yükselmiş oluyoruz.
Weak Service Permissions
Düşük yetkili kullanıcıların yüksek yetkilerle çalışan servisler üzerinde yetkileri olursa basit bir konfigürasyon değişikliği ile yetki yükseltebilirler.
örneğin accesschk64 ile daclsvc servisini kontrol edelim.
Everyone grubunun “SERVICE_CHANGE_CONFIG” iznine sahip olduğunu görüyorum. Bu şu demek eğer ben bu servisin “binpath” değerine zararlımın bulunduğu dizini verip servisi tekrar başlatırsam yetki yükseltebilirim. Bunun yerine komut da yazabilirdim.
Service Escalation — Unquoted Service Paths
Windows da bir servis başlatıldığı zaman BINARY_PATH_NAME de yazan dosya yolundaki servis başlatılır. Eğer bu dosya yolu tırnaklar arasında değilse windows bunu şu şekilde yorumlar ;
Örneğin dosya yolu şu şekilde olsun C:\Program Files\Unquoted Path Service\Common Files\unquotedpathservice.exe
Windows boşluklardan ötürü öncelikle C:\Program.exe yi çalıştırmaya çalışacaktır. Windows Files kısmını parametre gibi görecektir. Program.exe yok ise Program Files.exe yi arayacaktır. Sonrasında Unquoted.exe vb. şeklinde denemeler yapıp en sonunda unquotedpathservice.exe’yi bulup çalıştıracaktır. Adım adım şu şekilde ilerleyecektir.
C:\Program.exe
C:\Program Files.exe
C:\Program Files\Unquoted.exe
C:\Program Files\Unquoted Path.exe
C:\Program Files\Unquoted Path Service.exe
C:\Program Files\Unquoted Path Service\Common.exe
C:\Program Files\Unquoted Path Service\Common Files.exe
C:\Program Files\Unquoted Path Service\Common Files\unquotedpathservice.exe
Tahmin ettiğiniz üzere C:\Program Files\Unquoted Path Service\ dizini altına msfvenom ile oluşturacağım zararlımı Common.exe adıyla atarsam yetki yükseltebilirim.
Kernel Exploits
Son olarak ele geçirdiğimiz makinede kernel exploitlerini deneyebiliriz. Metasploitte kernel exploitlerini otomatik denemek için exploit suggester kullanabiliriz.
Ben bu explotlerden cve_2019 olanı kullanıyorum ve bu sayede yetki yükseltiyorum.