Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
工具/GitHubGitHub/octoberfest7/teamsphisher
钓鱼工具侦察信息收集钓鱼攻击渗透测试社会工程学红队
GitHuboctoberfest7/teamsphisher

TeamsPhisher

向Microsoft Teams用户发送钓鱼消息和附件

查看仓库
1.1k14262年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
root@kitploit:~
                            ...                                               
                        :-++++++=-.                                           
                      .=+++++++++++-                                          
                     .++++++++++++++=     :------:                            :-:--.                 
                     :+++++++++++++++.  .----------                           #= .-+.                
                     :+++++++++++++++.  -----------:                         :#=  :#.                   
:--------------------------=++++++++-  .------------                          .=+  ++                
----------------------------+++++*+-.   :+=-----===:                          -+-.+:                 
:---------------------------++++=-.      .=+++++=-.                           .=+:.                    
:------=%%%%%%%%%%%%--------:...           .:::..                              -*=-:                
:------=****#@@#****--------=++++++++++++++-----------.                        -#++-                   
:----------:+@@+:-----------+++++++++++++++=-----------                        -#++-                  
:-----------+@@*------------+++++++++++++++=-----------.                       -*+*-                  
:-----------+@@*------------+++++++++++++++=-----------.                   .   -*++-                    
:-----------+@@*------------+++++++++++++++=-----------.                   --  -*++-                  
:-----------+@@*------------+++++++++++++++=-----------.           .       ==  -*++-                .=
:-----------+@@+------------+++++++++++++++=-----------.          .+       -=  :+==-                .*
:---------------------------+++++++++++++++=-----------.          =*       -=  -+=+=                .::
----------------------------+++++++++++++++=-----------           **       -+  -+=++.               .*=
.:-------------------------=+++++++++++++++=---------=:           #+       :=  ++-:*=                ==
                -++++++++++++++++++++++++++=-------=+=:          :#=       .:. *=: -*-               ==
                .=+++++++++++++++++++++++++*+++++++=-.           -#-        ::++=   :+=.            .==
                :++++++++++++++++++++++++=:.:::::.               -*:        .=+-.    .=+-.          -+:
                .=+*+++++++++++++++++++-                         -+-      .:-=.        .-====----:-==:
                    .-+**+++++++++++**+-.                        .++:   .-=-:             .:-====-:.
                    :-=++******+=-:                               .=+===--.                  
                        ..:::..                                      ...                     
                                    
                   _____                            ______  _      _       _                 
                  |_   _|                           | ___ \| |    (_)     | |                
                    | |  ___   __ _  _ __ ___   ___ | |_/ /| |__   _  ___ | |__    ___  _ __ 
                    | | / _ \ / _` || '_ ` _ \ / __||  __/ | '_ \ | |/ __|| '_ \  / _ \| '__|
                    | ||  __/| (_| || | | | | |\__ \| |    | | | || |\__ \| | | ||  __/| |   
                    \_  \___| \__,_||_| |_| |_||___/\_|    |_| |_||_||___/|_| |_| \___||_|   
                  
                    v1.2 developed by @Octoberfest73 (https://github.com/Octoberfest7)

简介

TeamsPhisher 是一个 Python3 程序,用于向允许外部通信的组织中的 Microsoft Teams 用户发送钓鱼消息和附件。

通常情况下,无法向组织外的 Teams 用户发送文件。JUMPSEC 的 Max Corbridge (@CorbridgeMax) 和 Tom Ellson (@tde_sec) 最近披露了一种绕过此限制的方法,通过篡改 Teams 网络请求来更改带有附件的消息的收件人。

TeamsPhisher 结合了此技术以及 Andrea Santese (@Medu554) 披露的一些早期技术。

它还大量借鉴了 TeamsEnum,这是 SSE 的 Bastian Kanbach (@bka) 的出色工作,用于攻击流程的认证部分以及一些通用辅助函数。

TeamsPhisher 旨在吸收所有这些项目的精华,为授权的红队操作提供一种强大、可定制且高效的方式,以便在利用 Microsoft Teams 进行钓鱼访问场景时使用。

有关缓解建议,请参阅本 README 的末尾。

功能与演示

为 TeamsPhisher 提供一个附件、一条消息以及目标 Teams 用户列表。它会将附件上传到发件人的 Sharepoint,然后遍历目标列表。

TeamsPhisher 首先会枚举目标用户,确保用户存在且能够接收外部消息。然后它会与目标用户创建一个新线程。注意,这实际上是一个"群组"聊天,因为 TeamsPhisher 将目标的电子邮件包含了两次;这是 @Medu554 的一个巧妙技巧,可以绕过"有人从你的组织外给你发了消息,你确定要查看吗?"的启动画面,该画面可能会让我们的目标产生犹豫。(v1.2)注意:此启动画面绕过已被修补,但将目标用户添加到群组聊天仍然与当前启动画面绕过相关。

在我们的发件人与目标之间创建新线程后,指定的消息将连同 Sharepoint 中附件的链接一起发送给用户。

一旦初始消息发送完毕,目标用户将从创建的群组聊天中被移除。这虽然移除了发件人进一步向目标发送消息的能力,但也移除了"此人员来自你的组织外部"的启动画面,从而大大提高了成功率。当前的绕过方法由 @pfiatde 在他关于 Teams 及意外行为的众多博客之一中发布,并由 DenSecure 的 Steve Nelson (@stevesec128) 和 Alex Martirosyan (@almartiros) 集成到 TeamsPhisher 中。

运行模式

实际运行 TeamsPhisher。向目标发送钓鱼消息。

命令:
alt text

Targets.txt:
alt text

Message.txt: alt text

TeamsPhisher 输出:
alt text

发件人视图:
alt text

目标视图:
alt text

附件文件:
alt text

预览模式

以预览模式运行 TeamsPhisher,以便验证目标列表、预览其"友好名称"(如果 TeamsPhisher 可以使用 --personalize 开关解析它们),并向自己的发件人账户发送测试消息,以验证一切是否符合预期。

TeamsPhisher 输出:
alt text

发件人视图:
alt text

设置与要求

TeamsPhisher 要求用户拥有一个 Microsoft 商业账户(而非个人账户,例如 @hotmail、@outlook 等),并具有有效的 Teams 和 Sharepoint 许可证。

这意味着你需要一个 AAD 租户以及至少一个拥有相应许可证的用户。在发布时,AAD 许可证中心有一些免费试用许可证可以满足此工具的要求。

在使用该账户与 TeamsPhisher 之前,你需要至少登录一次将用于发送消息的用户个人 Sharepoint。地址类似于 tenantname-my.sharepoint.com/personal/myusername_mytenantname_onmicrosoft_com 或 tenantname-my.sharepoint.com/personal/myusername_mytenantname_mycustomdomain_tld。

在本地要求方面,建议更新到最新版本的 Python3。你还需要 Microsoft 的身份验证库:``` pip3 install msal

root@kitploit:~
# 用法```
usage: teamsphisher.py [-h] -u USERNAME -p PASSWORD -a ATTACHMENT -m MESSAGE (-e EMAIL | -l LIST) [--greeting GREETING] [--securelink] [--personalize]
                       [--preview] [--delay DELAY] [--nogreeting] [--log] [--sharepoint SHAREPOINT]

options:
  -h, --help            show this help message and exit
  -u USERNAME, --username USERNAME
                        Username for authentication
  -p PASSWORD, --password PASSWORD
                        Password for authentication
  -a ATTACHMENT, --attachment ATTACHMENT
                        Full path to the attachment to send to targets.
  -m MESSAGE, --message MESSAGE
                        A file containing a message to send with attached file.
  -e EMAIL, --targetemail EMAIL
                        Single target email address
  -s SHAREPOINT, --sharepoint SHAREPOINT
                        Manually specify sharepoint name (e.g. mytenant.sharepoint.com would be --sharepoint mytenant)
  -l LIST, --list LIST  Full path to a file containing target emails. One per line.
  --greeting GREETING   Override default greeting with a custom one. Use double quotes if including spaces!
  --securelink          Send link to file only viewable by the individual target recipient.
  --personalize         Try and use targets names in greeting when sending messages.
  --preview             Run in preview mode. See personalized names for targets and send test message to sender's Teams.
  --delay DELAY         Delay in [s] between each attempt. Default: 0
  --nogreeting          Do not use built in greeting or personalized names, only send message specified with --message
  --log                 Write TeamsPhisher output to logfile

必需参数

用户名

用于发送消息的 Microsoft 账户用户名(例如 [email protected])

密码

上述账户的密码。如果包含特殊字符,建议用单引号将整个密码括起来。

附件

您希望发送给目标用户的文件。该文件将上传至发件账户的 SharePoint,并通过 Teams 共享一个链接。

消息

包含应随附件一起发送给目标的文本消息的文件。

邮箱 / 列表

可以是一个目标邮箱地址(例如 [email protected]),也可以是一个包含每行一个目标邮箱地址的文件。

可选参数和功能

Sharepoint(SharePoint)

手动指定上传附件的 SharePoint 网站名称。如果您的发件人租户使用自定义域名(即不遵循 xxx.onmicrosoft.com 格式),则很可能会需要此参数。只需指定唯一名称,例如,如果您的 SharePoint 网站是 mytest.sharepoint.com,则使用 --sharepoint mytest。

Greeting(问候语)

用自定义问候语覆盖 TeamPhisher 的默认问候语("Hi, "),该问候语将附加到 --message 指定的消息之前。例如:"Good afternoon, " 或 "Sales team, "。

Securelink(安全链接)

默认情况下,发送给目标的 SharePoint 链接可由任何拥有链接的人查看;使用 --securelink 可使 SharePoint 文件仅限接收该链接的目标用户查看。这可能有助于保护您的恶意软件免受蓝队发现。

Personalize(个性化)

TeamsPhisher 将尝试识别每个目标用户的名字,并将其与问候语配合使用。例如,[email protected] 将会收到以 "Hi Tom, " 开头的消息。此功能并非完美,且依赖于目标邮箱的格式;使用 --preview 查看此功能是否适用于您的目标列表。

Preview(预览)

TeamsPhisher 将以预览模式运行。这 不会 向目标用户发送任何消息,而是显示 --personalize 开关将会使用的“友好”名称。此外,会将一条代表当前设置下目标将收到的消息的测试消息发送至发件人的 Teams;登录查看您的消息外观并根据需要进行修改。

Delay(延迟)

指定在向目标发送消息之间的 x 秒延迟。有助于解决潜在的速率限制问题。

Nogreeting(无问候语)

禁用 TeamPhisher 内置的问候语。同时也会禁用 --personalize 功能。如果您已将问候语包含在 --message 指定的消息中,请使用此选项。

Log(日志)

将 TeamPhisher 输出写入日志文件(将写入用户主目录)。

示例```

python3 teamsphisher.py -u [email protected] -p 'xxxxxxxxxxxx' -l /root/targets.txt -a /root/attachment.zip -m /root/message.txt --log

root@kitploit:~
This command will fetch access tokens for the testuser account and upload the attachment '/root/attachment.zip' to testuser's Sharepoint.  

It will then create a unique Teams thread with each target listed within '/root/targets.txt' and send them the message specified within '/root/message.txt' as well as a link to the attachment within Sharepoint.  

All terminal output from TeamsPhisher will be logged in a file that is output within the user's home directory.```
python3 teamsphisher.py -u [email protected] -p 'xxxxxxxxxxxx' -l /root/targets.txt -a /root/attachment.zip -m /root/message.txt --greeting "Good afternoon" --personalize --securelink

此命令将为testuser账户获取访问令牌,并将附件'/root/attachment.zip'上传到testuser的SharePoint。

然后,它将为'/root/targets.txt'中列出的每个目标创建一个唯一的Teams线程,并向他们发送'/root/message.txt'中指定的消息以及SharePoint中附件的链接。

消息将以问候语"下午好 <名称>,"开头。

TeamsPhisher将尝试在问候语中使用"友好"名称。现在问候语将是"下午好 <名称>,"。

每个发送的SharePoint链接都是唯一的,并且仅对该特定目标有效。

额外功能与说明

账户枚举

TeamsPhisher能够识别无法接收外部组织消息的账户、不存在的账户以及订阅计划不兼容此攻击向量的账户:

alt text

启用了MFA的账户

借助TeamsEnum项目的代码,TeamsPhisher支持使用启用了多因素认证(MFA)的发送者账户登录:

alt text

安全的SharePoint链接

使用--securelink开关将导致目标在被提示进行身份验证后才能查看SharePoint中的附件。你可以自行判断这是否增加了过多步骤,或者通过引导他们经过真实的Microsoft登录功能来增加"合法性"。

alt text

alt text

全局变量

通过编辑TeamsPhisher.py,你可以修改一些全局变量,以便在后续运行中使用:```

Global Options and Variables

Greeting: The greeting to use in messages sent to targets. Will be joined with the targets name if the --personalize flag is used

Examples: "Hi" "Good Morning" "Greetings"

Greeting = "Hi"

useragent: The user-agent string to use for web requests

useragent = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko)"

root@kitploit:~
## 个性化与"友好"名称

`--personalize` 标志会尝试为每个目标解析一个"友好"名称;它通过查看 `enumUser` 函数返回的数据,首先检查 "displayName" 字段。

如果 "displayName" 字段包含空格(例如 "Tom Jones"),TeamsPhisher 会按空格分割并取第一个片段作为"友好"名称。

如果 "displayName" 字段中没有空格(例如某些组织可能将 UPN 放在 displayName 字段中,如 [email protected]),TeamsPhisher 会尝试自行解析 UPN。

以 UPN 示例 [email protected] 为例,TeamsPhisher 会按 '@' 字符分割,然后在第一个片段中按 '.' 字符分割并取第一个片段。这样就会得到"友好"名称 "Tom"。

这就是 TeamsPhisher 尝试识别"友好"名称的全部范围。对于像 [email protected] 和 [email protected] 这样的目标,如果其 displayName 字段不符合上述解析约定,将无法识别出"友好"名称。

# 缓解措施

组织可以通过在 Microsoft Teams 管理中心中,在"用户" -> "外部访问"下管理外部访问的相关选项来降低此漏洞带来的风险。

![alt text](https://assets.kitploit.com/production/public/readmes/6252/cc6c2bbf7e6c11997a47b0b38259fea96278543ae5477ed1367caf5a88479850.jpg)

Microsoft 为组织提供了灵活性,使其能够选择最适合自身需求的权限,包括全局阻止以及仅将特定外部租户加入白名单以进行通信。

![alt text](https://assets.kitploit.com/production/public/readmes/6252/dcaf730f7c522bfcf4e11800631f663550315079570778aee78784164e22aabe.jpg)

# 更新日志  
## v1.2
合并了来自 DenSecure 团队的拉取请求,该请求包含一个有效的(截至 2024 年 2 月 7 日)外部用户启动屏幕绕过方法。

对 TeamsPhisher 工作流程的修改非常微小且易于集成。在创建包含目标用户的群组聊天并发送消息后,会额外发起一个请求,将目标用户从群组聊天中移除。这会导致用户收到消息时不会出现外部用户启动屏幕。

更新 README,增加了关于 TeamsPhisher 当前使用的技术的更多最新信息。

## v1.1.2
修复了用户报告的上传附件到 Sharepoint 时出现的错误;该问题源于用户对其租户使用自定义域名时产生的命名/重命名约定。

添加了一个验证检查,以确保如果用户使用的是非 @domain.onmicrosoft.com 的域名,他们还需要使用 `-s` 开关手动指定其 Sharepoint 站点以避免问题。

更新了设置部分,建议用户在使用 TeamsPhisher 前至少登录一次 Sharepoint,因为用户发现若之前未登录过该账户会导致 TeamsPhisher 失败。

在 `getSenderInfo` 的 Web 请求中添加了 `&top=999` 参数,以增加每次检索的用户数量,减少查找用户所需的请求次数。

### 回滚对解析用户名中 '.' 以组装 Sharepoint URI 的更改
v1.1 更改了解析包含 '.' 字符的用户名以生成所需 Sharepoint URI 的方式。当时存在几个独立的问题,我错误地将其中一个问题的原因归结于此。此更改已被回滚。结果是,像 [email protected] 这样的用户名,现在组装 Sharepoint URI 时会被处理为 `tom_jones_mytest_onmicrosoft_com` 而不是 `tom.jones_mytest_onmicrosoft_com`。

## v1.1.1
少量修复

## v1.1
在未递增版本号的情况下,进行了一些提交以解决各种小问题;对此表示抱歉。

v1.1 带来了一些更改,旨在解决用户经常遇到的几个常见问题。

### -s, --sharepoint 参数
添加了这个可选参数,使用户可以手动指定其 Sharepoint 根名称。一个常见问题是用户更改了其租户域名为自定义域名时;例如,用户名原本是 [email protected],现在可能变成了 [email protected]。TeamsPhisher 的原始版本通过解析发件人用户信息中的 UPN 来组装 Sharepoint 地址和所需的 URI 路径。当租户域名更改为自定义域名时,用户的 UPN 会随之改变。然而,租户的 Sharepoint 地址将始终保持不变(即租户最初创建时的地址)。

我未能找到一种好的方法来自动解析租户当前的 Sharepoint 地址;使用 Graph API 可以轻松实现,但在此工具中集成 Graph 需要用户进行大量额外设置。我选择提供手动指定 Sharepoint 名称的选项作为最简单的解决方案。

### 改进了在不使用手动选项时对 Sharepoint 地址和所需 URI 的解析
有用户报告,即使其租户未使用自定义域名,仍然收到 Sharepoint 相关的 404 未找到错误。我认为这与他们的用户名包含 '.' 有关,例如 [email protected]。TeamsPhisher 的先前版本使用简单的查找和替换功能来根据用户的 UPN 组装所需的 Sharepoint URI,而 v1.1 现在会专门定位需要替换的 '.' 字符,并保留用户名中其他 '.' 字符不变。

### 消息正文中的特殊字符(例如 'ö')不再导致服务器错误
这是一个非常简单但花费了很长时间才追踪到的修复。在 `sendFile` 的 POST 请求中添加了 utf-8 编码。现在消息中可以使用特殊字符。

### 少量代码清理
修复了一些注释,并重新调整了 main 函数中的步骤顺序,使其在尝试认证之前先检查所需文件是否存在。

## v1.0 - 初始版本

# 致谢与鸣谢

1. JUMPSEC 的 Max Corbridge (@CorbridgeMax) 和 Tom Ellson (@tde_sec) 撰写的 [这篇文章](https://labs.jumpsec.com/advisory-idor-in-microsoft-teams-allows-for-external-tenants-to-introduce-malware/)。特别感谢 Max 回复迅速并愿意私下讨论他的研究。

2. Andrea Santese (@Medu554) [进行的这项研究](https://posts.inthecyber.com/leveraging-microsoft-teams-for-initial-access-42beb07f12c4)。再次特别感谢他的及时回复以及愿意私下讨论他的工作。

3. SSE 的 Bastian Kanbach (@_bka_) 开发的 [TeamsEnum](https://github.com/sse-secure-systems/TeamsEnum)。该项目作为检索 Bearer 令牌和通过不同方法进行认证的起点。我之前曾使用 Graph API 实现这些目的,但他的项目(以及本项目)使用的是普通端点,所以很高兴有人已经解决了这些问题并提供了可靠的函数来完成这些任务。

4. @pfiatde 撰写的 [关于 Teams 钓鱼的系列文章(多部分)](https://badoption.eu/blog/2024/01/12/teams5.html)。其博客在 TeamsPhisher 的初始开发过程中被参考,当前版本的工具使用了他在后续研究中发布的新启动屏幕绕过方法。

5. DenSecure 的 Steve Nelson (@stevesec128) 和 Alex Martirosyan (@almartiros) 对 Teamsphisher 的更新(2024 年 2 月 7 日),该更新整合了 @pfiatde 发布的仍然有效的启动屏幕绕过方法。

6. [这个用于生成 ASCII 文本的网站](https://patorjk.com/software/taag/#p=display&f=Graffiti&t=Type%20Something%20)

7. [这个将图像转换为 ASCII 艺术的疯狂项目](https://github.com/TheZoraiz/ascii-image-converter)
下载工具