問題回答にあたって、整理したいことがあったため、そちらを記載します。
問題の要点として、fileにファイル名を指定することができますが、そこにディレクトリトラバーサルの脆弱性があります。
アクセスが想定されている、「debug.log」にいくつか使える情報があります。
2025/06/21 10:40:02 DEBUG Parsed command line arguments flag=ctf4b{this_is_dummy_flag} port=8000
2025/06/21 12:43:53 INFO handlerFunc file=”../../proc/self/envion”
これらの情報から、ファイル内容の表示だけで、コマンドライン引数を出力する方法があるのかというのが問題の焦点とわかります。
コマンドライン引数の出力方法
この問題のポイントでした。
まずコマンドライン引数とは、プログラム起動時にコマンド名の後ろに付けるオプションや値のことです。
プログラムでは、コマンドライン引数をargv(argument vector)といい、配列として渡すことになります。
プログラム実行時には、OSカーネルは引数(argv)をプロセスのメモリ上に配置します。Linuxでは、この引数情報は、/proc/<pid>/cmdlineにNUL区切り(\0)で保存されます。
では、プロセスIDはどうなるのかという話になりますが、/proc/self/というシンボリックリンクにアクセスすれば、必要ありません。
これで問題を解くことができました。