SadServers解説 Easy No.13 「/proc から見つける」
問題概要
問題URL
シナリオ
/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:を含むファイルを探しましょう。
具体的な解決の段取りを表示する
-
/proc/sys配下からsecret:を含むファイルを探す - 見つけたパスワードを
/home/admin/secret.txtに保存する
ヒント
オリジナルヒント
ヒント1
/proc/sys配下のファイルから、secret:を含む行を探します。
実行コマンド
grepコマンドの-rオプションを使うことで、指定したディレクトリ内のファイルを再帰的に検索できます。
2>/dev/nullは、権限エラーなどの標準エラー出力を非表示にするための記述です。
$ grep -r "^secret:" /proc/sys 2>/dev/null
/proc/sys/kernel/core_pattern:secret:excalibur
/proc/sys/kernel/core_patternにパスワードexcaliburが見つかりました。
ヒント2
見つけたパスワードを/home/admin/secret.txtに保存します。
実行コマンド
echoコマンドで文字列をファイルに書き込みます。
$ echo "excalibur" > /home/admin/secret.txt
$ md5sum /home/admin/secret.txt
a7fcfd21da428dd7d4c5bb4c2e2207c4
SadServers公式ヒント(翻訳)
ヒント1
/proc内のほとんどのファイルは読み取り専用で、多くは数値のみを含んでいます。それでもfindを使ってsecret:という文字列を含むファイルを検索できます。(次のヒントで解法を示します)
ヒント2
解法の例: find /proc/sys -type f -exec grep -El '^secret:' {} 2>/dev/null \;
同様の別解: find /proc/sys -type f -print0 | xargs -0 grep -El '^secret:' 2>/dev/null
参考
/proc/sysはLinuxカーネルのパラメータを仮想ファイルとして公開しているディレクトリです。sysctlコマンドで操作するカーネルパラメータと対応しており、今回パスワードが仕込まれていた/proc/sys/kernel/core_patternは、本来コアダンプファイル(プログラムが異常終了したときに、その時点のメモリの内容を自動的に保存したファイル)の命名パターンを制御するパラメータです。
今回のオリジナルヒントではgrep -rを使いましたが、findとxargsを組み合わせる方法もあります。
find /proc/sys -type f | xargs grep "^secret:" 2>/dev/null
findでファイル一覧を取得し、xargsでそれをgrepの引数として渡す方法です。結果は同じですが、findとxargsの組み合わせは、大量のファイルを処理する場面で応用が利きます。
「いきなり問題を解き始めても調べるばかりになってしまう…」 「やりたいことが分かっても、コマンドが分からない…」 という方は、下記の記事でLinuxのコマンドを復習してから、SadServersの問題に取り掛かってみてはいかがでしょうか。
問題一覧はこちら
Discussion