SadServers No.13 解説 "Bata": Find in /proc
問題概要
シナリオ
/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の問題に取り掛かってみてはいかがでしょうか。
問題一覧はこちら
Discussion