$filename
私は現在CTFチャレンジに参加しており、 PHP関数の呼び出しのパラメータに相対パスを挿入することで、フラグと思われるものを抽出しました。
file_get_contents($filename)
ターゲット システム上の Apache サーバーによって実行されます。
フラグが隠されているファイルの名前は、他の時点でのヒントからわかりましたが、疑問に思いました。
Linux システムに一般的に存在し、ディレクトリ構造とこれらのディレクトリに含まれるファイルに関する情報を保持するファイルはありますか?
興味深いファイルへの参照を見つけるために、いくつかのログ ファイルを検索してみましたが、ファイル名の詳細なリストはまだ見つかりませんでした。また、デバイス ファイル全体を読み取る権限もありません。パラメータを完全に制御できます$filename
が、ワイルドカードなしで絶対パスまたは相対パスのみを挿入できることがわかりました。
答え1
ほとんどの Linux マシンにインストールされているこのlocate
コマンドは、システム上のすべてのパスを含むデータベースから情報を取得します。このデータベースは cron ジョブによって管理されます。
データベースを配置する場所については競合する実装やおそらく競合するアイデアがあるlocate
ため、データベースが隠れている可能性のあるすべての場所を見つけるには、いくつかのバージョンを掘り起こす必要があるかもしれません。(すでにマシン上にいる場合は可能ですlocate locatedb
!)
私のDebianマシンでは/var/cache/locate/locatedb
答え2
inode とスーパーブロックについて質問されているようです。参照:http://www.linfo.org/superblockそしてen.wikipedia.org/wiki/Inode
ファイルシステムには、その中に含まれるすべてのファイルとディレクトリを追跡するための「マスターファイル」は必要ありません。したがって、「Linux システムによく存在するファイルで、ディレクトリ構造とこれらのディレクトリに含まれるファイルに関する情報を保持します」。
ただし、i ノードとスーパー ブロックを使用することで、ファイル システムはすべてのファイルとディレクトリを追跡します。ただし、分散型で、集中化されていない方法で追跡します。