【使用说明】SharpExchangeKing

摘要:针对本地 Windows Exchange Server 的 SharpExchangeKing 版本已经编写完成。

0x00 前言

针对本地 Windows Exchange Server 的 SharpExchangeKing 版本已经编写完成。

主界面如下所示:
ExchangeKing.png

SharpExchangeKing 的功能依次如下所示:

  1. 基本信息收集
  2. 邮箱账户枚举
  3. 邮箱账号密码暴力破解
  4. 一些在获取邮箱账号后的操作,主要是针对邮箱文件夹的设置,比如委派
  5. 检测委派
  6. 根据搜索条件对邮件进行下载
  7. 浏览共享

特别提醒:要想使用以上功能,在输入 Target 后,必须选择点击 GoGoGo,并且是通过获取基本信息后,才能正常使用,否则无法使用。在 Target 有更改时,也必须重新点击 GoGoGo。

PS:我也不清楚为什么 Defender 会将 SharpExchangeKing 标记为特洛伊木马。并且使用 DefenderCheck 检测是正常的。

0x01 Info 模块

该模块主要是获取以下信息:

  1. 服务器所在内网域的域名及 Windows Server 版本,是根据之前编写的 NTLMSSP 解析工具。
  2. 获取 Exchange 发行版本信息,包含了发行时间。
  3. 尝试获取 Exchange 服务器内网 IP。
  4. 从 SSL 证书中获取一些数据,这个数据可以辅助判断该目标是否是我们要打的。
  5. 根据发行时间跟漏洞修补时间对比得出可能存在的漏洞。

效果如下所示:
info.png

当在本地 ExchangeReleaseVersion.data 文件中找不到版本数据时,会前往微软官网获取 Exchange 的版本数据。因此,此时确保当前网络可访问 https://learn.microsoft.com/en-us/exchange/new-features/build-numbers-and-release-dates?view=exchserver-2019

PS:在 Windows 7 下,程序不支持访问上述链接。

0x02 Mailbox 模块

模块说明:该模块主要是验证输入的邮箱用户是否存在。当前,该模块提供了 3 个可选择的方法,它们分别是:

方法 描述 缺点
SMTP - 对输入的用户名有要求,需要提供完整的邮箱名,比如 rcoil@rowteam.lab
- 狗都不用
- 如果目标邮服配置了 Catch-all 邮箱,则 SMTP 无法使用。
- 不支持多线程
OWADate - 支持 rcoil@rowteam.lab 用户名格式
- 仅输入用户名 rcoil,则在请求时默认是 rowteam\rcoil
- 成功验证写入 owadate_success.txt
- OWA 接口存在 MFA 时,则 OWADate 无法使用。
- 对网络条件要求,得多尝试几次
- 有些环境仅支持单种格式,两种格式需要反复尝试
EASDate - 支持 rcoil@rowteam.lab 用户名格式
- 仅输入用户名 rcoil,则在请求时默认是 rowteam\rcoil
- 成功验证写入 easdate_success.txt
- 对网络条件要求,得多尝试几次
- 有些环境仅支持单种格式,两种格式需要反复尝试

以上三种方法都支持批量,将需要检测的用户写入文件即可。以下是使用 EASData 的测试结果:
mail.png

0x03 Pwd Brute 模块

模块说明:该模块为密码爆破,目前仅支持 EWS 接口的验证,且该接口支持 NLTM 验证,成功验证写入 brute_success.txt。

账号密码混杂组合支持 5 种模式:

模式 写入说明
单个账号单个密码 UserName 和 PassWord 分别填写账号密码即可。
单个账号多个密码 UserName 填写账号,PassWord 填写包含密码的本地文本路径。
多个账号单个密码 UserName 填写包含账号的本地文本路径,PassWord 填写密码。
多个账号多个密码 UserName 填写包含账号的本地文本路径,PassWord 填写包含密码的本地文本路径。
批量验证账号密码 UserName 填写包含账号密码的本地文本路径,格式必须为“用户名:密码”。

