github里的默认域_渗透基础——域内用户口令策略的获取

2afc112f3af7e08d9affbdbb9e2ee01b.gif

ef12061462089f238ef5c8a613412e48.png0x00 前言

在域渗透中,我们在口令爆破前需要先获得域内用户的口令策略,以免在口令爆破时锁定用户。

站在防御的角度,需要识别出口令爆破的攻击行为并采取防御措施。

本文将要介绍获取域内用户口令策略的常用方法,结合利用思路分享检测域用户口令爆破的方法。

8da56fbfd125e36d4666c61611d26ed8.png0x01 简介

本文将要介绍以下内容:

· 修改域用户口令策略的方法

· 域外获取域用户口令策略的方法

· 域内获取域用户口令策略的方法

· 检测方法

8da56fbfd125e36d4666c61611d26ed8.png0x02 基础知识

我们需要关注以下口令策略:

· Maximum password age,表示密码过期的时间,默认为42

· Minimum password length,表示密码的最小长度,默认为7

· Account lockout duration,表示被锁定的帐户在自动解锁前保持锁定的分钟数,默认为30

· Account lockout threshold,表示导致用户帐户被锁定的失败登录尝试次数,默认为5

· Reset account lockout counter after,表示失败登录尝试计数器重置为0次错误登录尝试之前,失败登录尝试后必须经过的分钟数,默认为30

8da56fbfd125e36d4666c61611d26ed8.png0x03 修改域用户口令策略的方法

域用户的口令策略默认保存在域内的默认组策略(Default Domain Policy)中,guid为{31B2F340-016D-11D2-945F-00C04FB984F9}

在域控制器上打开Group Policy Management,找到当前域,选择Default Domain Policy,右键选择编辑,如下图:

fa1619410245fec68b54d5ebe51bef42.png

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

b1882c88272459746a7a67dc03cdc414.png

根据提示修改对应的选项。

修改以后可以选择立即更新组策略使其立即生效,命令行输入:

gpupdate

8da56fbfd125e36d4666c61611d26ed8.png0x04 域外获取域用户口令策略的方法

1.Kali系统通过ldapsearch获取域用户口令策略

测试环境如下图:

c9e781ff325cb4e424a9eb5d4e6f8a04.png

前提:我们能够访问到域控制器(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是为了只显示出同密码策略相关的项。

输出结果如下图:

589b4cb30d4ce4da9dcce2fb4c1f47ed.png

包括以下需要的信息:

· 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获取域用户口令策略

测试环境如下图:

4dd939742582bd15e8644ca3806c7528.png

前提:我们能够访问到域控制器(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

输出结果如下图:

356d7428a0f221df8ed194cfe5695b84.png

3.Windows系统通过域共享文件获取域用户口令策略

测试环境同上。

域用户的口令策略保存在域内的默认组策略(Default Domain Policy)中,guid为{31B2F340-016D-11D2-945F-00C04FB984F9}

这里可以通过通过访问域内共享文件夹\SYSVOL进行查看。

前提:需要提供域用户的凭据。

这个测试环境中,我们获得了域内普通用户testa的口令为DomainUser123!

通用位置为:\\

测试环境的位置为:\\192.168.1.1\SYSVOL\test.com\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\MACHINE\Microsoft\Windows NT\SecEdit\GptTmpl.inf

输出结果如下图:

afc386a9aa50220f6a1443507589c920.png

8da56fbfd125e36d4666c61611d26ed8.png0x05 域内获取域用户口令策略的方法

前提是已经获得了域内一台主机的权限。

测试环境如下图:

6bfe120b9fe5abb954b9a58861c70eb2.png

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对用户的口令策略进行查询。

输出结果如下图:

e349182f1e12046fdc80909c02e8c769.png

3.通过域共享文件获取域用户口令策略

通用位置为:\\

测试环境的位置为:\\test.com\SYSVOL\test.com\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\MACHINE\Microsoft\Windows NT\SecEdit\GptTmpl.inf

8da56fbfd125e36d4666c61611d26ed8.png0x06 检测方法

域用户的属性中包括两个有用的信息:

· badPwdCount,记录用户口令错误的次数

· lastbadpasswordattempt,记录上次口令输入错误的登陆时间

我们在检测时可以通过查询这两个属性来识别是否遭受口令爆破的攻击,具体方法如下:

1.直接在域控制器上查询

Powershell代码如下:

Get-ADUser -Filter * -Properties *| select name,lastbadpasswordattempt,badpwdcount|fl

输出结果如下图:

24be81c1b7eecfeebf0844c8a9339600.png

2.在域内普通用户登录的主机上

(1)使用powerview

Get-NetUser | select name,badpasswordtime,badpwdcount

输出结果如下图:

4c92b899c9648fac253c620cdd000525.png

(2)使用c++

https://github.com/3gstudent/Homework-of-C-Language/blob/master/CheckUserBadPwdPolicy.cpp

输出结果如下图:

96fa0e16f632ccb141880a3f01814516.png

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"

输出结果如下图:

fa7bd3549bb0c9e9b480bf3c91217660.png

8da56fbfd125e36d4666c61611d26ed8.png0x07 小结

本文列举了获取域内用户口令策略的常用方法,介绍了如何在多种环境下识别出口令爆破的行为。

本文为 3gstudent 原创稿件,授权嘶吼独家发布

9e723a9a24aa7471150f536fa77aa823.png

e0c826ae5d5ec70255aa717f0137c1e4.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值