📁 .git構造ビューアー
.gitフォルダーの中身をツリー表示し、それぞれの意味とリスクを可視化します。
🔍 Gitオブジェクト復元(シミュレーション)
SHA-1ハッシュを入力して、Gitオブジェクト(blob / tree / commit)を復元します。
🎯 シミュレーター説明
このツールはシミュレーターです。 以下の4種類のサンプルハッシュのみが正しい情報を返します:
💡 その他のハッシュを入力した場合: 「オブジェクトが見つかりません」エラーが表示され、上記4つのサンプルハッシュが提示されます。
🚨 .gitリーク検査(シミュレーション)
特定のURLに `.git/HEAD` などが存在した場合、どのように情報が辿られるかを再現します。
📚 .git漏洩の仕組み
▼初期発見
攻撃者が/.git/HEAD
にアクセスして200 OKレスポンスを確認
メタデータ収集
/.git/config
、/.git/HEAD
から基本情報を取得
履歴探索
/.git/logs/HEAD
から過去のコミットハッシュを特定
完全復元
オブジェクトファイルを順次ダウンロードして全ファイルを復元
⚖️ .git構造比較
異なる.gitディレクトリー構造を並べて比較し、セキュリティリスクの違いを可視化します。
📋 比較対象選択
構造A
構造B
🚩 CTFヒント
CTF競技でGit漏洩問題を解く際のテクニックとツールを紹介します。
🔍 基本的な調査手順
.gitディレクトリーの存在確認
curl -I https://target.com/.git/HEAD
200 OKが返れば.gitディレクトリーが公開されている
基本情報の取得
curl https://target.com/.git/config
curl https://target.com/.git/HEAD
リポジトリ設定と現在のブランチ情報を確認
コミット履歴の探索
curl https://target.com/.git/logs/HEAD
curl https://target.com/.git/logs/refs/heads/main
過去のコミットハッシュとメッセージを取得
🛠️ 便利なツール
📦 GitHacker
python GitHacker.py --url https://target.com/.git/ --folder result
自動で.gitディレクトリーをダウンロードしてリポジトリを復元
🔧 git-dumper
git-dumper https://target.com/.git/ /tmp/repo
部分的に公開された.gitディレクトリーからファイルを復元
🌐 Wayback Machine
https://web.archive.org/web/*/https://target.com/.git/
過去のスナップショットから削除された.gitファイルを発見
🎯 よくある出題パターン
🔑 パターン1: 削除されたフラグファイル
状況: フラグファイルがコミット後に削除されている
解法: git log --oneline
でコミット履歴を確認し、git show [hash]
で削除前の内容を表示
git log --name-status | grep -i flag
git show HEAD~1:flag.txt
🌿 パターン2: 別ブランチのフラグ
状況: mainブランチにはフラグがないが、開発ブランチに存在
解法: git branch -a
で全ブランチを確認し、各ブランチをチェックアウト
git branch -a
git checkout develop
git checkout feature/secret
📝 パターン3: コミットメッセージのヒント
状況: コミットメッセージにフラグの一部やヒントが含まれている
解法: git log --grep
でキーワード検索やログ全体を精査
git log --grep="flag"
git log --oneline --all
git log --pretty=format:"%H %s" --all
🗂️ パターン4: 設定ファイルの機密情報
状況: .env、config.yamlなどにAPIキーやパスワードが含まれている
解法: 設定ファイルの履歴を全て確認
git log -p .env
git log -p config.yaml
git show HEAD~3:config.yaml
💡 実践テクニック
🔍 全ファイルの履歴検索
# 特定の文字列を含むコミットを検索
git log -S "flag{" --source --all
git log -S "password" --source --all
📂 削除されたファイルの一覧
# 削除されたファイルを全て表示
git log --diff-filter=D --summary | grep delete
🕒 特定時点の復元
# 特定のコミット時点の状態を復元
git checkout [commit-hash]
git checkout [commit-hash] -- filename
🔐 隠されたブランチやタグ
# リモートの隠されたブランチを確認
git ls-remote origin
git fetch --all
git tag -l