amirofski/github_osint
GitHub: amirofski/github_osint
一款用于在 GitHub 公开仓库中搜索和分析代码泄露、敏感凭证及危险代码模式的开源情报工具。
Stars: 1 | Forks: 0
# 🔍 GitHub OSINT 情报工具
一款强大的**开源情报 (OSINT)** 工具,用于搜索和分析 GitHub 仓库、代码模式、文件和提交记录。发现 GitHub 公开仓库中的敏感信息、安全漏洞、API 密钥、私密凭证以及危险的代码模式。
## 📋 目录
- [功能](#-features)
- [前置条件](#-prerequisites)
- [安装说明](#-installation)
- [配置](#-configuration)
- [用法](#-usage)
- [示例](#-examples)
- [高级功能](#-advanced-features)
- [输出格式](#-output-formats)
- [故障排除](#-troubleshooting)
- [项目结构](#-project-structure)
- [贡献](#-contributing)
- [许可证](#-license)
## ✨ 功能
### 🎯 核心功能
- **多源搜索**:跨代码、仓库、issue 和 commit 进行搜索
- **模式检测**:自动检测私钥、助记词、API 密钥等危险模式
- **基于文件的搜索**:按名称查找特定文件(例如 `.env`、`hardhat.config.js`、`.git`)
- **内容提取**:直接从仓库获取并分析文件内容
- **智能速率限制**:自动处理 GitHub API 的速率限制
- **状态管理**:跟踪已搜索的模式并避免重复结果
- **持续监控**:通过自动状态持久化运行持续搜索
### 📊 输出选项
- **JSON 格式**:用于程序化分析的结构化数据导出
- **CSV 格式**:兼容电子表格的数据分析导出
- **丰富元数据**:包含仓库统计信息、文件详细信息和时间戳的增强结果
### 🔐 安全功能
- 检测硬编码凭证(API 密钥、助记词、私钥)
- 识别敏感配置文件
- 搜索危险代码模式
- 跟踪仓库更新以发现新的易受攻击代码
### ⚙️ 高级选项
- 用于实时查询的交互模式
- 自动搜索所有危险模式
- 具有状态持久化的持续监控模式
- 可自定义的结果限制(每种模式最多 1,000 个)
- 可选的文件内容获取
## 📌 前置条件
在安装之前,请确保您具备:
### 必需项
- **Python 3.8 或更高版本**
- **GitHub 账户**(用于 API token)
- **互联网连接**(用于访问 GitHub API)
### 推荐项
- Git(用于克隆仓库)
- pip(通常随 Python 一起提供)
- 虚拟环境(用于隔离依赖项)
## 🚀 安装说明
### 第 1 步:安装 Python
#### **Windows**
1. 从 [python.org](https://www.python.org/downloads/) 下载 Python
2. 运行安装程序
3. ✅ **重要**:在安装过程中勾选“Add Python to PATH”
4. 点击“Install Now”
5. 验证安装:
python --version
pip --version
#### **macOS**
使用 Homebrew(推荐):
```
brew install python3
```
或者从 [python.org](https://www.python.org/downloads/) 下载
验证安装:
```
python3 --version
pip3 --version
```
#### **Linux (Ubuntu/Debian)**
```
sudo apt update
sudo apt install python3 python3-pip python3-venv -y
python3 --version
pip3 --version
```
#### **Linux (Fedora/RHEL)**
```
sudo dnf install python3 python3-pip -y
python3 --version
pip3 --version
```
### 第 2 步:克隆仓库
```
# 使用 Git
git clone https://github.com/amirofski/github_osint.git
cd github_osint
# 或者下载 ZIP 文件并解压
```
### 第 3 步:创建虚拟环境(推荐)
#### **Windows**
```
python -m venv venv
venv\Scripts\activate
```
#### **macOS/Linux**
```
python3 -m venv venv
source venv/bin/activate
```
激活后,您的终端应显示 `(venv)` 前缀。
### 第 4 步:安装依赖项
```
pip install -r requirements.txt
```
这将安装:
- `requests` - 用于 API 调用的 HTTP 库
- `python-dotenv` - 环境变量管理
### 第 5 步:获取 GitHub API Token
1. 前往 [GitHub Settings - Personal Access Tokens](https://github.com/settings/tokens)
2. 点击“Generate new token (classic)”
3. 为其起一个描述性的名称(例如,“OSINT Tool”)
4. 选择权限范围:
- ✅ `public_repo` - 访问公开仓库
- ✅ `read:user` - 读取用户数据
5. 点击“Generate token”
6. **立即复制 token**(您将无法再次看到它)
### 第 6 步:配置环境变量
在项目根目录下创建一个 `.env` 文件:
```
# Windows
echo GITHUB_TOKEN=your_token_here > .env
echo OUTPUT_FORMAT=json >> .env
echo OUTPUT_FILE=results.json >> .env
# macOS/Linux
cat > .env << EOF
GITHUB_TOKEN=your_token_here
OUTPUT_FORMAT=json
OUTPUT_FILE=results.json
EOF
```
**将 `your_token_here` 替换为您的实际 GitHub token**
或者手动创建 `.env` 并填入以下内容:
```
GITHUB_TOKEN=ghp_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
OUTPUT_FORMAT=json
OUTPUT_FILE=results.json
```
## ⚙️ 配置
### 环境变量
| 变量 | 描述 | 默认值 | 示例 |
|----------|-------------|---------|---------|
| `GITHUB_TOKEN` | GitHub API token(必需) | None | `ghp_xxx...` |
| `OUTPUT_FORMAT` | 输出文件格式 | `json` | `json` 或 `csv` |
| `OUTPUT_FILE` | 默认输出文件名 | 自动生成 | `results.json` |
## 📖 用法
### **交互模式**
最适合探索和测试查询:
```
python main.py --interactive
```
交互命令:
- 直接输入搜索查询
- 使用 `auto` 搜索所有危险模式
- 使用 `exit`、`quit` 或 `q` 退出
- 自定义结果限制、格式和内容获取
### **CLI 模式 - 基本搜索**
搜索特定模式:
```
# 搜索私钥
python main.py "privateKey"
# 搜索特定文件
python main.py filename:hardhat.config.js
# 使用自定义最大结果数进行搜索
python main.py "mnemonic" --max-results 500
# 输出到 CSV
python main.py "alchemy" --format csv --output results.csv
```
### **CLI 模式 - 自动搜索**
自动搜索所有危险模式:
```
# 单次运行
python main.py --auto
# 使用自定义设置
python main.py --auto --max-results 200 --format csv --output danger.csv
# 跳过文件内容获取(更快)
python main.py --auto --no-fetch-content
```
### **持续监控模式**
持续搜索并跟踪新结果:
```
# 启动持续监控
python main.py --auto --continuous --output ongoing_results.json
# 使用 state file 实现持久化
python main.py --auto --continuous --state-file my_state.json --output results.json
```
按 `Ctrl+C` 停止持续模式。
## 💡 示例
### 示例 1:搜索硬编码的 API 密钥
```
python main.py "infura" --max-results 100 --format json --output infura_keys.json
```
**输出**:包含“infura”的所有仓库及其文件内容和元数据。
### 示例 2:查找环境配置文件
```
python main.py filename:.env --max-results 500
```
**输出**:在 GitHub 上公开找到的所有 `.env` 文件。
### 示例 3:搜索私钥模式
```
python main.py "-----BEGIN PRIVATE KEY-----" --max-results 200 --output pem_keys.csv --format csv
```
### 示例 4:综合模式检测
```
python main.py --auto --continuous \
--max-results 100 \
--format json \
--output comprehensive_scan.json \
--state-file tracking.json
```
### 示例 5:具有自定义功能的交互式会话
```
python main.py --interactive
```
然后进行交互:
```
Enter search query: filename:hardhat.config.js
Max results (default 100, max 1000): 50
Fetch file content? (y/n, default: y): y
Output format (json/csv, default: json): json
```
## 🔧 高级功能
### 状态管理
跟踪您已经搜索过的内容以避免重复:
```
python main.py --auto --continuous \
--state-file github_intel_state.json \
--output results.json
```
**状态文件跟踪**:
- 已搜索的模式
- 最后处理的页面
- 最后的结果时间
- 已见的唯一仓库
### 速率限制处理
该工具会自动管理 GitHub API 速率限制:
- **已认证**:每小时 5,000 次请求
- **未认证**:每小时 60 次请求(不推荐)
- 接近限制时自动等待
- 优雅处理速率限制重置
### 内容获取控制
```
# 获取内容(默认)- 数据更多,速度较慢
python main.py "privateKey"
# 跳过内容 - 更快,仅包含基本信息
python main.py "privateKey" --no-fetch-content
```
## 📊 输出格式
### JSON 格式(默认)
```
[
{
"search_type": "code",
"repository": {
"name": "example-repo",
"owner": "username",
"full_name": "username/example-repo",
"url": "https://github.com/username/example-repo",
"stars": 150,
"forks": 45,
"language": "JavaScript",
"updated_at": "2024-01-15T10:30:00Z"
},
"file": {
"name": ".env",
"path": ".env",
"url": "https://github.com/username/example-repo/blob/main/.env",
"sha": "abc123...",
"content": "PRIVATE_KEY=0x1234567890..."
},
"matched_pattern": "filename:.env"
}
]
```
### CSV 格式
```
search_type,repo_owner,repo_name,file_name,file_path,file_url,repo_url,content,matched_pattern
code,username,example-repo,.env,.env,https://...,https://...,PRIVATE_KEY=0x...,filename:.env
```
## 🐛 故障排除
### ❌ 错误:“GITHUB_TOKEN environment variable is required”
**解决方案**:
```
# 使用你的 token 创建 .env 文件
echo GITHUB_TOKEN=your_token_here > .env
# 或者直接设置环境变量
# Windows
set GITHUB_TOKEN=your_token_here
python main.py --auto
# macOS/Linux
export GITHUB_TOKEN=your_token_here
python main.py --auto
```
### ❌ 错误:“Rate limit exceeded”
**解决方案**:该工具会自动等待,但您可以:
1. 使用较少的结果:`--max-results 50`
2. 使用 `--no-fetch-content` 减少 API 调用
3. 等待 1 小时重置速率限制
4. 使用具有更高速率限制的 token
### ❌ 错误:“No module named 'requests'”
**解决方案**:
```
pip install -r requirements.txt
```
### ❌ 错误:“ModuleNotFoundError: No module named 'dotenv'”
**解决方案**:
```
pip install python-dotenv
# 或重新安装所有
pip install -r requirements.txt
```
### ❌ 错误:“Invalid query format”
**解决方案**:使用正确的 GitHub 搜索语法:
```
# ✅ 正确
python main.py "privateKey"
python main.py filename:hardhat.config.js
python main.py filename:.env
# ❌ 避免
python main.py "user@email.com" # Special characters need escaping
```
### ❌ 错误:“Connection timeout”
**解决方案**:
1. 检查互联网连接
2. GitHub API 可能已宕机
3. 稍后重试
4. 使用 `--no-fetch-content` 减少耗时
## 📁 项目结构
```
github_osint/
├── main.py # Main entry point, CLI interface
├── github_client.py # GitHub API interaction
├── search_engine.py # Search logic and pattern matching
├── config.py # Configuration and constants
├── patterns.py # Dangerous patterns definition
├── output_handler.py # Result export (JSON/CSV)
├── state_manager.py # State persistence for tracking
├── extractor.py # Data extraction utilities
├── requirements.txt # Python dependencies
├── .env # Environment variables (create locally)
└── README.md # This file
```
## 🤝 贡献
欢迎任何贡献!可以改进的领域:
- [ ] 添加更多危险模式
- [ ] 支持额外的输出格式(XML、SQLite)
- [ ] 代理支持
- [ ] 数据库集成
- [ ] Web UI
- [ ] 结果过滤和分析
## 📝 许可证
本项目仅供教育和安全研究目的使用。
**免责声明**:负责任地使用,并且仅在您拥有权限的仓库上使用。未经授权访问计算机系统是违法行为。
## ⚠️ 法律与道德声明
- **仅供教育用途**:此工具专为安全研究人员和授权的渗透测试而设计。
- **合法合规**:仅搜索公开仓库并确保您已获得授权。
- **负责任的披露**:如果您发现真实的漏洞,请向相关方报告。
- **无担保**:使用风险自负。作者不承担任何责任。
## 🔗 快速链接
- [GitHub API 文档](https://docs.github.com/en/rest)
- [GitHub Token 设置](https://github.com/settings/tokens)
- [GitHub 搜索语法](https://docs.github.com/en/search-github/searching-on-github/searching-code)
## 📞 支持
如遇问题和疑问:
1. 查看上方的**故障排除**部分
2. 查看 GitHub Issues
3. 查看现有文档
4. 创建一个包含详细信息的新 issue
## 🙏 致谢
专为安全研究人员和开源社区打造,用于发现和修复公开共享代码中的漏洞。
**最后更新**:2026 年 1 月
**版本**:1.0.0
**作者**:amirofski
标签:ESC4, OSINT, StruQ, 字符串匹配, 安全助手, 逆向工具