OtterHacker/M365Pwned
GitHub: OtterHacker/M365Pwned
一套基于PowerShell WinForms的M365后渗透工具,通过应用级OAuth令牌实现无用户交互的Exchange邮箱和SharePoint/OneDrive文件枚举、搜索与窃取。
Stars: 89 | Forks: 3
# M365Pwned

两款 WinForms GUI 工具,用于通过应用级 OAuth Token 对 M365 环境进行枚举、搜索和数据窃取 —— 无需用户交互。
| 工具 | 目标 | 功能 |
|---|---|---|
| `MailPwned-GUI.ps1` | Exchange Online / Outlook | 浏览邮箱、搜索邮件、下载附件、发送冒充邮件 |
| `SharePwned-GUI.ps1` | SharePoint / OneDrive | 浏览站点和驱动器、搜索文件、预览和下载文档 |
## ⚠️ 免责声明
## 系统要求
- **PowerShell 5.1** (Windows PowerShell — 不需要 PS7)
- 一个已注册的 **Azure AD application**,具有管理员同意的 **Application permissions**(参见下方各工具部分)
## 身份验证
两种工具均支持三种身份验证方法:
### 客户端密钥
```
-TenantId -ClientId -ClientSecret
```
### 证书
### 原始访问令牌
```
-AccessToken
```
## MailPwned-GUI.ps1
### 概述
用于枚举、搜索、读取和窃取 M365/Exchange Online 环境中电子邮件的 WinForms GUI。
### 权限
| 权限 | 用途 |
|---|---|
| `Mail.Read` | 读取所有邮箱中的邮件 |
| `Mail.ReadWrite` | 发送/回复/转发/删除(可选) |
| `User.Read.All` | 枚举所有邮箱(全局搜索) |
### 用法
```
powershell.exe -STA -File .\MailPwned-GUI.ps1
```
### 功能
- 使用 Tenant ID + Client ID + 密钥、证书指纹或原始令牌进行**连接**
- 针对主权/GCC云的**区域选择器** (EUR, FRA, NAM, GBR, APC, AUS, CAN, IND, JPN)
- **加载邮箱** — 浏览文件夹树,读取带有完整 HTML 渲染的电子邮件
- **全局搜索** — 无需加载特定邮箱即可跨租户所有邮箱搜索
- **范围搜索** — 在已加载的邮箱内搜索
- **HTML 邮件预览** — 完整渲染并支持内联图片(无外部请求)
- **附件下载** — 单个或批量
- **撰写 / 回复 / 全部回复 / 转发** — 发送冒充邮件
- **标记已读/未读,删除**
- **导出为 CSV**
- **API 日志面板** — 用于调试的实时彩色请求/响应日志
### 红队用例
- **凭证狩猎** — 搜索所有邮箱中的 `password`、`credentials`、`VPN`、`secret` 等
- **横向钓鱼** — 阅读正在进行的邮件线程,并冒充受损账户发送令人信服的回复
- **情报收集** — 枚举谁在给谁发邮件,查找敏感项目、HR 数据、投资者通信
- **数据窃取** — 批量下载匹配搜索查询的附件
- **持久性发现** — 搜索 MFA 码、密码重置邮件、令牌确认
## SharePwned-GUI.ps1
## CLI 版本
由 **Ethical-Kaizoku** 开发的 CLI 版本可以在[这里](https://github.com/Ethical-Kaizoku/SharePwned)找到
### 概述
用于枚举、浏览、搜索、预览和下载租户中 SharePoint 站点和 OneDrive 驱动器文件的 WinForms GUI。
### 权限
| 权限 | 用途 |
|---|---|
| `Sites.Read.All` | 枚举所有 SharePoint 站点并浏览驱动器 |
| `Files.Read.All` | 读取并下载任何驱动器中的文件 |
| `User.Read.All` | 枚举所有用户的 OneDrive 驱动器(可选) |
### 用法
```
powershell.exe -STA -File .\SharePwned-GUI.ps1
```
### 功能
- 使用 Tenant ID + Client ID + 密钥、证书指纹或原始令牌进行**连接**
- 针对主权/GCC云的**区域选择器**
- 跨租户**枚举所有 SharePoint 站点**
- **浏览驱动器树** — 导航站点文档库和 OneDrive 文件夹
- **全文搜索** — 跨所有驱动器进行关键字搜索(使用 `driveItem` 实体的 `/v1.0/search/query`)
- **回退搜索** — 当缺少 `Sites.Read.All` 时,按驱动器进行搜索
- **文件预览** — 文档文本提取,内联预览面板
- **下载文件** — 带进度的单文件下载
- **文件类型图标** — 文件浏览器中根据扩展名显示图标
- **API 日志面板** — 用于调试的实时彩色请求/响应日志
### 红队用例
- **凭证狩猎** — 搜索所有 SharePoint/OneDrive 中的 `password`、`secret`、`private key`、配置文件、`.env` 等
- **情报收集** — 枚举项目站点、HR 驱动器、财务文档库
- **数据窃取** — 下载感兴趣的文件而不留下大量审计痕迹
- **访问映射** — 枚举受损应用可以到达的所有站点,以了解影响范围
## 区域标头
`Prefer: exchange.region=` 标头将请求路由到正确的数据中心。在针对非默认区域的租户时是必需的。
| 代码 | 区域 |
|---|---|
| EUR | 欧洲 |
| FRA | 法国 (主权) |
| NAM | 北美 |
| GBR | 英国 |
| APC | 亚太地区 |
| AUS | 澳大利亚 |
| CAN | 加拿大 |
| IND | 印度 |
| JPN | 日本 |
## OPSEC 注意事项
- 所有请求直接发送到 `https://graph.microsoft.com` — 无代理或中继
- 应用令牌包含 `roles` 声明;Graph 日志将显示注册应用身份下的应用级访问
- 从文件加载邮箱 (`MailPwned`) 避免了调用 `GET /users` — 当 UPN 列表已通过 OSINT 或先前访问获得时,足迹更小
- 下载的 HTML 电子邮件将内联图片嵌入为 `data:` URI — 打开时无出站请求
- 两种工具都抑制脚本错误,并在获取令牌后完全离线运行
## 许可证
仅供教育和授权安全测试使用。
标签:AD安全, Azuer AD, Exchange Online, Graph API, Grayware, GUI工具, IPv6, Libemu, M365, Microsoft 365, OAuth令牌, OneDrive, PowerShell, SharePoint Online, WinForms, 凭证利用, 数据展示, 数据泄露, 数据窃取, 横向移动, 红队, 编程规范, 越权访问, 邮件安全