关于 github-secret-hunting
面向授权安全评估的 GitHub 密钥搜寻技能,用于检查公开代码库中的凭据和内部基础设施信息。它结合定向搜索、自动扫描、实时监控及有限验证,并强调不得未经授权使用发现的凭据。
主要功能
- 01通过 GitHub 搜索语法定位敏感文件
- 02使用 TruffleHog 扫描代码库和组织
- 03借助 shhgit 监控新泄露
- 04搜索文件类型、CI/CD 配置和文档元数据
- 05验证并记录疑似凭据的上下文
适用场景
- 01审查目标组织的公开代码库
- 02调查 CI/CD 文件或构建记录中的令牌
- 03监控特定组织新出现的密钥泄露
- 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 实例可能会阻止外部扫描。**请先测试连接。
- **切勿使用发现的凭据进行未授权访问。**应进行最低限度的验证、记录并报告。
验证
- TruffleHog 或 GitDorker 在提供上下文的情况下发现潜在机密。
- 通过发起最小化的 API 调用验证机密(例如,对 GitHub 令牌调用
GET /user)。 - 确认机密是近期提交的(检查提交日期)——过期机密的优先级较低。
- 检查仓库是否公开,以及该机密能否授予实质性访问权限(管理员权限还是只读权限)。
- 在报告中记录确切的文件路径、提交哈希和行号。
相关技能
js-secrets-extraction— 在 JavaScript 包中查找可能指向 GitHub 仓库的 API 密钥和端点。hardcoded-credential-hunt— 检测 HTML、JS 和 API 响应中的硬编码密码。source-leak-hunt— 查找在线 Web 服务上暴露的配置文件(.env、.git)。
评论
支持 Markdown