跳转到帖子
  • 游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

    赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

    TheHackerWorld官方

穿透基本3354域用户的密码永不过期属性


Tenfk

推荐的帖子

0x00 前言

在域环境中,域用户的凭证是非常重要的信息。为了增强安全性,域组策略将设置所有域用户密码的最大有效时间,并强制用户在过期时间后更改密码。

在实际环境中,有些域用户需要设置自己的密码永不过期,可以通过添加密码永不过期属性来实现。

在域渗透中,我们需要枚举密码永不过期的域用户,我们还需要能够设置密码永不过期的域用户。

从防御的角度来看,我们需要尽量减少密码永不过期的域用户的数量,我们还需要能够实时掌握域用户的列表。

因此,本文将介绍不同条件下枚举、添加和删除密码永不过期属性的多种方法、分析原理和开源代码。

0x01 简介

本文将介绍以下内容:

实现原则

枚举密码设置为永不过期的用户。

指定向用户添加“密码永不过期”属性的方法。

为用户指定删除“密码永不过期”属性的方法。

0x02 实现原理

域用户的密码永不过期属性保存在域用户的userAccountControl属性中。

userAccountControl属性由一个数字表示,它是几个特定属性的值的总和。

每个特定属性对应一个不同的值。请参考:https://support . Microsoft . com/en-us/help/305144/how-to-use-user account control-to-manipulate-user-account-properties。

下面是一个例子:

用户test1的userAccountControl属性的值为514,因此该用户的具体属性如下:

帐户禁用,2

普通_账户,512

计算方法是2 512=514

添加密码永不过期属性的方法:

永不过期密码属性的对应值是65536(DONT _过期_密码),因此您可以将65536加到用户帐户控制属性514的值上,并将其设置为66048。

注:

在程序设计中,为了可重用,采用的方法是与65536进行按位或运算(运算符|)。

按位或运算的运算规则:参与运算的两个数按二进制位进行或运算。只要对应的二进制位中有一位是1,结果位就是1;否则为0。

删除密码永不过期属性的方法:

将userAccountControl的属性值减去65536。

注:

在程序设计中,为了可重用,采用的方法是与65536进行按位异或运算(运算符)。

按位异或运算的运算规则:参与运算的两个数按二进制位进行异或。如果两个对应的位相同,则结果为0;否则为1。

查看密码永不过期属性的方法:

userAccountControl的属性值是所有数值之和,所以我们无法通过简单的加减运算计算出userAccountControl的属性值是否包含65536。

这可以通过按位AND运算(运算符)来实现。

按位and运算的运算规则:参与运算的两个数按二进制位进行“与”运算,只有当两个数的二进制位同时为1时,结果才为1,否则为0。

查看密码永不过期属性的计算方法:

userAccountControl属性的值与65536进行按位AND运算。如果结果是65536,则意味着密码永远不会过期。

0x03 枚举密码设置为永不过期的用户

在域控制器上,我们可以通过Active Directory用户和计算机查看每个域用户的帐户属性,可以看到用户的密码是否设置为永不过期,如下图所示。

2-1.png

下面介绍不同环境下的枚举方法。

1.从域内进行枚举的方法

(1)Windows系统使用Powershell ActiveDirectory模块

命令示例:

导入模块ActiveDirectory

search-ad account-password never expires | FT Name

或者:

导入模块ActiveDirectory

get-ADUser-filter *-properties Name,PasswordNeverExpires |其中{$_。password never expires-eq ' true ' } | FT Name

(2)Windows系统使用PowerView

https://github . com/powershell mafia/PowerSploit/blob/master/Recon/power view . PS1

命令示例:

显示指定用户的属性:

导入模块。\PowerView.ps1

get-net user test1 | select user account control | convert from-UAC value

如下图

2-2.png

筛选出所有符合条件的用户:

导入模块。\PowerView.ps1

ForEach($User in (Get-NetUser))

{

if(($ user . user account control-band 65536)-eq 65536)

{

写入输出user . Sam account name

}

}

(3)Windows系统使用C#实现

使用命名空间系统。目录服务,详细代码已上传至github,地址如下:

https://github。com/3g student/howork-of-C-Sharp/blob/master/List _ password永不过期_ user _ by LDAP。铯

如果使用当前用户的凭据,需要将代码目录条目de=新目录条目(' LDAP://' args[0],args[1],args[2]);替换为目录条目de=新目录条目(' LDAP://' args[0]);

测试如下图

2-3.png

(4)Kali系统通过ldapsearch枚举

命令示例:

LDAP搜索-x-H LDAP://192。168 .1 .1:389-D ' CN=testa,CN=Users,DC=test,DC=com' -w DomainPassword123!-b ' DC=测试,DC=com ' '((对象类=用户)(对象类别=人))' grep用户帐户控制

测试如下图

2-4.png

获取用户帐户控制属性值后再同65536做按位与运算,获得最终结果

2.从域外进行枚举的方法

