发布于2022年11月8日3年前 0x00 前言 在域渗透中,我们需要在密码爆炸前获取域内用户的密码策略,避免密码爆炸时锁定用户。 从防御的角度,需要对出口订单爆炸的攻击行为进行认定,并采取防御措施。 本文将介绍获取域内用户密码策略的常用方法,分享利用ideas检测域内用户密码爆炸的方法。 0x01 简介 本文将介绍以下内容: 一种修改域用户密码策略的方法 一种获取域外域用户密码策略的方法 在域中获取域用户密码策略的方法 检测方法 0x02 基础知识 我们需要注意以下密码策略: 最长密码期限,即密码过期的时间。默认值为42。 最小密码长度,即密码的最小长度。默认值为7。 帐户锁定持续时间,这意味着锁定的帐户在自动解锁之前将保持锁定的分钟数。默认值为30。 帐户注销阈值,指示导致用户帐户被锁定的失败登录尝试的次数。默认值为5。 帐户锁定计数器after表示在登录尝试失败后,在登录尝试失败计数器重置为0次错误登录尝试之前必须经过的分钟数。默认值为30。 0x03 修改域用户口令策略的方法 该域的密码策略默认保存在该域的默认域策略中,guid为{ 31 b2f 340-016d-11 D2-945 f-00 c 04 FB 984 f 9 } 在域控制器上打开组策略管理,找到当前域,选择默认域策略,右键选择编辑,如下图所示。 打开计算机配置-策略-windows设置-安全设置-帐户策略,如下图所示 根据提示修改相应的选项。 修改后,您可以选择立即更新组策略以使其立即生效。命令行输入: gpupdate 0x04 域外获取域用户口令策略的方法 1.Kali系统通过ldapsearch获取域用户口令策略 测试环境如下 前提:我们可以访问域控制器(DC)的389端口,并且我们已经获得了域中至少一个普通用户的密码。 在这个测试环境中,我们获得了域中普通用户testa的密码DomainUser123! 连接命令如下: LDAP search-x-H LDAP://192 . 168 . 1 . 1:389-D ' CN=testa,CN=Users,DC=test,DC=com' -w DomainUser123!-b 'DC=test,DC=com ' | grep replUpToDateVector-A 13 参数描述: -x表示简单身份验证 -H服务器地址 -D用于绑定服务器的DN。 -w绑定DN的密码 -b指定要查询的根节点。 使用grep命令过滤输出结果,grep replUpToDateVector -A 13是只显示与密码策略相关的条目。 输出结果如下 包括以下所需信息: maxPwdAge: -3628800000000 最小长度:10 锁定持续时间:-18600000000 锁定阈值:15 锁定观察窗口:-18600000000 换算成秒,除以1000000。 例如: (1)maxPwdAge: -3628800000000 36288000000000/10000000=3628800s 3628800/86400=42d maxPwdAge=42d (2)锁定持续时间:-18600000000 -18600000000/10000000=1860s 1860/60=31米 锁定持续时间=31m 2.Windows系统通过PowerShell获取域用户口令策略 测试环境如下 前提:我们可以访问域控制器(DC)的389端口,并且我们已经获得了域中至少一个普通用户的密码。 在这个测试环境中,我们获得了域中普通用户testa的密码DomainUser123! 这里需要Active Directory,这是一个powershell模块。 不需要专门安装powershell模块Active Directory,调用Microsoft.ActiveDirectory.Management.dll就可以解决。 微软。ActiveDirectory.Management.dll是在安装powershell模块Active Directory后生成的,我已经解压并上传到github: https://github.com/3gstudent/test/blob/master/Microsoft.ActiveDirectory.Management.dll 此外,您需要使用凭证信息,因此完整的Powershell命令如下所示: $uname='testa ' $ pwd=convert to-secure string ' domain user 123!'-AsPlainTextForce $ cred=新对象系统。management . automation . PS credential($ uname,$pwd) 导入模块。\微软。ActiveDirectory.Management.dll get-ADDefaultDomainPasswordPolicy-Server 192 . 168 . 1 . 1-Credential $ cred-Verbose 输出结果如下 3.Windows系统通过域共享文件获取域用户口令策略 测试环境同上 该域的密码策略保存在域内的默认域策略中,guid为{ 31 b2f 340-016d-11 D2-945 f-00 c 04 FB 984 f 9 } 您可以通过访问域中的共享文件夹\SYSVOL来查看它。 前提:需要域用户的凭证。 在这个测试环境中,我们获得了域中普通用户testa的密码DomainUser123! 一般位置是:\ \ sysvol \ \ policies \ { 31 b2f 340-016d-11 D2-945 f-00 c 04 FB 984 f 9 } \ machine \ Microsoft \ windows nt \ secedit \ gpttmpl . INF。 测试环境的位置是:\ \ 192 . 168 . 1 . 1 \ sysvol \ test.com \ policies \ { 31 b2f 340-016d-11 D2-945 f-00 c 04 FB 984 f 9 } \ machine \ Microsoft \ windows nt \ secedit \。 输出结果如下 0x05 域内获取域用户口令策略的方法 前提是你获得了域内某个主机的权限。 测试环境如下 1.通过PowerShell获取域用户口令策略 导入模块。\微软。ActiveDirectory.Management.dll get-ADDefaultDomainPasswordPolicy 2.通过c++获取域用户口令策略 使用API NetUserModalsGet获取域用户的密码策略。 user _ modal _ info _ 0结构保存全局密码信息。 user _ modal _ info _ 3结构保存锁定信息。 参考资料: https://docs . Microsoft . com/en-us/windows/win32/API/lmaccess/nf-lmaccess-netusermodalsget?重定向自=MSDN 根据参考资料中的编码,增加查询用户锁定信息的功能。代码已经上传到github,地址如下: https://github . com/3g student/home-of-C-Language/blob/master/getdomainpasswordpolicy . CPP 该代码使用结构USER_MODALS_INFO_0和USER_MODALS_INFO_3来查询用户的密码策略。 输出结果如下 ###3.通过域共享文件获取域用户密码策略 一般位置是:\ \ sysvol \ \ policies \ { 31 b2f 340-016d-11 D2-945 f-00 c 04 FB 984 f 9 } \ machine \ Microsoft \ windows nt \ secedit \ gpttmpl . INF。 测试环境的位置是:\ \ test.com \ sysvol \ test.com \ policies \ { 31 b2f 340-016d-11 D2-945 f-00 c 04 FB 984 f 9 } \ machine \ Microsoft \ windows nt \ secedit \ gpttmpl . INF 0x06 检测方法 在用户的属性中有两条有用的信息: BadPwdCount,记录用户密码错误的次数。 Lastbadpasswordattempt,记录上次密码输入错误的登录时间。 在检测时,我们可以查询这两个属性来识别我们是否受到密码爆炸攻击。具体方法如下: 1.直接在域控制器上查询 Powershell代码如下: get-ADUser-Filter *-Properties * |选择名称,lastbadpasswordattempt,badpwdcount|fl 输出结果如下 2.在域内普通用户登录的主机上 (1)使用powerview Get-NetUser |选择名称,badpasswordtime,badpwdcount 输出结果如下 (2)使用c++ https://github . com/3g student/home-of-C-Language/blob/master/checkuserbadpwdpolicy . CPP 输出结果如下 3.在域外的kali系统上 (1)使用ldapsearch LDAP search-x-H LDAP://192 . 168 . 1 . 1:389-D ' CN=testa,CN=Users,DC=test,DC=com' -w DomainUser123!-b ' DC=测试,DC=com '-b ' DC=测试,DC=com ' '((对象类=用户)(对象类别=人))' | grep-E ' cn:| badPwdCount | badPasswordTime ' 输出结果如下 注: 如果密码输入正确,badPwdCount将被清除。 0x07 小结 列举了获取域内用户密码策略的常用方法,介绍了在各种环境下如何识别出口订单爆炸的行为。 留下回复
创建帐户或登录后发表意见