問題概要
picoCTFの「Commitment Issues」という問題の解説記事です。
- カテゴリ: General Skills
- 難易度: Easy
問題文
解説
ステップ1: ZIPファイルの確認
問題文からZIPファイル
challenge.zipをダウンロードし、内容を確認します。$ unzip challenge.zip
Archive: challenge.zip
creating: drop-in/
creating: drop-in/.git/
creating: drop-in/.git/branches/
inflating: drop-in/.git/description
creating: drop-in/.git/hooks/
(中略)
inflating: drop-in/.git/logs/refs/heads/master
extracting: drop-in/message.txt
ステップ2: 配布物がGitリポジトリか確認
今回のzipには
.gitディレクトリが含まれているので、drop-in/はそのままGitリポジトリとして扱えます。
まずは隠しファイル込みで中身を確認します。$ cd drop-in
$ ls -a
. .. .git message.txt
message.txtの中身を確認します。
$ cat message.txt
TOP SECRET
「TOP SECRET」と書かれています。特に手がかりにはならなそうですが、重大な秘密が隠されていることは間違いなさそうです。
ステップ3: Gitのコミット履歴を確認
Gitリポジトリとして認識されているので、コミット履歴を確認します。
$ git log
commit 8dc51806c760dfdbb34b33a2008926d3d8e8ad49 (HEAD -> master)
Author: picoCTF <ops@picoctf.com>
Date: Tue Mar 12 00:06:17 2024 +0000
remove sensitive info
commit 87b85d7dfb839b077678611280fa023d76e017b8
Author: picoCTF <ops@picoctf.com>
Date: Tue Mar 12 00:06:17 2024 +0000
create flag
2つのコミットが存在しており、最新のコミットメッセージは「remove sensitive info」、その1つ前のコミットメッセージは「create flag」となっています。
つまり一度フラグ情報を含むコミットがあり、その後に削除されたのではないかと推測できます。
ステップ4: 過去のコミット内容を確認
過去のコミット内容を確認するために、
git showコマンドを使用します。
「create flag」コミットのハッシュ値は 87b85d7dfb839b077678611280fa023d76e017b8 です。$ git show 87b85d7dfb839b077678611280fa023d76e017b8
commit 87b85d7dfb839b077678611280fa023d76e017b8
Author: picoCTF <ops@picoctf.com>
Date: Tue Mar 12 00:06:17 2024 +0000
create flag
diff --git a/message.txt b/message.txt
new file mode 100644
index 0000000..bae247d
--- /dev/null
+++ b/message.txt
@@ -0,0 +1 @@
+picoCTF{xxxxx}
※フラグはマスクしています。
過去のコミットで
message.txtが新規作成され、その内容としてフラグが書き込まれていたことが確認できました。使用したコマンドの軽い解説
unzip
unzip challenge.zip
ZIP形式のアーカイブを展開するコマンドです。配布物に
.gitディレクトリが含まれていないかどうかを確認するためにも、まずは中身をすべて展開しておくと便利です。ls -a
ls -a
隠しファイル(ドットで始まるファイル・ディレクトリ)も含めて一覧表示します。
今回は
.gitディレクトリの存在を確認するために使用しました。git log
git log
コミット履歴を表示するコマンドです。 コミットメッセージから、どのコミットでフラグが作成され、どのコミットで削除されたのかを推測できます。
git show <コミットハッシュ>
git show 87b85d7dfb839b077678611280fa023d76e017b8
指定したコミットで「どのファイルがどのように変更されたか」を表示します。
message.txtが新規作成され、その内容としてフラグが書き込まれていたことが確認できました。まとめ
この問題では、Gitのコミット履歴から「一度コミットされた秘密情報は、後から消しても過去の履歴から復元できてしまう」という点を体験的に学べました。
▼ポイントを整理すると、次の通りです。
- 配布物に
.gitディレクトリが含まれていたら、Gitリポジトリとして扱える git logでコミットメッセージを確認し、「怪しいコミット(create flag / remove sensitive info など)」を探すgit show <コミットハッシュ>で過去のコミット内容を確認し、削除されたフラグを復元できる
現実の開発現場でも、パスワードやシークレットキーを誤ってコミットしてしまう事故は少なくありません。
「コミットに載せてはいけない情報」はそもそもコミットしない、もししてしまった場合は履歴ごと除去する(
git filter-repo など)必要があります。閲覧ありがとうございました!
NEXT
次におすすめ
読み終わったら、そのまま次へ
【picoCTF】Collaborative Development - ブランチを追ってフラグを復元する
カテゴリ: General Skills難易度: Easy#picoCTF
次の記事へ →
同じカテゴリ/難易度/picoCTFでの表示順が近い記事を優先しておすすめしています。