

渗透基础——域内用户口令策略的获取
source link: https://3gstudent.github.io/3gstudent.github.io/%E6%B8%97%E9%80%8F%E5%9F%BA%E7%A1%80-%E5%9F%9F%E5%86%85%E7%94%A8%E6%88%B7%E5%8F%A3%E4%BB%A4%E7%AD%96%E7%95%A5%E7%9A%84%E8%8E%B7%E5%8F%96/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

0x00 前言
在域渗透中,我们在口令爆破前需要先获得域内用户的口令策略,以免在口令爆破时锁定用户
站在防御的角度,需要识别出口令爆破的攻击行为并采取防御措施
本文将要介绍获取域内用户口令策略的常用方法,结合利用思路分享检测域用户口令爆破的方法。
0x01 简介
本文将要介绍以下内容:
- 修改域用户口令策略的方法
- 域外获取域用户口令策略的方法
- 域内获取域用户口令策略的方法
0x02 基础知识
我们需要关注以下口令策略:
- Maximum password age,表示密码过期的时间,默认为42
- Minimum password length,表示密码的最小长度,默认为7
- Account lockout duration,表示被锁定的帐户在自动解锁前保持锁定的分钟数,默认为30
- Account lockout threshold,表示导致用户帐户被锁定的失败登录尝试次数,默认为5
- Reset account lockout counter after,表示失败登录尝试计数器重置为0次错误登录尝试之前,失败登录尝试后必须经过的分钟数,默认为30
0x03 修改域用户口令策略的方法
域用户的口令策略默认保存在域内的默认组策略(Default Domain Policy)中,guid为{31B2F340-016D-11D2-945F-00C04FB984F9}
在域控制器上打开Group Policy Management
,找到当前域,选择Default Domain Policy
,右键选择编辑,如下图

依次打开Computer Configuration
->Policies
->Windows Settings
->Security Settings
->Account Policies
,如下图

根据提示修改对应的选项
修改以后可以选择立即更新组策略使其立即生效,命令行输入:
gpupdate
0x04 域外获取域用户口令策略的方法
1.Kali系统通过ldapsearch获取域用户口令策略
测试环境如下图

前提:我们能够访问到域控制器(DC)的389端口,并且我们至少已经获得了域内一个普通用户的口令
这个测试环境中,我们获得了域内普通用户testa
的口令为DomainUser123!
连接命令如下:
ldapsearch -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: -36288000000000
- minPwdLength: 10
- lockoutDuration: -18600000000
- lockoutThreshold: 15
- lockOutObservationWindow: -18600000000
换算成以秒为单位要除以10000000
(1)maxPwdAge: -36288000000000
36288000000000/10000000=3628800s
3628800/86400=42d
maxPwdAge=42d
(2)lockoutDuration: -18600000000
-18600000000/10000000=1860s
1860/60=31m
lockoutDuration=31m
2.Windows系统通过PowerShell获取域用户口令策略
测试环境如下图

前提:我们能够访问到域控制器(DC)的389端口,并且我们至少已经获得了域内一个普通用户的口令
这个测试环境中,我们获得了域内普通用户testa
的口令为DomainUser123!
这里需要使用powershell模块Active Directory
这里不必专门安装powershell模块Active Directory,可以通过调用Microsoft.ActiveDirectory.Management.dll的方式解决
Microsoft.ActiveDirectory.Management.dll在安装powershell模块Active Directory后生成,我已经提取出来并上传至github: https://github.com/3gstudent/test/blob/master/Microsoft.ActiveDirectory.Management.dll
此外,还需要使用凭据信息,所以完整的Powershell命令如下:
$uname="testa"
$pwd=ConvertTo-SecureString "DomainUser123!" -AsPlainText –Force
$cred=New-Object System.Management.Automation.PSCredential($uname,$pwd)
import-module .\Microsoft.ActiveDirectory.Management.dll
Get-ADDefaultDomainPasswordPolicy -Server 192.168.1.1 -Credential $cred -Verbose
输出结果如下图

3.Windows系统通过域共享文件获取域用户口令策略
测试环境同上
域用户的口令策略保存在域内的默认组策略(Default Domain Policy)中,guid为{31B2F340-016D-11D2-945F-00C04FB984F9}
这里可以通过通过访问域内共享文件夹\SYSVOL进行查看
前提:需要提供域用户的凭据
这个测试环境中,我们获得了域内普通用户testa
的口令为DomainUser123!
通用位置为:\\<DOMAIN Controller IP>\SYSVOL\<DOMAIN>\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\MACHINE\Microsoft\Windows NT\SecEdit\GptTmpl.inf
测试环境的位置为:\\192.168.1.1\SYSVOL\test.com\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\MACHINE\Microsoft\Windows NT\SecEdit\GptTmpl.inf
输出结果如下图

