🔏

SadServers解説 Easy No.13 「/proc から見つける」

に公開

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

問題概要

問題URL

https://sadservers.com/scenario/bata

シナリオ

/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:を含むファイルを探しましょう。

具体的な解決の段取りを表示する
  1. /proc/sys配下からsecret:を含むファイルを探す
  2. 見つけたパスワードを/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を使いましたが、findxargsを組み合わせる方法もあります。

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

findでファイル一覧を取得し、xargsでそれをgrepの引数として渡す方法です。結果は同じですが、findxargsの組み合わせは、大量のファイルを処理する場面で応用が利きます。

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

問題一覧はこちら

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

Discussion