掌握权限?破解那些哈希值!
Joff Thyer //
Black Hills Information Security 热爱为客户执行内部渗透测试以及命令与控制测试。得益于行业内众多优秀研究人员的努力,我们很幸运能在许多环境中提升权限、横向移动,并展示对敏感数据的访问。
作为渗透测试人员,我们必须始终以展示业务风险为首要目标。因此,我经常说,在Windows Active Directory世界中,“域管理员”并不是一切。事实上,支持这一观点的是,我多次因为枚举/发现的本地管理权限而在环境中横向移动,甚至仅使用令牌模拟来模仿正常业务用户,以展示对数据的访问。我需要获取域管理员权限吗?完全不需要。这类行为会让试图保护核心资产的高管们吓坏吗?当然会!
我们通常通过以下方法获得本地权限提升:
- 配置错误的服务账户
- 未加引号的服务路径名
- 无人值守安装XML文件
- 组策略首选项XML文件
- DLL劫持
- MSI安装的“始终提升”注册表键
- Kerberoasting——感谢Tim Medin!!!
- 密码喷洒
在最近的测试中,我发现Kerberoasting仍然非常有效,但方式不同。一个有趣的攻击路径是喷洒你首先通过Kerberoasting或其他本地机器提升发现的密码。令人惊讶的是,系统管理员多次重复使用密码,并没有意识到在不同特权账户之间重复使用密码是一个非常糟糕的主意。
尽管如此,让我们面对现实,没有什么比最终获得完全域管理访问权限更令人兴奋的了。虽然它不能直接展示业务风险,但它确实让你感到一阵刺痛,随后是你快乐的“获得root”舞蹈。(是的,承认吧……你们都有“获得root”舞蹈)。我可爱的妻子总是知道我中大奖了,因为我的办公室在厨房旁边,发生时我会大声咯咯笑。
好了,在你通过任何方式获得域管理员账户后,你可以做很多事情。其中之一是执行“增值服务”,即获取完整的域账户哈希值,并让你的“hashcat”旗帜尽情飘扬。是的,破解那些哈希值,看看你能实际获得多少凭证的百分比。在这个过程中,你会把你摇滚的视频GPU水冷破解杰作变成一个小型空间加热器,在几天内使用大约3000瓦的电力……但哦,结果的美丽!当然,完成后你应该使用Carrie的域密码审计工具生成一个格式精美的HTML报告。通常,在一个组织中,破解超过70%的哈希值并不罕见。
现在我要说到重点了……提取哈希值可能是危险的!!!为什么?嗯,我们许多人在糟糕的旧日子里习惯于在Metasploit项目中使用“hashdump”或“smart_hashdump”(感谢Carlos……https://www.darkoperator.com/blog/2011/5/19/metasploit-post-module-smart_hashdump.html)。虽然这些都是可爱、编写良好的软件,但两种方法在域控制器上都会尝试从LSASS.EXE进程中提取哈希值。在一个小环境中,你可能没问题。然而,有时你在一个拥有20,000到100,000或更多凭证的环境中操作。如果你在这种规模的环境中捣乱LSASS.EXE,你很可能会崩溃一个域控制器,这是次优的。
我们如何处理这种情况?如果我们能直接访问NTDS.DIT、SAM和SYSTEM文件并复制数据,那将非常好。这很有效,因为Core Security的人们在Impacket存储库中有一个名为“secretsdump.py”的Python脚本,使我们能够直接从数据库和注册表文件中获取哈希值。
下一个问题是……我们究竟如何访问这些文件?在运行的域控制器上,它们是锁定的文件,所以你不能直接进入“%SYSTEMROOT%\SYSTEM32”目录并复制文件。嗯,技术上不准确,你可以在“%SYSTEMROOT%\SYSTEM32\CONFIG”目录中找到SAM和SYSTEM的备份,并且很可能在卷影副本中找到这些文件。唉,即使你找到了这些文件,它们也可能已经过时一天或一周。
Windows域控制器上有一个很棒的工具叫“NTDSUTIL.EXE”。NTDSUTIL工具用于访问和管理Windows活动目录数据库。该工具通常只应由经验丰富的系统管理员使用,但也有这个美妙的渗透测试用例。
警告:这个工具很强大。除非使用你自己的实验室系统,否则不要随意试验NTDSUTIL。它会直接与活动目录数据库交互,你可能会破坏域。
从渗透测试的角度来看,NTDSUTIL的好处是你可以以完全安全的方式在“IFM”媒体模式下创建完整的活动目录备份。一旦你这样做了,剩下的就是将文件复制到你需要的哈希提取和破解位置。这种方法的优点是安全且相对隐蔽地获取数据,用于你的“增值服务”破解哈希值。这种方法的缺点是某些活动目录数据库很大,通常有几百兆字节或千兆字节。一般来说,我发现如果你创建一个加密的ZIP,base64编码,然后下载结果,外泄效果相当好。
具体来说,当使用NTDSUTIL时,我们执行以下操作:
- 将活动实例设置为“NTDS”
- 进入“IFM”媒体创建模式
- 创建完整备份到指定目录路径
- 退出IFM,然后退出NTDSUTIL
NTDSUTIL通常是一个文本菜单驱动的过程,但是,可以直接在CMD.EXE命令行上指定每个命令,如下所示:
C:> ntdsutil “ac in ntds” “ifm” “cr fu c:\TEMP\AD” q q
最重要的是要意识到,上面指定的“C:\TEMP\AD”目录必须存在,必须是一个空目录,并且必须有足够的空闲磁盘空间来保存完整数据库。另一件重要的事情是你必须有一个管理账户才能执行此操作。
通常,我更喜欢不使用远程桌面协议,而是使用WMIC启动所需的NTDSUTIL命令。其中一个挑战是你在构建命令时会遇到古老的引号转义挑战。
假设你的目标域控制器是10.10.10.10。你可以做的是映射一个驱动器到域控制器,创建你的目录来存储结果,并调用WMIC来运行你的NTDSUTIL命令。
假设你驻留在环境中的常规工作站上,以下命令序列应该可以完成任务。
C:> NET USE Z: \10.10.10.10\C$ /USER:DOMAIN\Administrator C:> MKDIR Z:\TEMP\AD C:> WMIC /NODE:10.10.10.10 /USER:DOMAIN\Administrator /PASSWORD:XXXXX process call create “cmd.exe /c "ntdsutil "ac in ntds" "ifm" "cr fu c:\TEMP\AD" q q\””
你可以在NTDSUTIL完成时使用命令检查进度。可能需要一段时间,特别是如果活动目录环境很大。
C:> DIR /S Z:\TEMP\AD
完成后,你的工作是使用ZIP加密压缩结果文件(SYSTEM、SAM和NTDS.DIT),可选地base64编码,并将结果下载到你控制的Linux系统。
然后可以使用IMPACKET的secretsdump脚本提取所有哈希值,格式适合用“hashcat”破解,如下所示:
$ python secretsdump.py -system SYSTEM -security SECURITY -ntds NTDS.DIT -outputfile outputfilename LOCAL
成功外泄数据后,请确保清理你在域控制器上的混乱。我建议执行以下操作:
C:> Z: Z:> CD \TEMP\AD Z:\TEMP\AD> RD /S /Q “Active Directory” Z:\TEMP\AD> RD /S /Q “Registry” Z:> C: C:> NET USE Z: /DELETE
如果你正在使用的本地工作站有足够的驱动器空间,另一个选项是从你的系统创建一个共享,并将该共享挂载到域控制器上。随后,你将在该共享上创建一个空目录,并使用类似的NTDSUTIL命令创建数据库备份,路径为此路径。
在提取哈希值时遵循这种方法的最大优点是,你不会通过任何DLL注入危及LSASS.EXE进程,因此不会冒域控制器崩溃的风险。
另一个潜在的方法是滥用域控制器复制功能与“DCSYNC”。如果你想阅读有关内容,请参考Harm Joy的博客http://www.harmj0y.net/blog/redteaming/mimikatz-and-dcsync-and-extrasids-oh-my/。
祝狩猎愉快。