PS:如果以上的密码是 NTLM 格式,则勾选 NTLM,不支持明文和 NTLM 同时使用。

pass.png

0x04 Setting 模块

模块说明:粗略的充当一个权限维持的作用。主要是对当前邮箱的收信箱做转发及委派访问权限。

界面大致如下所示:
set.png

使用说明:

  • Auto:必须为 “username:password” 格式。该字段支持批量、
  • Value1:根据 Funtion 选择。必须是 username 的邮箱名,比如当前登陆的是 rcoil,它的用户邮箱名为 rcoil@rowteam.me
  • Value2:根据 Funtion 选择对应值。

这个模块当前支持 8 个函数功能,它们分别是:

方法 描述
GetMailLists 从全局地址簿获取邮箱账号数据,成功则输出到 MaiLists.txt 文件
GetInboxRules 读取用户 Value1 规则信息,从返回结果中能够获得规则对应的 RuleID。
AddForwardToRecipients 创建用户 Value1 转发邮件至用户 Value2 的规则。
DelForwardToRecipients 根据 RuleID 删除用户 Value1 的指定转发规则。
GetInboxPermissions 查看用户 Value1 收件箱的访问权限。
AddDelegateEditorToInboxPermissions 添加用户 Value2 对用户 Value1 收件箱的完全访问权限。
RemoveDelegateEditorToInboxPermissions 移除用户 Value2 对用户 Value1 收件箱的访问权限。
UpdateFolderDefaultToPermissions 设置所有用户都可以访问 username 的所有邮件。

它们都是只能作用自身,无法为他人设置转发及委派。

0x05 CheckDelegate 模块

模块说明:主要是针对 UpdateFolderDefaultToPermissions 方法中的设置进行一个检测。如果成功检测出,那么就可以在 MailStore 模块中读取相应邮件文件夹的邮件。

  • Query 支持单个/多个邮箱用户

check.png

  • Query 支持文件

check-1.png

检测出来什么文件夹可访问,那么就可以读取相对应的文件夹。如果检测出 msgfolderroot,那么,可访问所有邮件。

在输入正确的邮箱,有些环境可能会提示 The SMTP address has no mailbox associated with it.也就是 SMTP 地址没有与其关联的邮箱,具体原因未明。这个问题在 MailStore 同意存在。

0x06 MailStore 模块

模块说明:可读取当前用户的所有邮件,也可读取受委派的邮箱的邮件。

Value 输入框支持两种模式:

  • 基于时间区间:格式为 2020/05/26-2023/06/02
  • 基于关键字:格式为 VPN,密码,多个关键字以逗号隔开

Delegete 输入框支持两种格式:

  • 直接输入单个或多个邮箱名称,多个邮箱以逗号隔开
  • 支持文件列表

store-1.png

  • 仅下载附件

store-2.png

  • 读取委派用户的邮箱

store-3.png

关键字同理,就不演示了。

0x07 BroseShare 模块

模块说明:当已知文件共享的 UNC 路径,且当前用户可访问时,可使用该模块浏览共享内的文件,并且支持下载。

share-1.png

当然,如果当前用户权限足够的话,也可以访问很多的东西,如下图:
share-2.png

支持右键下载及双击下载。该模块存在一个问题:太大的文件无法下载,这个大小的值未验证具体是多少,但 100M 以内的肯定可以下载。

0x08 免责声明

本工具仅面向合法授权的企业安全建设行为,例如企业内部攻防演练、漏洞验证和复测,如您需要测试本工具的可用性,请自行搭建靶机环境。

在使用本工具进行检测时,您应确保该行为符合当地的法律法规,并且已经取得了足够的授权。请勿对非授权目标使用。

如您在使用本工具的过程中存在任何非法行为,您需自行承担相应后果,我们将不承担任何法律及连带责任。

RcoIl Alipay
!坚持技术分享,您的支持将鼓励我继续创作!