🔏

SadServers No.13 解説 "Bata": Find in /proc

2025/02/08に公開

https://ja.wikipedia.org/wiki/バタ

問題概要

シナリオ

/proc配下の探索

問題詳細

スパイが /proc/sys ディレクトリ内のファイルにパスワードを残しました。そのファイルの内容はsecret:で始まり、パスワードが続いています。

ファイルを見つけ、ファイルの内容からsecret:の後に続くパスワード部分を取り出し、改行文字 (\n) を含めて/home/admin/secret.txtファイルに保存してください。

解決判定

解答をファイル/home/admin/secret.txtに書いて、Check My Solutionボタンをクリックしてください。例えば、解答が"password"であれば、次のようなコマンドを実行し、Check My Solutionボタンをクリックしてください。

echo "password" > /home/admin/secret.txt

解答が正解かどうか、コマンドプロンプト上で確認することも可能です。以下と同じ出力が得られた場合は正解です。

$ md5sum /home/admin/secret.txt
a7fcfd21da428dd7d4c5bb4c2e2207c4

 

問題解決の方針

【表示する】

今回は、ファイルの文字列探索の問題です。
実機を確認しながら、secret:を含むファイルを探しましょう。

 

ヒント

一部、SadServers公式のヒントを改変しています。

ヒント1

まずは、実機を確認します。

$ ls -l /proc/sys
total 0
dr-xr-xr-x 1 root root 0 Dec 30 20:25 abi
dr-xr-xr-x 1 root root 0 Dec 30 20:25 crypto
dr-xr-xr-x 1 root root 0 Dec 30 20:25 debug
dr-xr-xr-x 1 root root 0 Dec 30 20:25 dev
dr-xr-xr-x 1 root root 0 Dec 30 20:20 fs
dr-xr-xr-x 1 root root 0 Dec 30 20:20 kernel
dr-xr-xr-x 1 root root 0 Dec 30 20:20 net
dr-xr-xr-x 1 root root 0 Dec 30 20:25 user
dr-xr-xr-x 1 root root 0 Dec 30 20:25 vm
$ ls -l /proc/sys/abi/
total 0
-rw-r--r-- 1 root root 0 Dec 30 20:26 vsyscall32
$ ls -l /proc/sys/crypto/
total 0
-r--r--r-- 1 root root 0 Dec 30 20:26 fips_enabled
$ ls -l /proc/sys/debug/
total 0
-rw-r--r-- 1 root root 0 Dec 30 20:26 exception-trace
-rw-r--r-- 1 root root 0 Dec 30 20:26 kprobes-optimization

どうやら、/proc/sys配下にファイルが直接配置されているわけではなく、さらにディレクトリが続いているようです。

/proc/sys配下にファイルが直接配置されていた場合は、$ grep "^secret:" /proc/sys/*などで探せましたが、今回のケースはもうひと手間必要なようです。

ヒント2

/proc/sys配下のファイルの中身を検索するコマンドを作っていきます。

まずは、/proc/sys配下のファイルを出力するコマンドを作ります。

実行コマンド

存在するファイルを出力するには、findコマンドを使います。
ディレクトリを除外するために、オプション-type fを付けます。

$ find /proc/sys -type f | head
/proc/sys/abi/vsyscall32
/proc/sys/crypto/fips_enabled
/proc/sys/debug/exception-trace
/proc/sys/debug/kprobes-optimization
/proc/sys/dev/hpet/max-user-freq
/proc/sys/dev/tty/ldisc_autoload
/proc/sys/fs/aio-max-nr
/proc/sys/fs/aio-nr
/proc/sys/fs/binfmt_misc/register
/proc/sys/fs/binfmt_misc/status

/proc/sys配下のファイルを出力するコマンドができました。

 
つぎに、上記コマンドの出力を、「secret:」という文字列が含まれるファイルを探すコマンドの引数に渡しましょう。

実行コマンド

コマンドの標準出力を次のコマンドに引数として渡すには、| xargsを使用します。

$ find /proc/sys -type f | xargs grep "^secret:"
grep: /proc/sys/fs/binfmt_misc/register: Permission denied
grep: /proc/sys/fs/protected_fifos: Permission denied
grep: /proc/sys/fs/protected_hardlinks: Permission denied
grep: /proc/sys/fs/protected_regular: Permission denied
grep: /proc/sys/fs/protected_symlinks: Permission denied
grep: /proc/sys/kernel/cad_pid: Permission denied
/proc/sys/kernel/core_pattern:secret:excalibur
grep: /proc/sys/kernel/unprivileged_userns_apparmor_policy: Permission denied
grep: /proc/sys/kernel/usermodehelper/bset: Permission denied
grep: /proc/sys/kernel/usermodehelper/inheritable: Permission denied
grep: /proc/sys/net/core/bpf_jit_harden: Permission denied
grep: /proc/sys/net/core/bpf_jit_kallsyms: Permission denied
grep: /proc/sys/net/core/bpf_jit_limit: Permission denied
grep: /proc/sys/net/ipv4/route/flush: Permission denied
grep: /proc/sys/net/ipv4/tcp_fastopen_key: Permission denied
grep: /proc/sys/net/ipv6/conf/all/stable_secret: Permission denied
grep: /proc/sys/net/ipv6/conf/default/stable_secret: Permission denied
grep: /proc/sys/net/ipv6/conf/docker0/stable_secret: Permission denied
grep: /proc/sys/net/ipv6/conf/ens5/stable_secret: Permission denied
grep: /proc/sys/net/ipv6/conf/lo/stable_secret: Permission denied
grep: /proc/sys/net/ipv6/route/flush: Permission denied
grep: /proc/sys/vm/compact_memory: Permission denied
grep: /proc/sys/vm/drop_caches: Permission denied
grep: /proc/sys/vm/mmap_rnd_bits: Permission denied
grep: /proc/sys/vm/mmap_rnd_compat_bits: Permission denied
grep: /proc/sys/vm/stat_refresh: Permission denied

パーミッションエラーが多くて分かりにくいですが、/proc/sys/kernel/core_pattern:secret:excaliburという部分でパスワードがヒットしました。

もしエラーを表示したくない場合は、標準エラー出力を/dev/null(いわばゴミ箱に当たるファイル)にリダイレクトしましょう。

$ find /proc/sys -type f | xargs grep "^secret:" 2>/dev/null
/proc/sys/kernel/core_pattern:secret:excalibur

 

パスワードが分かりました。分かったパスワードを/home/admin/secret.txtに保存してクリアです。

別解

grepコマンドを、再帰的に実行するオプション付けて実行しても、secret:で始まる行を含むファイルを探すことができます。

実行コマンド

-rオプションを使うことで、指定したディレクトリ内のファイルを再帰的に検索できます。

$ grep -r "^secret" /proc/sys 2>/dev/null
/proc/sys/kernel/core_pattern:secret:excalibur

 
「いきなり問題を解き始めても調べるばかりになってしまう…」 「やりたいことが分かっても、コマンドが分からない…」 という方は、下記の記事でLinuxのコマンドを復習してから、SadServersの問題に取り掛かってみてはいかがでしょうか。
https://zenn.dev/comf_nakamura/articles/linux_command

問題一覧はこちら

https://zenn.dev/comf_nakamura/articles/sadservers_sitemap

Discussion