您的密码…稍等…并非总是加密的
警告:本文中提到的技术和工具可能已过时,不适用于当前情况。然而,这篇博客仍可作为学习机会,并可能更新或集成到现代工具和技术中。
作为渗透测试员,我们热爱密码——它们形式多样。一个好的密码应包含16个以上字符,混合大小写、数字和特殊字符,使计算机需要多年才能暴力破解。尽管这些密码可能难以破解,但事实证明,当您知道在哪里查找时,它们很容易被访问且未加密。
使用密码登录系统可能看起来不是最性感的黑客技术,但我们可以通过向组织展示在渗透测试中查找和使用密码造成严重破坏的容易程度,为客户提供巨大价值。以下是一些快速简便的方法,我们用来在渗透测试中收集密码——包括截图,以便您也可以尝试!记住,许多用户会重复使用密码,因此这些收集的密码可能解锁其他账户。哦——如果您真的想破坏我们的乐趣,请实施双因素认证。这是击败(或至少减缓)此类攻击的唯一方法之一。
Mimikatz(获取这里)
密码必须存储在计算机的内存(RAM)中,以便操作系统能够验证用户输入的密码。由于存储在RAM中的信息看起来像这样…
…找到哪些1和0的块代表密码并不直接。幸运的是,一些聪明人为我们解决了这个问题,并创建了工具从这个巨大的数据块中提取密码。
其中一个工具是Benjamin Delpy创建的Mimikatz。它可以在活动的Windows系统上执行,针对离线内存转储,或从远程站点下载并仅在内存中执行(非常隐蔽)。或者,正如渗透测试中常见的情况,它可以通过流行的Metasploit Meterpreter执行。
首先,我们将展示如何使用在外部机器和内部目标之间设置的Meterpreter会话来执行此操作。Meterpreter命令Mimikatz将提取并显示目标机器内存中当前驻留的明文Windows密码。这可能甚至包括缓存的域密码。
- 设置一个监听器,目标机器可以连接回。
- 连接回监听器。
- 建立meterpreter会话。
- 查找以SYSTEM身份运行的进程的进程ID。
- 迁移到SYSTEM进程。
现在,拥有SYSTEM权限,我们可以要求Meterpreter使用两个简单命令从内存中读取:“load Mimikatz”和“wdigest”,它将尽职地返回它在内存中找到的所有密码。
- 执行Mimikatz。
使用一个独立的测试机器和一个虚拟账户,我们只看到一个账户凭据,但域连接的机器可能会产生其他凭据。
Mimikatz也可以用于内存转储,更具体地说,是管理访问Windows系统的进程lsass.exe的内存转储。在Windows Vista及更高版本的系统上,您可以使用内置的任务管理器转储进程内存。在较早的系统上,您可以使用Sysinternals的工具procdump。您需要管理员权限才能执行此操作,因为它从内存读取,使这种方法在渗透测试中不太有用,但仍然是一个方便的技巧。
- 在较新版本的Windows上,使用任务管理器转储RAM。
- 注意文件保存的位置。
- 在较旧的Windows系统上,使用procdump转储RAM。
然后运行Mimikatz,从其界面中,您再次只需两个简单命令即可从内存转储中提取密码。
- 加载Mimikatz
- 将Mimikatz指向转储文件并要求密码。
接下来,让我们直接在Windows工作站上运行Mimikatz以提取当前驻留在内存中的密码。对于此测试,我们运行一个完全打补丁的Windows 7机器,未加入域。
首先从这里下载可执行文件。如果您运行了防病毒软件,它可能会对此下载感到不安,因此您必须允许/白名单它。
然后只需从命令行运行Mimikatz,并给出几个命令,如下所示。
- 执行Mimikatz以从实时系统(而不是内存转储)提取密码。
最后,让我们使用单个PowerShell命令下载Mimikatz并仅在内存中运行(无文件保存在磁盘上)并转储内存驻留密码。用于此的PowerShell脚本由Joseph Bialek创建,可以在这里找到。要运行此命令,您需要打开管理员命令提示符(右键单击cmd.exe并“以管理员身份运行”)。然后发出从Web服务器获取PowerShell脚本并执行它的命令,如下所示。
- 运行一个简单的Web服务器来提供PowerShell脚本。
- 启动PowerShell,下载然后调用Invoke-Mimikatz脚本。
Lazagne(获取这里)
Lazagne是Alessandro Zanni编写的一个相对较新的工具,可以转储在Windows和Linux/Unix机器上找到的许多不同密码。它能够从保存在浏览器中的Web应用程序以及邮件客户端、Wi-Fi配置、数据库、聊天客户端等中提取密码。如果以管理员权限运行,它还可以转储Windows密码哈希,然后可以破解或用于传递哈希类型的攻击。
- 只需运行可执行文件(以管理员身份以获得更好结果)以提取密码。
Windows Credential Editor – WCE(获取这里)
WCE是一个较旧但仍 functional 的工具,旨在使系统管理员的密码管理更容易。但当然,攻击者和渗透测试员也可以使用此工具。它必须以管理员权限运行,再次,在渗透测试中不理想,但有时仍然可能。
- Windows Credential Editor从内存中转储密码。
Group Policy Preferences – GPP
直到最近(确切地说是2014年5月),Windows中有一个称为Group Policy Preferences的功能,允许系统管理员创建和管理其负责的系统上的本地管理员账户。这对于繁忙的管理员很方便,因为它允许远程和批量更改密码。GPP将配置项(如本地管理员账户密码)存储在磁盘上的文件中,实际密码使用良好、强大的AES加密加密。密码的解密密钥对于所有Windows安装都是相同的,并且任何人都可以在Microsoft网站上访问。这意味着任何有权访问GPP文件的人都可以从Microsoft获取密钥并解密文件中包含的密码。轻而易举。Microsoft在2014年通过移除通过GPP机制包含密码管理的选项修补了此问题,然而,任何在补丁之前存在且未移除的旧GPP文件可能仍包含有效的管理员密码。我们在渗透测试中经常找到此类文件,令人惊讶的是,密码通常仍然有效!
您可以通过找到存储这些文件的文件,然后将加密字符串传递给Ruby脚本gpp-decrypt来获取这些密码。还有一个Metasploit后期利用模块gpp,可以一步收集和解密。两种方法都在下面的屏幕截图中演示。
请注意,对这些GPP XML文件的读取访问不需要提升权限。
- 查找包含加密管理员密码的文件的命令。
- 使用这里找到的Ruby脚本解密密码。
- Metasploit的GPP模块将收集和解密密码。
提示:一旦您知道本地管理员凭据,使用Metasploit模块smb_login查找在域上其他可能使用该账户的地方。
其他轻松获胜的想法
这里还有一些其他提示,您可能运气好。用户(和计算机)将密码存储在一些有趣的地方:
- 搜索公共数据泄露以查找已发布的密码或哈希。
- 查找存储在用户桌面上的密码文件。
- 检查用户剪贴板的内容——它可能包含最后剪切和粘贴的密码。
如果您有其他提取明文密码的想法,我们很乐意听取。发送电子邮件至sally (at) blackhillsinfosec (dot com)。谢谢!
参考文献
- http://metasploit.com/modules/post/windows/gather/credentials/gpp
- https://github.com/PowerShellMafia/PowerSploit/blob/master/Exfiltration/Get-GPPPassword.ps1
- http://www.ampliasecurity.com/research/windows-credentials-editor/
- www.metasploit.com
- https://github.com/gentilkiwi/releases/tag/2.0.0-alpha-20160112
- https://github.com/clymb3r/PowerShell/tree/master/Invoke-Mimikatz
- https://download.sysinternals.com/files/Procdump.zip
- https://github.com/AlessandroZ/LaZagne
评论
DFIR_Zach - 2016年5月23日 @ 11:07 am
还要提到,使用Volatility(mimikatz插件)针对活动或死亡盒子的内存映像也会给您所有用户的明文密码。
Sally - 2016年5月23日 @ 12:08 pm
好点DFIR_Zach!虽然在渗透测试中不太常见找到完整的RAM映像…但它可能发生。正如DFIR_Zach指出的,Volatility还集成了一个Mimikatz插件,用于从完整内存映像中提取明文密码。如果由于某种原因无法安装独立的Mimikatz,Volatility的Mimikatz插件也可以尝试在活动系统上使用,尽管它需要Python在机器上。谢谢!