mcpField
G
github-secret-hunting

github-secret-hunting

github.com/uphiago安全1.3k41 次安装8 周前更新
代码仓库

关于 github-secret-hunting

面向授权安全评估的 GitHub 密钥搜寻技能,用于检查公开代码库中的凭据和内部基础设施信息。它结合定向搜索、自动扫描、实时监控及有限验证,并强调不得未经授权使用发现的凭据。

主要功能

  1. 01通过 GitHub 搜索语法定位敏感文件
  2. 02使用 TruffleHog 扫描代码库和组织
  3. 03借助 shhgit 监控新泄露
  4. 04搜索文件类型、CI/CD 配置和文档元数据
  5. 05验证并记录疑似凭据的上下文

适用场景

  1. 01审查目标组织的公开代码库
  2. 02调查 CI/CD 文件或构建记录中的令牌
  3. 03监控特定组织新出现的密钥泄露
  4. 04为漏洞报告记录凭据来源与提交信息

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/uphiago/recon-skills --skill github-secret-hunting

安装后在 Claude Code 中输入/github-secret-hunting确认已加载。

详细介绍

GitHub 密钥搜寻

扫描公开的 GitHub 仓库,查找泄露的 API 密钥、令牌、密码和内部基础设施详情。开发者经常会意外推送机密信息——此技能通过定向搜索、自动扫描工具和实时监控,在开发者发现并撤销凭据之前将其找出。

适用场景

  • 目标在某个组织账户下拥有公开仓库。
  • JS 包分析发现了内部服务名称——在 GitHub 上搜索相关配置文件。
  • 需要查找适用于云服务、支付网关或第三方集成的有效 API 密钥。
  • 目标使用的 CI/CD 系统可能会在构建日志或工作流文件中泄露令牌。
  • 希望实时监控目标组织的新机密泄露。

先决条件

  • terminal,并安装了 python3、curl、git。
  • GitHub Personal Access Token(只需 public_repo 范围)。
  • 工具依赖项:TruffleHog、GitDorker、gitleaks。

快速检测

# Basic GitHub code search for sensitive patterns in target repos
echo "target.com" | while read domain; do
  curl --max-time 30 --connect-timeout 10 -s -H "Authorization: token $GITHUB_TOKEN" \
    "https://api.github.com/search/code?q=$domain+filename:.env" \
    | jq '.items[]?.html_url'
done

操作步骤

阶段 1 — 使用 GitDorker 定向搜索
# Clone the dork collection and run against target
git clone https://github.com/Proviesec/github-dorks
python3 GitDorker.py \
  -tf $GITHUB_TOKEN \
  -q target.com \
  -d dorks/medium_dorks.txt \
  -o gitdorker_target.txt

# Also search by employee emails found in LinkedIn or metadata
python3 GitDorker.py \
  -tf $GITHUB_TOKEN \
  -q "[email protected]" \
  -d dorks/medium_dorks.txt

# Custom dork: find env files
python3 GitDorker.py -tf $GITHUB_TOKEN \
  -q "org:target filename:.env DB_PASSWORD" -d dorks/medium_dorks.txt
阶段 2 — 使用 TruffleHog 深度扫描
# Scan a specific repo (finds secrets even in deleted commits)
trufflehog git https://github.com/target/repo --results=verified

# Scan entire GitHub org
trufflehog github --org=target --token=$GITHUB_TOKEN \
  --only-verified --threads=20 --json > trufflehog_org.json

# Docker variant
docker run --rm -it trufflesecurity/trufflehog:latest \
  github --only-verified --org=target

# Parse verified secrets
cat trufflehog_org.json | jq -r 'select(.Verified == true) | "\(.DetectorName): \(.RawV2)"'
阶段 3 — 使用 shhgit 实时监控
# Monitor globally for secrets being pushed right now
shhgit --search-query \
  'path:*.env OR "DB_PASSWORD=" OR "AWS_ACCESS_KEY_ID=" OR "-----BEGIN RSA PRIVATE KEY-----"'

# Monitor specific org
shhgit --search-query \
  'target.com (path:*.env OR "DB_PASSWORD=" OR "api_key=")'
阶段 4 — 按文件类型和扩展名搜索
# git-wild-hunt: find specific file types
python3 git-wild-hunt.py \
  -s "org:Target extension:json filename:creds language:JSON"
python3 git-wild-hunt.py \
  -s "org:Target extension:sql filename:backup"
python3 git-wild-hunt.py \
  -s "target.com gitlab_token"