(1)Windows系统使用Powershell ActiveDirectory模块

命令示例:

导入模块。\微软ActiveDirectory。Management.dll

$uname='test1 '

$ pwd=转换为安全字符串“域密码123!”-AsPlainTextForce

$ cred=新对象系统管理。自动化。PS证书(uname,$pwd)

搜索广告账户服务器192。168 .1 .1-Credential $ cred-Verbose-密码永不过期| FT Name

或者:

导入模块。\微软ActiveDirectory。Management.dll

$uname='test1 '

$ pwd=转换为安全字符串“域密码123!”-AsPlainTextForce

$ cred=新对象系统管理。自动化。PS证书(uname,$pwd)

获取用户服务器192。168 .1 .1-Credential $ cred-filter *-属性名称,PasswordNeverExpires |其中{$_。密码永不过期-eq ' true ' } | FT Name

注:

域控制器默认安装ActiveDirectory模块,微软ActiveDirectory。Management.dll在安装powershell模块活动目录后生成,我已经提取出来并上传至github:

https://github.com/3gstudent/test/blob/master/Microsoft.ActiveDirectory.Management.dll

对于未安装活动目录模块的系统,可以通过如下命令导入活动目录模块:

导入模块。\微软ActiveDirectory。Management.dll

(2)Windows系统使用PowerView

https://github。com/powershell mafia/powers loit/blob/master/Recon/power view。PS1

命令示例:

导入模块. PowerView.ps1

$uname='test1 '

$ pwd=转换为安全字符串“域密码123!”-AsPlainTextForce

$ cred=新对象系统管理。自动化。PS证书(uname,$pwd)

$ Users=Get-net user-Domain测试。com’-域控制器192。168 .1 .1-凭证$ cred

ForEach($User in $Users)

{

if(($ user。用户帐户控制-频带65536)-eq 65536)

{

写入输出$用户。Sam帐户名

}

}

(3)Windows系统使用C#实现

使用命名空间系统。目录服务,详细代码已上传至github,地址如下:

https://github。com/3g student/howork-of-C-Sharp/blob/master/List _ password永不过期_ user _ by LDAP。铯

0x04 向指定用户添加密码永不过期属性的方法

有以下两种实现方法:

1 .用户帐户控制属性值同65536作按位或运算(运算符|)

2 .用户帐户控制属性值直接加上65536

为了能够重复使用,以下方法均使用同65536作按位或运算的方法实现

1.从域内实现

(1)使用dsmod命令

命令实例:

dsmod用户CN=testc,CN=Users,DC=test,DC=com' -pwdneverexpires是

(2)使用Powershell ActiveDirectory模块

命令实例:

set-ADUser-Identity testc-password永不过期$ true

(3)使用PowerView

命令实例:

set-ad object-Sam帐户名testc-属性名用户帐户控制-PropertyXorValue 65536

(4)C#实现

使用命名空间系统。目录服务,详细代码已上传至github,地址如下:

https://github。com/3g student/howork-of-C-Sharp/blob/master/Add _ password永不过期_ user _ by LDAP。铯

2.从域外实现

(1)使用Powershell ActiveDirectory模块

命令实例:

导入模块。\微软ActiveDirectory。Management.dll

$uname='管理员'

$ pwd=转换为安全字符串“域密码123!”-AsPlainTextForce

$ cred=新对象系统管理。自动化。PS证书(uname,$pwd)

设置用户服务器192。168 .1 .1-Credential $ cred-Identity testc-password永不过期$ true

(2)使用PowerView

命令实例:

$uname='管理员'

$ pwd=转换为安全字符串“域密码123!”-AsPlainTextForce

$ cred=新对象系统管理。自动化。PS证书(uname,$pwd)

$ Users=Get-net user-Domain ' test . com '-Domain controller 192 . 168 . 1 . 1-Credential $ cred

set-ad object-Domain ' test . com '-Domain controller 192 . 168 . 1 . 1-Credential $ cred-Sam account name testc-property name user account control-PropertyXorValue 65536

(3)C#实现

使用命名空间系统。目录服务,详细代码已经上传到github,地址如下:

https://github . com/3g student/Homework-of-C-Sharp/blob/master/Add _ password never expires _ user _ by LDAP . cs

测试下图

3-1.png

0x05 向指定用户删除密码永不过期属性的方法

有两种方法可以实现这一点:

1.1.userAccountControl的属性值是与65536(运算符)的按位异或运算

2.userAccountControl属性值直接减去65536

具体方法和0x04类似,不再赘述。

0x06 小结

介绍了域用户具有密码永不过期的特性,分析了枚举、添加和删除属性的原理,介绍了不同情况下的各种实现方法,以及开源的c#实现代码。

留下回复

链接帖子
意见的链接
分享到其他网站

黑客攻防讨论组

黑客攻防讨论组

    You don't have permission to chat.
    • 最近浏览   0位会员

      • 没有会员查看此页面。
    ×
    ×
    • 创建新的...