hacktricks/windows-hardening/windows-local-privilege-escalation/dll-hijacking/writable-sys-path-+dll-hijacking-privesc.md
2024-02-10 18:14:16 +00:00

8.1 KiB
Raw Blame History

Yazılabilir Sys Yolu + Dll Hijacking Privilege Escalation

AWS hacklemeyi sıfırdan kahramanlık seviyesine öğrenin htARTE (HackTricks AWS Red Team Expert)!

HackTricks'ı desteklemenin diğer yolları:

Giriş

Eğer bir Sistem Yolu klasörüne yazabileceğinizi tespit ettiyseniz (unutmayın, bir Kullanıcı Yolu klasörüne yazabiliyorsanız bu çalışmayacaktır), bu durumda sisteminizde privilege escalation (ayrıcalık yükseltme) yapabilirsiniz.

Bunu yapmak için, Daha fazla ayrıcalığa sahip bir hizmet veya işlem tarafından yüklenen bir kütüphaneyi ele geçireceksiniz ve çünkü bu hizmet, muhtemelen sistemde hiç var olmayan bir Dll'yi yüklemeye çalışacak, bu Dll'yi yazabileceğiniz Sistem Yolu'ndan yüklemeye çalışacak.

Dll Hijacking hakkında daha fazla bilgi için:

{% content-ref url="../dll-hijacking.md" %} dll-hijacking.md {% endcontent-ref %}

Dll Hijacking ile Privilege Escalation

Eksik bir Dll bulma

İlk yapmanız gereken, sizden daha fazla ayrıcalığa sahip bir işlem tarafından Sistem Yolu'ndan bir Dll yüklemeye çalışan bir işlemi tespit etmektir.

Bu durumdaki sorun, bu işlemlerin muhtemelen zaten çalışıyor olmasıdır. İhtiyaç duyduğunuz hizmetlerin eksik olan Dll'lerini bulmak için, işlemler yüklenmeden önce mümkün olan en kısa sürede procmon'u başlatmanız gerekmektedir. Bu nedenle, eksik .dll'leri bulmak için şunları yapın:

  • C:\privesc_hijacking klasörünü oluşturun ve Sistem Yolu çevresel değişkenine C:\privesc_hijacking yolunu ekleyin. Bunları manuel olarak yapabilirsiniz veya PS ile yapabilirsiniz:
# Set the folder path to create and check events for
$folderPath = "C:\privesc_hijacking"

# Create the folder if it does not exist
if (!(Test-Path $folderPath -PathType Container)) {
New-Item -ItemType Directory -Path $folderPath | Out-Null
}

# Set the folder path in the System environment variable PATH
$envPath = [Environment]::GetEnvironmentVariable("PATH", "Machine")
if ($envPath -notlike "*$folderPath*") {
$newPath = "$envPath;$folderPath"
[Environment]::SetEnvironmentVariable("PATH", $newPath, "Machine")
}
  • procmon'u başlatın ve Options --> Enable boot logging seçeneğine gidin ve açılan pencerede OK düğmesine basın.
  • Ardından, sistemi yeniden başlatın. Bilgisayar yeniden başlatıldığında procmon olayları kaydetmeye başlayacaktır.
  • Windows başladığında procmon'ı tekrar çalıştırın, çalıştığını ve olayları bir dosyada saklamak isteyip istemediğinizi soracaktır. Evet deyin ve olayları bir dosyada saklayın.
  • Dosya oluşturulduktan sonra, açık olan procmon penceresini kapatın ve olaylar dosyasınıın.
  • Aşağıdaki filtreleri ekleyin ve yazılabilir Sistem Yolu klasöründen yüklenmeye çalışılan tüm DLL'leri bulacaksınız:

Eksik DLL'ler

Bu komutu ücretsiz bir sanal (vmware) Windows 11 makinesinde çalıştırdığımda şu sonuçları elde ettim:

Bu durumda .exe dosyaları işe yaramaz, onları görmezden gelin, eksik DLL'ler şunlardan kaynaklanmaktadır:

Hizmet DLL CMD satırı
Görev Zamanlayıcısı (Schedule) WptsExtensions.dll C:\Windows\system32\svchost.exe -k netsvcs -p -s Schedule
Tanılama İlkesi Hizmeti (DPS) Unknown.DLL C:\Windows\System32\svchost.exe -k LocalServiceNoNetwork -p -s DPS
??? SharedRes.dll C:\Windows\system32\svchost.exe -k UnistackSvcGroup

Bunu bulduktan sonra, bu ilginç blog yazısını buldum, ayrıca WptsExtensions.dll'yi ayrıcalık yükseltmek için nasıl kötüye kullanabileceğiniziıklıyor. Şimdi bunu yapacağız.

Sömürü

Bu nedenle, ayrıcalıkları yükseltmek için WptsExtensions.dll kütüphanesini ele geçireceğiz. Yolu ve adı olan kötü amaçlı dll'yi sadece oluşturmanız gerekiyor.

Bu örneklerden herhangi birini denemeyi deneyebilirsiniz. Rev shell alabilir, bir kullanıcı ekleyebilir, bir işaretçi çalıştırabilirsiniz...

{% hint style="warning" %} Dikkat edin, tüm hizmetler NT AUTHORITY\SYSTEM ile çalıştırılmaz, bazıları aynı zamanda NT AUTHORITY\LOCAL SERVICE ile çalıştırılır ve bu daha az ayrıcalığa sahiptir ve yeni bir kullanıcı oluşturamazsınız. Bununla birlikte, bu kullanıcının seImpersonate ayrıcalığı vardır, bu nedenle potato suite'yi ayrıcalıkları yükseltmek için kullanabilirsiniz. Bu durumda, bir rev shell oluşturmak, bir kullanıcı oluşturmaya çalışmaktan daha iyi bir seçenektir. {% endhint %}

Bu yazıyı yazdığım sırada Görev Zamanlayıcısı hizmeti Nt AUTHORITY\SYSTEM ile çalıştırılıyor.

Kötü amaçlı DLL'yi oluşturduktan sonra (benim durumumda x64 rev shell kullandım ve msfvenom'dan geldiği için defender tarafından öldürüldü), onu yazılabilir Sistem Yolu'na WptsExtensions.dll adıyla kaydedin ve bilgisayarı yeniden başlatın (veya hizmeti yeniden başlatın veya etkilenen hizmeti/programı yeniden çalıştırmak için gerekeni yapın).

Hizmet yeniden başlatıldığında, dll yüklenecek ve çalıştırılacaktır (kütüphanenin beklenildiği gibi yüklendiğini kontrol etmek için procmon hilesini yeniden kullanabilirsiniz).

AWS hacklemeyi sıfırdan kahraman olmak için htARTE (HackTricks AWS Red Team Expert)'ı öğrenin!

HackTricks'i desteklemenin diğer yolları: