Windows Privilege Escalation
Last updated
Last updated
Səlahiyyətlərin yüksəldilməsi, A istifadəçisinin hədəf sistemdəki zəifliklərdən sui-istifadə edərək B istifadəçisi kimi sistemə giriş əldə etməsindən ibarətdir. Burada B kimi qeyd etdiyim istifadəçi adətən inzibati hüquqlara malik olandır, lakin bəzi hallarda inzibati imtiyazlar əldə etmək üçün digər imtiyazsız hesablara keçməli olduğumuz vəziyyətlər olur.
İstifadəçilər | Səlahiyyətləri |
---|---|
Administrator | Bu istifadəçilər ən yüksək səlahiyyətlərə malikdirlər. Administratorlar istənilən konfiqurasiya parametrini dəyişə, sistemdəki istənilən fayla daxil ola bilərlər. |
Standard İstifadəçi | Standart istifadəçilər sistemdə yalnız bəzi tapşırıqları yerinə yetirirlər. Bu istifadəçilər sistemdə daimi və ya mühüm dəyişikliklər edə bilməzlər və yalnız öz fayllarına giriş imkanları var. |
İnzibati səlahiyyətlərə malik olan istənilən istifadəçi Administrators qrupunun, standart istifadəçilər isə Users qrupunun bir hissəsidir.
Əməliyyat sistemi tərəfindən yaradılan və istifadə edilən digər istifadəçilər:
SYSTEM / LocalSystem | Daxili tapşırıqları yerinə yetirmək üçün əməliyyat sistemi tərəfindən istifadə edilən hesabdır. Sistemdə olan bütün fayl və resurslara tam giriş imkanına malikdir, Administratordan daha yüksək səlahiyyətlərə malik olduğunu deyə bilərik. |
Local Service | Windows xidmətlərini "minimum" imtiyazlarla idarə etmək üçün istifadə olunan hesabdır. Şəbəkə üzərindən əlaqə üçün anonim bağlantılardan istifadə edir. |
Network Service | Windows xidmətlərini "minimum" imtiyazlarla idarə etmək üçün istifadə olunan hesabdır. Şəbəkə üzərindən qurulan əlaqələr üçün komputer etimadnamələrindən (credentials) istifadə edir. |
PowerShell'də PSReadline modulu əmrlərin redaktəsi və tarixçə funksionallığına cavabdehdir. Hər hansı bir əmr yerinə yetirildikdə, bu modul onları tarix (history) faylında saxlayır. İstifadəçi əvvəllər istifadəçi adı, parol kimi həssas məlumatlardan ibarət bir əmr icra edibsə, bu fayla baxmaq səlahiyyətlərin yüksəldilməs üçün yaxşı bir yoldur. Bu fayla baxmaq üçün aşağıdakı cmd əmrini icra edə bilərsiniz:
%userprofile%
parametri istifadəçinin profil qovluğunu göstərmək üçün istifadə olunur.
Bu əmri Powershell'də icra etmək üçün:
Praktiki nümayiş üçün istifadə edəcəyim TryHackMe labına buradan keçid edə bilərsiniz.
Bu nümunədə gördüyünüz kimi julia.jones istifadəçisinin parolu tarixçəyə baxaraq əldə edilə bilər.
Aşağıdakı əmrdən istifadə edərək, kompüterdə saxlanmış etimadnamələrin(credentials) siyahısını görə bilərik.
Bu əmr əsasən, hədəf,etimadnamənin növü və etimadnamənin davamlılığı kimi məlumatlar verir. Məsələn:
Bu nəticə, 'server1' adlı server üçün istifadəçi adı və şifrənin saxlanıldığını göstərir.
İndi isə aşağıdakı əmrdən istifadə edərək mike.katz üçün shell əldə edə bilərik:
runas: Proqramı müxtəlif etimadnamələr ilə işə salmaq üçün istifadə olunan əmrdir.
/savecred: Bu parametr runas'a təqdim edilmiş etimadnamələri (istifadəçi adı və parol) saxlamağı əmr edir, bununl da istifadəçi hər dəfə əmri icra etdikdə onları yenidən daxil etmir.
İnternet Məlumat Xidmətləri (IIS) Windows serverlərində vebsaytları, veb proqramları və xidmətləri yerləşdirmək üçün Microsoft tərəfindən hazırlanmış veb server proqramıdır.IIS'də veb-saytların konfiqurasiyası web.config adlı faylda saxlanılır və burada databaza üçün parollar da saxlanıla bilər.Bu fayl 'C:\inetpub\wwwroot\web.config' və ya başqa qovluqda yerləşir.
Bu fayldan parol kimi həssas məlumatları əldə etmmək üçün onun databaza ilə əlaqəli hissələrinə baxmalıyıq. Bunun üçün aşağıdakı əmrdən istifadə edərək, nəticəni məqsədimizə uyğun olraq filterləyə bilərik.
Bu əmr, C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config qovluğunda yerləşən faylın 'connectionString' olan hissələrini ekrana yazdırır.
Nümunədə gördüyünüz kimi, db_admin adlı istifadəçinin parolunu görmək mümkündür.
PuTTY açıq mənbəli terminal emulyatoru, serial konsolu və fayl transferi proqramıdır. O, SSH (Secure Shell), Telnet, rlogin və raw soket bağlantıları daxil olmaqla bir neçə şəbəkə protokolunu dəstəkləyir. PuTTY uzaq serverlər və şəbəkə cihazları ilə təhlükəsiz əlaqə yaratmaq üçün Windows əməliyyat sistemlərində geniş istifadə olunur.
PuTTY istifadəçilərə SSH parollarını saxlamağa icazə verməsə də, plaintext parollarının da olduğu proxy konfiqurasiyalarını saxlayır. Bu saxlanılmış proxy konfiqurasiyalarını əldə etmək üçün aşağıdakı əmrdən istifadə edə bilərsiniz.
reg query: Windows Registry'i sorğulamaq üçün istifadə edilən əmrdir.
HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions: PuTTY'nin sessiya konfiqurasiyalarını saxlandığı yoldur(path).
/f "Proksi": Axtarışın "Proksi" termini olan reyestr qeydləri üçün aparılmalı olduğunu göstərir.
/s : Bu seçim, axtarışın yalnız PuTTY Sessions reyestr açarını deyil, həm də onun altındakı bütün alt açarları (alt qovluqları) ehtiva etməsini təmin edir.
Nümunədə gördüyünüz kimi, yuxarıdakı əmrdən istifadə edərək thom.smith istifadəçisinin parolunu əldə etdim.
Planlaşdırılmış Tapşırıqlar, Windows əməliyyat sistemlərində istifadəçilərə hər hansı bir tapşırığın müəyyən fasilələrlə və ya xüsusi hadisələrə cavab olaraq icrasını avtomatlaşdırmağa imkan verən daxili funksiyadır. Bu tapşırıqları listələmək üçün aşağıdakı əmrdən istifadə edilə bilər:
Daha məqsədə uyğun nəticə almaq üçün aşağıdakı əmrdən istifadə edə bilərsiniz:
Bu əmr qeyd edilən taska aid məlumatları list formatında çıxaracaq.
Planlaşdırılan tapşırıqlar düzgün qurulmadıqda səlahiyyətlərin yüksəldilməsi üçün sui-istifadə edilə bilər.Əgər tapşırıq yüksək imtiyazlarla binary və ya skript idarə edirsə and həmin fayla gedən yol düzgün qorunmursa, hücumçu tərəf həmin faylın kontentini zərərli bir skriptlə dəyişə bilər(məsələn, reverse shell).
Tapşırıqda icra ediləcək faylın icazələrini görmək üçün 'icacls' alətindən istifadə edə bilərik:
Praktiki nümunə:
/v parametrindən istifadə edərək tapşırıq haqqında daha geniş məlumat alıram və bu tapşırıq zamanı icra ediləcək faylı əldə edirəm.(C:\tasks\schtask.bat)
icacls vasitəsi ilə bu faylın icazələrinə baxıram, şəkildə də gördüyünüz kimi Users'in bu fayl üçün icazələri F (Full) kimi qeyd edilib.
Fayla yazmaq icazəmiz olduğu üçün onun kontentini reverse shell faylı ilə dəyişirəm.(Bu fayl labda bizə C:\tools\nc64.exe kimi verilir)
Real nümunələrdə adətən faylı icra etmək icazəmiz olmur, amma bu nümunədə aşağıdakı əmrdən istifadə edərək icra etmək mümkündür:
Və əlaqə qurulur!
Windows installer faylları (.msi faylları ) sistemdə proqramları quraşdırmaq üçün istifadə olunur. Bufayllar, onu başladan istifadəçinin imtiyaz səviyyəsi ilə işləsə də daha yüksək səlahiyyətlərlə işləmək üçün konfiqurasiya edilə bilər. Bu, bizə admin səlahiyyəti ilə işləyən zərərli MSI faylı yaratmağa və icra etməyə imkan verir.
Bu metod ilə səlahiyyət yüksəldilməsi prosesini icra edə bilmək üçün iki reyestr (registry) dəyəri təyin edilməlidir (HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer və HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer)
Bu reyestrləri sorğuıamaq üçün:
Hər iki reyestr təyin edilibsə, reverse shell faylı hazırlayaraq sistemdə icra edə bilərik:
Bu faylı hədəf sistemə yüklədikdən sonra netcat və ya Metasploit Handler ilə əlaqə üçün dinləyirik və onu icra edirik:
/quiet /qn : Bu parametrlər Windows Installer'ə səssiz quraşdırma yerinə yetirməyi tapşırır, yəni quraşdırma prosesi heç bir istifadəçi interfeysi və ya göstərişlər göstərilmədən baş verir. Həm /quiet, həm də /qn eyni məqsədə xidmət edir.
/i : bu parametr quraşdırma əməliyyatının yerinə yetirilməli olduğunu göstərir.
Windows xidmətləri Xidmət İdarəetmə Meneceri (SCM) tərfindən idarı edilir.Xidmətlər, arxa planda işləyən və əməliyyat sisteminin funksionallığını təmin edən proqramlardır. Windows'da hər bir xidmət icraedici sənədə(executable) sahib olur ki, bu, xidmət işə başladığı zaman SCM tərəfindən işə salınır.
Xidmətlər haqqında məlumat almaq üçün 'sc' (service control) alətindən istifadə edilə bilər. Bu alət, SCM ilə əlaqə qurur və bizə məlumat qaytarır. Xüsusi bir servis haqqında məlumat üçün 'query' və ya 'qc' parametrindən istifadə olunur.
Xidməti başlatmaq üçün:
Dayandırmaq üçün:
Xidmətlə əlaqəli icra olunan fayl üçün icazələr düzgün təyin edilməzsə, hücumçu onu dəyişdirə və digər istifadəçilərin hesabına giriş əldə edə bilər. Bu metodu bu TryHackMe labı ilə praktiki göstərək:
Bu əmrdən istifadə edərək WindowsScheduler xidmətini sorğulayırıq və bu nəticəni əldə edirik:
Burada BINARY_PATH_NAME:C:\PROGRA2\SYSTEM1\WService.exe WindowsScheduler xidməti ilə əlaqəli olaraq icra edilən faylı gostərir. icacls alətindən istifadə edərək bu fayla yazma icazəmizin olub-olmadığını görə bilərik.
Everyone:(I)(M) o deməkdir ki, hər kəsin bu faylı dəyişdirmək icazəsi var. İndi msfvenom'dan istifadə edərək bir reverse shell hazırlayıb bu faylı dəyişdirə bilərik.
Bu faylı Windows'a yükləmək üçün ubuntuda bir http veb-serve başladıram və wget əmri ilə onu sistemə yükləyirəm:
İndi isə aşağıdakı addımlarla faylı dəyişdirirəm:
Artıq netcat alətindən istifadə edrək arxada əlaqə üçün dinləyirəm:
sc ilə xidməti dayandırıb, yenidən başladıram:
Və əlaqə qurulur! Indi svcusr1 kimi sistemə daxil olub, tələb olunan flag.txt faylını oxuya bilərik.
DACL, “Discretionary Access Control List”in qısaltmasıdır.DACL, hər bir istifadəçi və ya istifadəçi qrupu üçün müəyyən edilmiş giriş icazələrini ehtiva edir. Bu icazələr istifadəçilərə müəyyən əməliyyatlar həyata keçirmək və ya obyektə daxil olmaq hüququ verir. Məsələn, faylın DACL'də hər hansı bir istifadəçiyə "Oxu və Yaz" icazəsi, digər istifadəçiyə isə yalnız "Oxu" icazəsi verilə bilər. Xidmətlər üçün bu listi əldə etmək üçün Accesschk istifadı edilə bilər. Onu bu keçiddən istifadə edərək yükləyə bilərsiniz.
İstifadəsi:
-q: Sakit rejimi təyin edir
-l : Obyektləri və onların xassələrini listələyir
-c : Yoxlanılacaq obyektin xidmət olduğunu göstərir
Əgər istifadəçinin xidməti konfiqurasiya edə bilmək kimi icazəsi varsa, servisin executable( icra oluna bilən) faylını reverse shell ilə dəyişə bilərik. Aşağıdakı nümunədə bu metoddan istifadə olunur:
Accesschk ilə servisin icazələrini yoxladıqda BUILTIN\Users'in SERVICE_ALL_ACCESS icazəsi olduğunu görürəm.Bu o deməkdir ki, servisi konfiqurasiya edə bilərik.
İndi msfvenom'dan istifadə edərək öz reverse shell'mi qura və onu hədəf sistemə yükləyərək əlaqə üçün dinləməyə başlaya bilərəm.
Aşağıdakı əmrdən istifadə edərək bu fayla 'hər kəs icra edə bilər' icazəsini verirəm:
Növbəti olaraq, bu əmri cra edərək "THMService" xidmətinin executable faylını yusif.exe olaraq təyin edirəm.
Əlaqənin qurulması üçün xidməti başladıram:
Və shell'i əldə edirəm!
Səlahiyyətlər, hesabın sistemlə bağlı xüsusi tapşırıqları yerinə yetirmək üçün malik olduğu hüquqlardır. Windows'da hər bir istifadəçinin səlahiyyətləri aşağıdakı əmr ilə yoxlana bilər:
Bu nümunədə aşağıdakı səlahiyyətləri görürük:
SeShutdownPrivilege : İstifadəçiyə sistemi bağlamaq imkanı verir. Vəziyyəti: Disabled - Bu, imtiyazın hazırda qeyri-aktiv olduğunu bildirir. Bu imtiyazı olmayan istifadəçilər sistemi bağlaya bilmir.
SeChangeNotifyPrivilege : Serverə və ya workspace'ə traverse yoxlamasını bypass etməyə imkan verir. Traverse yoxlanışı, istifadəçinin açıq icazələri olmasa belə, bir fayl və ya qovluğa daxil olub-olmamasını müəyyən edən təhlükəsizlik tədbiridir. Vəziyyət: Enabled - Bu imtiyaz hazırda aktivdir, yəni sistem travers yoxlamasını bypass edə bilər.
SeUndock Privilege : İstifadəçiyə kompüteri dok stansiyasından çıxarmağa imkan verir. Vəziyyət: Disabled - Bu imtiyaz hazırda deaktivdir. Bu imtiyazı olmayan istifadəçilər kompüteri dok stansiyasından çıxara bilmir.
SeIncreaseWorkingSetPrivilege : Prosesin RAM-da istifadə edə biləcəyi fiziki yaddaşın miqdarı olan iş dəstinin ölçüsünü artırmağa imkan verir. Vəziyyət: Disabled - Bu imtiyaz hazırda deaktivdir. Bu imtiyaz olmadan işləyən proseslər öz iş dəstini dinamik şəkildə artıra bilməyəcək.
SeTimeZone Privilege : İstifadəçiyə sistemin saat qurşağını dəyişməyə imkan verir. Dövlət: Disabled - Bu imtiyaz hazırda deaktivdir. Bu imtiyazı olmayan istifadəçilər sistemin saat qurşağını dəyişə bilmir.
SeBackup və SeRestore səlahiyyətləri istifadəçilərə hər hansı DACL'ə məhəl qoymadan sistemdəki istənilən faylı oxumağa və yazmağa imkan verir. Bu imtiyazın arxasında duran ideya müəyyən istifadəçilərə tam inzibati imtiyazlar tələb etmədən sistemdən ehtiyat nüsxələri çıxarmağa icazə verməkdir.
Aşağıdakı nümunədə bu səlahiyyətdən istifadə edərək hücum həyata keçirəcəyik:
SAM and SYSTEM hash'lərini backup etmək üçün aşağıdakı əmrlərdən istifadə edə bilərik:
Bu faylları öz maşınımıza göndərdikdən sonra etimadnamələri çəkmək üçün Impacket alət dəstindən secretsdump.py skriptindən istifadə edə bilərik:
python3.9 : Bu istifadə ediləcək Python interpreterin versiyasını təyin edir.
/opt/impacket/examples/secretsdump.py: secretsdump.py skriptinə gedən yoldur.
-sam sam.hive: SAM hive faylının yoludur
-system system.hive: SYSTEM faylına gedən yoldur
LOCAL : Bu hədəf sistem və ya domendir. Bu halda, local maşından etimadnamələrin dump edildiyini göstərir.
İndi, Windows maşınından administrator kimi shell əldə etmək üçün Pass-the-Hash hücumu həyata keçirəcəyik. Bunun üçün Impacket alətlər dəstindəki psexec.py skriptindən istifadə edirik:
Və shell'i əldə edirik!
SeTakeOwnership səlahiyyətiı istifadəçiyə sistemdəki istənilən obyektə,faylla və reyestr açarlarına sahib olmağa imkan verir və hücumçuya imtiyazları yüksəltmək üçün bir çox imkanlar verir. Məsələn, SYSTEM kimi işləyən bir xidməti axtarıb, həmin xidmətin executable faylının sahibliyini götürə bilərik.
Aşağıdakı nümunədə utilman.exe faylından istifadə edəcəyik. Utilman.exe (Utility Manager) sistem əlçatanlıq aləti olan Utility Manager proqramını işə salan Windows'da icra edilə bilən faylıdır.Utilman SYSTEM imtiyazları ilə işlədiyindən, orijinal binary faylını öz payload'ımızla əvəz edib, sistem imtiyazları əldə edə bilərik. Amma SeTakeOwnership Səlahiyyəti ilə istədiyimiz faylın sahibi ola bildiyimiz üçün onu əvəz etmək bu vəziyyətdə mənasızdır.
Faylın sahibliyini əldə etmək üçün takeown alətindən istifadə edə bilərik:
Faylın sahibi olmaq onun üçün bütün imtiyazlara sahib olmağı ifadə etmir, amma biz sahib kimi özümüzə icazələr verə bilərik:
Daha sonra utilman.exe faylını cmd.exe faylının surəti ilə əvəz edirik:
Utilman.exe faylını işə salmaq üçün hesabı kilidləyirik və "Ease of Access"'dən istifadə edirik, hansı ki, utilman.exe faylını SYSTEM səlahiyyəti ilə işə salır. Biz bu faylı cmd.exe nüsxəsi ilə əvəz etdiyimiz üçün SYSTEM imtiyazları ilə cmd əldə edirik.
Hash əldə edilibsə onu qırmağa ehtiyac yoxdur, hash'dən istifadə edərək autentifikasiya etmək mümkündür. Bunun üçün aşağıdakı əmrdən sitifadə edə bilərsiniz:
Bu əmrlərdə pth-winexe aləti pass-the-hash (PTH) autentifikasiyasından istifadə edərək uzaq Windows maşınına autentifikasiya edir.
WinPEAS (Windows Privilege Escalation Awesome Scripts) Windows sistemlərində səlahiyyətlərin yüksəldilməsi üçün istifadə edilən bir vasitədir. O, Windows maşını haqqında məlumat toplama prosesini potensial təhlükəsizlik zəifliklərini və yanlış konfiqurasiyaları müəyyən etmək üçün avtomatlaşdırır. Aşağıda WinPEAS üçün bəzi ümumi əmrlər və seçimlər haqqında ümumi məlumat üçün cheatsheet verilmişdir:
WinPEAS'ı yükləmək üçün aşağıdakı əmrdən istifadə edə bilərsiniz:
Növbəti mərhələdə istədiyimiz metodlardan (SMB,FTP və s.) birindən istifadə edərək aləti Windows maşınına köçürürük.
Bu skripti icra etmək üçün Powershell'i açırıq, WinPEAS'ın olduğu qovluğa gedirik və aşağıdakı əmri icra edirik:
Xüsusi yoxlamalar həyata keçirmək üçün:
Nəticəni faylda saxlamaq üçün:
Çıxışın qovluğunu təyin etmək üçün:
Digər parametrlər haqqında məlumat almaq üçün:
WinPEAS'ın çıxışı uzun və oxunması çətin ola bilər. Buna görə də çıxışı həmişə fayla yönləndirmək yaxşı fikirdir.
PrivescCheck hədəf sistemdə səlahiyyət yüksəldilməsi zəifliyini axtaran PowerShell skriptidir. O, binary faylının icrasını tələb etməyən WinPEAS alternatividir.
Yükləmək üçün bu keçiddən istifadə edin.
PrivescCheck'i hədəf sistemdə işə salmaq üçün icra siyasəti məhdudiyyətlərini(execution policy restrictions) bypass etməli ola bilərik. Bunun üçün aşağıdakı əmrdən istifadə edin:
Bu əmr, PowerShell icra siyasətini bypass etmək üçün -ep bypass parametrindən istifadə edir və sonra həmin skript daxilində Invoke-PrivescCheck funksiyasından istifadə edərək PrivescCheck.ps1 adlı skripti icra edir.
Genişləndirilmiş rejim + report fayllarını başqa formatlarda yazmaq üçün:
Bu əmrlərdən PowerShell'də icra etmək üçün:
Genişləndirilmiş rejim + report fayllarını başqa formatlarda yazmaq üçün:
WinPEAS kimi alətlər, onları hədəf sistemə yükləməyimizi və orada işlətməyinizi tələb edir. Bu, antivirus proqramının onları aşkar edib silməsinə səbəb ola bilər. Səs-küy yaratmamaq üçün WES-NG alətini öz maşınımızdan istifadə edə bilərik.
WES-NG Python skriptini buradan yükləyə bilərsiniz.
Onu quraşdırdıqdan sonra sonra verilənlər bazasını yeniləmək üçün aşağıdakı əmrini yazın:
Skript çatışmayan patch'ları yoxlamaq üçün yaratdığı verilənlər bazasına istinad edir.
Skriptdən istifadə etmək üçün hədəf sistemdə 'systeminfo' əmrini işə salmaaq lazımdır. Çıxışı bir .txt faylında saxlayıb öz maşınımıza göndəririk. Daha sonra wes.py'dən istifadə edərək mümkün zəifliklər üçün sistem məlumatlarını yoxlayırıq:
Windows sistemi üçün öz maşınımızdan bir meterpreter shell əldə etdikdən sonra, aşağıdakı metasploit modulundan istifadə edərək sistemdə səlahiyyət yüksəldilməsi həyata keçirmək üçün mümkün zəiflikləri listələyə bilərik:
Digər alətlər üçün keçidlər:
PowerUp Yanlış konfiqurasiyaların sui-istifadəsi
BeRoot General Priv Esc Enumeration Tool
Privesc General Priv Esc Enumeration Tool
FullPowers Restore A Service Account's Privileges