密码安全问题一直都受到个人和企业的关注。对于个人而言,或许仅仅只是个人隐私的被公开,而对于企业而言则可能会是灾难性的。为了避免出现这种情况,越来越多的企业都开始使用一些不可逆,且强度高的加密算法来加密其账户密码。但一些安全意识薄弱的企业或个人,仍在使用可逆加密存储其账户密码。一旦使用可逆加密,即使你的密码设置的非常长也可以被攻击者轻易的破解。
说到破解,Hashcat绝对是我的首选工。我可以一边开着Hashcat,一边做其它的事情。可能只需几分钟,几个小时或短短的几天,Hashcat就能为我得到我想要的一切!
Hashcat的工作原理也很简单。首先,它会获取潜在的密码(例如Autumn2018)并计算其哈希值。然后,Hashcat将新计算的代表Autumn2018的哈希值,与你给出的哈希值列表进行比较。如果找到一个或多个匹配项,则表示这些帐户使用的密码为Autumn2018。
好了,话不多说!下面进入我们的正题。
这一切都始于从域控中提取哈希值。通常我们需要先将权限提升为域管并登录到域控才能获取到这些文件。但在某些特殊情况下,可能会存在一个可供较低权限帐户访问的备份文件,该文件包含Active Directory(AD)数据库。
由于当前的AD数据库出于活动运行状态,因此我们无法复制该文件(使用时会被系统锁定)。为此,我创建了一个VSS快照并将ntds.dit文件与包含提取哈希所需的BOOTKEY的SYSTEM注册表hive一起复制。我通常使用内置的ntdsutil命令来执行此操作,如下所示:
然后,我们可以使用Impacket secretsdump Python脚本来从数据库中提取哈希值。
secretsdump.py -system SYSTEM -ntds ntds.dit LOCAL -outputfile breakme
我原本只想获取包含NTLM哈希值的*.NTDS文件。但在测试中我意外的发现,脚本还会输出了扩展名为“.CLEARTEXT”的文件。
secretsdump脚本使用outputfile参数指定,将所有哈希写入前缀为“breakme”的文件。在这个过程中我们发现了NTLM哈希,cleartext哈希,以及Kerberos 密钥。在“CLEARTEXT”文件中包含了相关用户的明文密码,其中包括几个长度为128个字符的密码!
说实话,做了这么多的测试任务这是我头一次碰到这种情况。文件中包含的用户账户和相应的密码一目了然,没有任何的加密保护措施!我立即检查了其中的一些账户(呵呵~其中竟有一个域管理员的账户),经过验证域管的账户密码为真实可用密码!经过一番调查,我了解到至少有几种不同的机制会强制存储明文凭据。
注:Cleartext(明文)并不意味着密码就是按原样存储。它们一般会使用RC4加密形式存储。而用于加密和解密的密钥是SYSKEY,它被存储在注册表中,可以由域管理员提取。这意味着哈希值可逆为明文,因此我们称它为“可逆加密”。
对于使用可逆加密存储密码的帐户,Active Directory用户和计算机(ADUC)中的帐户属性,会显示使用可逆加密存储密码的复选框。如下所示:
你可以使用以下PowerShell命令,来查询AD活动目录中UserAccountControl属性中设置了可逆加密标志的任何用户:
Get-ADUser -Filter ‘useraccountcontrol -band 128’ -Properties useraccountcontrol | Format-Table name, samaccountname,useraccountcontrol
那么,为什么要支持这种不安全的可逆加密存储呢?答案是为了满足某些应用程序的需要。因此,微软为需要知道用户密码值的应用程序提供了一种机制,就是强制存储可逆加密的密码,以便对用户进行身份验证。我所知道的需要可逆加密的应用程序是MS CHAP, SASL Digest身份验证,需要对Windows域进行身份验证的旧版MacOS主机。也很可能还有其他一些我不知道的,第三方应用程序也需要用到。
以下是微软关于该设置的最佳实践提示:
- 即使它需要域管理员使用上面的方法,从Active Directory数据库中提取哈希值,也意味着DA(或被盗取的DA帐户)可以轻松地学习其他用户的密码。这违反了不可否认原则。不可否认性的目的是为解决有关事件或行为是否发生过纠纷,而对涉及被声称事件或行为不可辩驳的证据进行收集、维护和使其可用并且证实。
- 我们经常发现包含VSS快照的备份可以访问AD数据库。备份文件通常可由较低权限的帐户访问,甚至是所有的域用户。在这种情况下,任何域用户都可以轻松访问,使用可逆加密存储的任何帐户密码。
下面,我来分解下之前那条使用PowerShell从AD中提取使用可逆加密存储密码用户的命令。
Get-ADUser -Filter ‘useraccountcontrol -band 128’ -Properties useraccountcontrol | Format-Table name, samaccountname,useraccountcontrol
Get-ADUser – 是Active Directory PowerShell模块中的cmdlet,默认情况下安装在Windows Server 2008 R2及更高版本上。可以使用Import-Module命令导入它。
Filter – 使用PowerShell表达式告诉cmdlet搜索参数是什么。这里,我们搜索的是具有特定UserAccountControl属性值的用户帐户。
你也可以使用LDAPFilter,它与Filter是相同的,但使用的是LDAP查询语法。查找所需UserAccountControl值的正确语法如下:
Get-ADUser -LDAPFilter “(&(objectCategory=Person)(UserAccountControl:1.2.840.113556.1.4.803:=128))” -Properties useraccountcontrol | Format-Table name,samaccountname
useraccountcontrol -band 128
AD中的UserAccountControl属性是与用户帐户的设置相关联的属性,长度为32位。每个位代表有关该用户帐户的特定设置。例如,当帐户被禁用时,第二个低位被设置为“1”。在可逆加密的情况下,将第8个低位设置为“1”。第8个低位对应于十进制值128。
要访问其中特定位的值,必须使用逻辑位级操作。了解有关更多按位操作的信息,请点击这里(或此处)查看。在我们的示例中,-band 128表示使用值为128的按位AND运算,来确定其是否设置了第8个低位(无论在32位数内设置了哪些其它位)。
如果使用LDAPFilter,则可以通过LDAP语法1.2.840.113556.1.4.803来指定按位操作。通过指定值128,我们请求返回第8个低位设置为“1”的所有记录。
Properties useraccountcontrol
由于Get-ADUser命令检索不包含UserAccountControl属性的默认属性集,因此必须使用-Properties参数在结果中明确进行询问。
Format-Table name, samaccountname,useraccountcontrol
Format-Table命令将告诉PowerShell格式化输出以及要显示的属性。如果你希望结果垂直列出而不是以表格的形式列出,那么你可以使用Format-List命令。
当然,你也可以将结果全部输出到一个文件中….
Get-ADUser -Filter ‘useraccountcontrol -band 128’ -Properties useraccountcontrol | Format-Table name, samaccountname,useraccountcontrol | Out-File -Encoding ascii MyOutput.txt
- 上一篇:变种XSS:持久控制
- 下一篇:Linux应急响应(三):挖矿病毒
猜你还喜欢
- 07-08八年专业安全团队承接渗透入侵维护服务
- 08-06SQLMAP的注入命令以及使用方法
- 08-03白帽故事汇:网络安全战士从来不是「男生」的专利
- 07-27编辑器漏洞手册
- 07-12web安全之如何全面发现系统后台
- 02-22常见Web源码泄露总结
- 07-25网站后台登陆万能密码
- 07-23破解emlog收费模板“Begin”
- 01-12批量检测SQL注入
- 01-22Apache Solr远程代码执行漏洞(CVE-2017-12629)从利用到入侵检测
- 随机文章
-
- WordPress Plugin AutoSuggest插件SQL注入复现与分析
- 一次被防火墙拦截的挖矿病毒应急处置经历
- 总结回望 | MS08-067漏洞的十年回顾
- 恶意文档执行命令提取工具:CMD Watcher
- Struts2-005远程代码执行漏洞分析
- AI和网络安全工作的未来
- CVE-2018-19518:PHP imap_open函数任意命令执行漏洞复现
- 漏洞分析:解析Windows XP版永恒之蓝中的一个Bug
- FilesLocker2.1圣诞特别版勒索病毒与早期版本解密工具
- 挖洞经验 | Facebook CDN服务器的XSS漏洞
- Sodium:一个提供加密、解密、签名等功能的软件库
- 漏洞预警 | ThinkPHP5远程命令执行漏洞
- Windows 0day任意文件覆盖漏洞分析与验证
- SCAT:信令收集和分析工具
- 详细讲解 | 利用python开发Burp Suite插件(一)
- CVE-2018-13024复现及一次简单的内网渗透
- Springboot之actuator配置不当的漏洞利用
- 技术讨论 | 在HTTP协议层面绕过WAF
- Web应用程序防火墙(WAF)bypass技术(三)
- 路由器漏洞挖掘之栈溢出入门(一)
- 热门文章
-
- 八年专业安全团队承接渗透入侵维护服务
- Emlog黑客站模板“Milw0rm”发布
- Stuxnet纪录片-零日 Zero.Days (2016)【中文字幕】
- SQLMAP的注入命令以及使用方法
- 白帽故事汇:网络安全战士从来不是「男生」的专利
- 编辑器漏洞手册
- web安全之如何全面发现系统后台
- 常见Web源码泄露总结
- 渗透测试培训(第五期)
- 深入理解JAVA反序列化漏洞
- cmseasy前台无需登录直接获取敏感数据的SQL注入(有POC证明)
- 网站后台登陆万能密码
- 黑麒麟2016渗透培训系列教程
- 破解emlog收费模板“Begin”
- 那些强悍的PHP一句话后门
- Android平台渗透测试套件zANTI v2.5发布(含详细说明)
- 渗透工具BackTrack与KaliLinux全套视频教程
- Python列为黑客应该学的四种编程语言之一 初学者该怎么学
- CVE-2017-11882漏洞复现和利用
- 恶意程序报告在线查询工具
文章存档
- 2021年3月(4)
- 2020年12月(4)
- 2020年11月(5)
- 2020年10月(8)
- 2020年9月(8)
- 2020年8月(20)
- 2020年7月(47)
- 2020年6月(70)
- 2020年5月(41)
- 2020年4月(21)
- 2020年3月(120)
- 2020年2月(26)
- 2019年12月(12)
- 2019年11月(13)
- 2019年10月(17)
- 2019年9月(15)
- 2019年8月(13)
- 2019年7月(15)
- 2019年6月(15)
- 2019年5月(19)
- 2019年4月(23)
- 2019年3月(19)
- 2019年2月(11)
- 2019年1月(29)
- 2018年12月(24)
- 2018年11月(56)
- 2018年10月(79)
- 2018年9月(20)
- 2018年8月(17)
- 2018年7月(16)
- 2018年6月(7)
- 2018年5月(10)
- 2018年3月(6)
- 2018年2月(2)
- 2018年1月(11)
- 2017年11月(18)
- 2017年10月(6)
- 2017年9月(8)
- 2017年8月(7)
- 2017年7月(7)
- 2017年6月(15)
- 2017年5月(30)
- 2017年4月(7)
- 2017年3月(1)
- 2017年2月(4)
- 2017年1月(1)
- 2016年12月(3)
- 2016年11月(7)
- 2016年10月(6)
- 2016年9月(6)
- 2016年8月(102)
- 2016年7月(24)
- 2013年7月(1)
- 文章标签
-