0x05 域内获取域用户口令策略的方法
前提是已经获得了域内一台主机的权限
测试环境如下图

1.通过PowerShell获取域用户口令策略
import-module .\Microsoft.ActiveDirectory.Management.dll
Get-ADDefaultDomainPasswordPolicy
2.通过c++获取域用户口令策略
使用API NetUserModalsGet
来获取域用户的口令策略
结构体USER_MODALS_INFO_0
保存全局密码信息
结构体USER_MODALS_INFO_3
保存锁定信息
参考资料:
https://docs.microsoft.com/en-us/windows/win32/api/lmaccess/nf-lmaccess-netusermodalsget?redirectedfrom=MSDN
根据参考资料中的代码,添加查询用户锁定信息的功能,代码已上传至github,地址如下:
https://github.com/3gstudent/Homework-of-C-Language/blob/master/GetDomainPasswordPolicy.cpp
代码分别使用结构体USER_MODALS_INFO_0
和USER_MODALS_INFO_3
对用户的口令策略进行查询
输出结果如下图

###3.通过域共享文件获取域用户口令策略
通用位置为:\\<DOMAIN>\SYSVOL\<DOMAIN>\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\MACHINE\Microsoft\Windows NT\SecEdit\GptTmpl.inf
测试环境的位置为:\\test.com\SYSVOL\test.com\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\MACHINE\Microsoft\Windows NT\SecEdit\GptTmpl.inf
0x06 检测方法
域用户的属性中包括两个有用的信息:
- badPwdCount,记录用户口令错误的次数
- lastbadpasswordattempt,记录上次口令输入错误的登陆时间
我们在检测时可以通过查询这两个属性来识别是否遭受口令爆破的攻击,具体方法如下:
1.直接在域控制器上查询
Powershell代码如下:
Get-ADUser -Filter * -Properties *| select name,lastbadpasswordattempt,badpwdcount|fl
输出结果如下图

2.在域内普通用户登录的主机上
(1)使用powerview
Get-NetUser | select name,badpasswordtime,badpwdcount
输出结果如下图

(2)使用c++
https://github.com/3gstudent/Homework-of-C-Language/blob/master/CheckUserBadPwdPolicy.cpp
输出结果如下图

3.在域外的kali系统上
(1)使用ldapsearch
ldapsearch -x -H ldap://192.168.1.1:389 -D "CN=testa,CN=Users,DC=test,DC=com" -w DomainUser123! -b "DC=test,DC=com" -b "DC=test,DC=com" "(&(objectClass=user)(objectCategory=person))"|grep -E "cn:|badPwdCount|badPasswordTime"
输出结果如下图

注:
如果口令输入正确,那么badPwdCount会被清零
0x07 小结
本文列举了获取域内用户口令策略的常用方法,介绍了如何在多种环境下识别出口令爆破的行为。
Recommend
-
8
非扫描式定位攻击域内SQL Server DM_ ·
-
29
域内渗透基本技巧 碧云涛 ·...
-
11
导出当前域内所有用户hash的技术整理 三好学生
-
47
MySQL用户和权限在MySQL中有一个系统自身就带有的数据库叫MySQL,数据库装好以后系统自带了好几个数据库MySQL就是其中过一个,MySQL数据库有个用户账户权限相关的表叫user表,在其中就有创建的用户。MySQL中完整的用户名是由用户+主机名形成,主机名决定了这个用户...
-
23
渗透基础——Exchange用户邮箱中的隐藏文件夹 0x00 前言 对于Exchange用户邮箱,可通过设置文件夹属性创建隐藏文件夹,用户使用owa网页登录和使用Outlook均无法查看隐藏文件夹中的内容。 站在渗透测试的角度,我们...
-
10
0x00 前言 在上篇文章《Mimilib利用分析》提到mimilib可作为WinDbg的插件进行使用,所以本文将会详细介绍这个插件的用法,实现从...
-
11
0x00 前言 在域渗透中,活动目录信息的获取必不可少 本文将要以获取活动目录中所有用户、所有计算机和所有组为例,介绍常用的信息获取方法 0x01 简介 本文将要介绍以下内容: 域外获取活动目录信息...
-
16
0x00 前言 PPTP(即点对点隧道协议)可以使远程用户通过拨入ISP访问企业内网。 在渗透测试中,如果获得了用户的PPTP口令,就能远程拨入内网,做进一步渗透。 本文将要介绍命令行下导出PPTP配置信息和口令的方法,开源PPTP口令爆破...
-
9
渗透基础——活动目录信息的获取2:Bypass AV 11 Jan 20210x00 前言 在之前的文章
-
20
域渗透——利用DCSync导出域内所有用户hash的方法 14 Jul 20210x00 前言 在之前的文章《域渗透——DCSync》曾系统的整理过DCSync的利用方法,本文将要针...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK