🕵️ Git Secrets Playground

.gitディレクトリーの構造と漏洩リスクをシミュレーションで学ぼう

📁 .git構造ビューアー

.gitフォルダーの中身をツリー表示し、それぞれの意味とリスクを可視化します。

🔍 Gitオブジェクト復元(シミュレーション)

SHA-1ハッシュを入力して、Gitオブジェクト(blob / tree / commit)を復元します。

🎯 シミュレーター説明

このツールはシミュレーターです。 以下の4種類のサンプルハッシュのみが正しい情報を返します:

💡 その他のハッシュを入力した場合: 「オブジェクトが見つかりません」エラーが表示され、上記4つのサンプルハッシュが提示されます。


    

🚨 .gitリーク検査(シミュレーション)

特定のURLに `.git/HEAD` などが存在した場合、どのように情報が辿られるかを再現します。

🔍 検査オプション

⚡ スキャン速度

💡 使用方法

上記にURLを入力して「スキャン開始」ボタンを押すと、.gitディレクトリーの漏洩検査をシミュレーションします。

⚠️ 重要な注意:

これは教育用シミュレーターです。実際のWebサイトへのアクセスは行いません。

実際のサイトに対して無断でこのような検査を行うことは絶対におやめください

📚 .git漏洩の仕組み

1️⃣

初期発見

攻撃者が/.git/HEADにアクセスして200 OKレスポンスを確認

2️⃣

メタデータ収集

/.git/config/.git/HEADから基本情報を取得

3️⃣

履歴探索

/.git/logs/HEADから過去のコミットハッシュを特定

4️⃣

完全復元

オブジェクトファイルを順次ダウンロードして全ファイルを復元

⚖️ .git構造比較

異なる.gitディレクトリー構造を並べて比較し、セキュリティリスクの違いを可視化します。

📋 比較対象選択

構造A

VS

構造B

🚩 CTFヒント

CTF競技でGit漏洩問題を解く際のテクニックとツールを紹介します。

🔍 基本的な調査手順

1

.gitディレクトリーの存在確認

curl -I https://target.com/.git/HEAD

200 OKが返れば.gitディレクトリーが公開されている

2

基本情報の取得

curl https://target.com/.git/config
curl https://target.com/.git/HEAD

リポジトリ設定と現在のブランチ情報を確認

3

コミット履歴の探索

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