# Manual search patterns via GitHub API
for pattern in "filename:.env DB_PASSWORD" "filename:credentials.json" \
               "filename:config.json api_key" "filename:id_rsa" \
               "filename:.npmrc" "extension:pem BEGIN RSA" \
               "filename:service-account.json"; do
  curl --max-time 30 --connect-timeout 10 -s -H "Authorization: token $GITHUB_TOKEN" \
    "https://api.github.com/search/code?q=target.com+$pattern" \
    | jq '.total_count, (.items[:3][].html_url)'
done
阶段 5 — 验证硬编码凭据
# Pipeline: find → extract → verify
echo "target.com" | gau | grep -E '\.js$|\.json$|\.env$|\.config$' \
  | httpx -silent -mc 200 \
  | parallel -j 10 "curl --max-time 30 --connect-timeout 10 -s {} | grep -Eo \
    '(?:api[_-]?key|secret|token)[\"'\''']?\s*[:=]\s*[\"'\''']?([A-Za-z0-9_\-]{20,})' \
    | tee -a api_keys.txt"

# Verify found keys
for key in $(cat api_keys.txt | awk -F':' '{print $2}' | tr -d '"'\'' ' | sort -u); do
  # OpenAI
  curl --max-time 30 --connect-timeout 10 -s "https://api.openai.com/v1/models" -H "Authorization: Bearer $key" | jq '.data[].id' 2>/dev/null && echo "VALID OPENAI: $key"
  # GitHub
  curl --max-time 30 --connect-timeout 10 -s "https://api.github.com/user" -H "Authorization: token $key" | jq '.login' 2>/dev/null && echo "VALID GITHUB: $key"
done
阶段 6 — GitLab 私有实例
# Discover self-hosted GitLab
# Check: gitlab.target.com, git.target.com, code.target.com
curl --max-time 30 --connect-timeout 10 -sk "https://gitlab.target.com/api/v4/projects?visibility=public"

# With a found token
curl --max-time 30 --connect-timeout 10 --header "PRIVATE-TOKEN: $GITLAB_TOKEN" \
  "https://gitlab.target.com/api/v4/user"
curl --max-time 30 --connect-timeout 10 --header "PRIVATE-TOKEN: $GITLAB_TOKEN" \
  "https://gitlab.target.com/api/v4/projects?membership=true&simple=true"

# Deep scan for secrets across accessible repos
gitleaks detect \
  --source https://gitlab.target.com \
  --access-token $GITLAB_TOKEN -v
阶段 7 — 从公开文档中提取元数据
# metafinder: downloads public documents and extracts metadata
# Reveals usernames, software versions, internal file paths, email patterns
metafinder -d "target.com" -l 10 -go -bi -ba -o metadata_target.txt
metafinder -d "dev.target.com" -l 10 -go -bi -ba -o metadata_dev.txt

# Manual: check PDF metadata
curl --max-time 30 --connect-timeout 10 -sk "https://target.com/document.pdf" -o doc.pdf
exiftool doc.pdf | grep -i "author\|creator\|producer"

注意事项

  • **大多数搜索结果都是文档和示例,并非真正的泄露。**重点关注 .env、.config、.npmrc 和 CI/CD 工作流文件。
  • **GitHub API 的速率限制很严格。**请使用多个令牌或轮换 IP。
  • **已验证的机密可能已经撤销。**报告前务必验证。
  • **可自托管的 GitLab 实例可能会阻止外部扫描。**请先测试连接。
  • **切勿使用发现的凭据进行未授权访问。**应进行最低限度的验证、记录并报告。

验证

  1. TruffleHog 或 GitDorker 在提供上下文的情况下发现潜在机密。
  2. 通过发起最小化的 API 调用验证机密(例如,对 GitHub 令牌调用 GET /user)。
  3. 确认机密是近期提交的(检查提交日期)——过期机密的优先级较低。
  4. 检查仓库是否公开,以及该机密能否授予实质性访问权限(管理员权限还是只读权限)。
  5. 在报告中记录确切的文件路径、提交哈希和行号。

相关技能

  • js-secrets-extraction — 在 JavaScript 包中查找可能指向 GitHub 仓库的 API 密钥和端点。
  • hardcoded-credential-hunt — 检测 HTML、JS 和 API 响应中的硬编码密码。
  • source-leak-hunt — 查找在线 Web 服务上暴露的配置文件(.env、.git)。

评论

支持 Markdown