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

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

    TheHackerWorld官方

穿透基础——域用户通过LDAP协议暴力破解密码


KaiWn

推荐的帖子

0x00 前言

在域渗透中,如果已经掌握了部分域用户的密码,通常会选择寻找密码规则,生成字典文件,尝试暴力破解其他域用户的密码。

从防御的角度来说,既要保证域用户不使用正规的弱密码,又要能够发现暴力破解域用户密码的行为。

本文将介绍域内外暴力破解域用户密码的常用方法,并结合利用思路介绍检测方法。

0x01 简介

本文将介绍以下内容:

一种通过域暴力破解域用户密码的方法

域外暴力破解域用户密码的方法

检测方法

0x02 暴力破解域用户口令需要注意的问题

多次密码输入错误会导致用户账号被锁定,默认错误号为5。

用户账号锁定后,默认需要30分钟才能恢复使用。

将记录最后一次密码输入错误的时间,这不能通过修改LDAP数据来清除。提示如下:

错误0x209A不允许访问该属性,因为该属性由安全帐户管理器(SAM)拥有。

用户账号被锁定后,即使输入了正确的密码,也会提示密码错误。

0x03 域内暴力破解域用户口令的方法

1.获得域内用户的口令策略,避免帐户被锁定

获取密码策略的详细方法请参考之前的文章《渗透基础——域内用户口令策略的获取》。

2.获得所有域用户的列表

详细获取方法请参考之前的文章《渗透基础——活动目录信息的获取》。

这里需要判断用户的属性,去除禁用和锁定的用户。

(1)识别被禁用的用户

标识用户是否被禁用的位置位于userAccountControl属性中,具体位置为0x0002。

如下图

1-1.png

参考资料:

https://support . Microsoft . com/en-us/help/305144/how-to-use-user account control-to-manipulate-user-account-properties

使用PowerView查看所有用户的ACCOUNTDISABLE属性。该命令如下所示:

Get-NetUser |选择名称,useraccountcontrol

输出结果如下

1-2.png

检查指定用户ACCOUNTDISABLE属性的具体值,命令如下:

get-net user test 2 | select user account control | convert from-UAC value-ShowAll

输出结果如下

1-3.png

可以获得的用户test2具有以下属性:

帐户禁用

普通_账户

DONT _到期_密码

(2)识别被锁定的用户

尽管用户的ACCOUNTDISABLE属性中的偏移量0x0010被标记为锁定,如下图所示

1-4.png

但是,此位置的值不能用于确定当前用户是否被锁定。

我们可以通过读取用户的badPwdCount属性和lockoutTime属性来判断。

使用PowerView查看所有用户的badPwdCount属性和lockoutTime属性。该命令如下所示:

Get-NetUser | select name,badPwdCount,lockoutTime

输出结果如下

1-5.png

显然,可以发现用户testa被锁定。

3.使用DomainPasswordSpray进行口令爆破

地址:

https://github.com/dafthack/DomainPasswordSpray

原理:通过ADSI(活动目录服务接口)尝试LDAP查询,得到结果。

例子如下:

invoke-domain passwordspray-UserList。\ users . txt-密码域用户123!-冗长

输出结果如下

2-1.png

注:

DomainPasswordSpray支持过滤用户、获取所有用户列表以及排除禁用和锁定用户的功能。

该命令如下所示:

get-domain userlist-remove disabled-RemovePotentialLockouts

在我的测试环境(dc:Server2012R2)中,这个函数有一个bug,我无法识别锁定的用户testa。

如下图

2-2.png

实际上,用户testa的状态是锁定的,如下图所示。

2-3.png

2-4.png

个人猜测导致bug的原因如下:

DomainPasswordSpray确定用户是否被用户的ACCOUNTDISABLE属性中的偏移量0x0010(标记为LOCKOUT)锁定。对应的代码位置是:https://github . com/dafthack/domainPasswordSpray/blob/master/domainPasswordSpray . PS1 # L408。

在我的测试环境中,我得出的结论是,我们不能用这个值来判断。正确的做法是用badPwdCount属性和lockoutTime属性来标识。

0x04 域外暴力破解域用户口令的方法

1.Kali系统通过ldapsearch暴力破解域用户口令

之前的文章《渗透基础——活动目录信息的获取》介绍了kali系统下使用ldapsearch连接LDAP服务器的方法。

这里你可以简单的添加一个循环来实现暴力破解。完整的bash命令如下:

for I in $(cat test . txt);do echo-e ' \ n $ I ';LDAP search-x-H LDAP://192 . 168 . 1 . 1:389-D ' CN=' $ I ',CN=Users,DC=test,DC=com' -w DomainUser123!-b ' DC=测试,DC=com ' | grep ' # numEntrie ';完成的

Test.txt保存所有用户名,如果密码正确则输出查询结果数,如果密码错误则返回身份验证错误:LDAP _ bind:invalid credentials(49)

输出结果如下

3-1.png

成功通过暴力破解了用户testb的密码。

2.Windows系统通过Invoke-DomainPasswordSprayOutsideTheDomain暴力破解域用户口令

DomainPasswordSpray的功能比较全,但是不支持域外使用,所以我在DomainPasswordSpray的基础上做了一些修改,使其支持域外使用。

修改的具体位置如下:

在原始版本中,修改LDAP查询语句:

$DomainContext=新对象系统。directory services . activedirectory . directory context(' Domain ',$Domain)

$DomainObject=[System。directory services . activedirectory . domain]:get domain($ domain context)

$ current Domain=' LDAP://'([ADSI]' LDAP://$ Domain ')。distinguishedName

替换LDAP的查询语句,例如:' 192 . 168 . 1 . 1/DC=测试,DC=com '

最终完整的查询语句是:LDAP://192.168.1.1/DC=test,DC=com。

因为域外的暴力破解无法获取域用户的密码策略,所以我在DomainPasswordSpray中去掉了获取密码策略的功能。

我已经将修改后的代码上传到github,地址如下:

https://github . com/3g student/home-of-Powershell/blob/master/Invoke-domain passwordsprayoutsidethedomain . PS1

域外使用的命令示例如下:

invoke-Domain passwordsprayoutsidethedomain-Domain ' 192 . 168 . 1 . 1/DC=test,DC=com' -UserList。\ user . txt-密码域User123!-冗长

输出结果如下

4-1.png

0x05 利用思路

1.域内暴力破解域用户口令

流程如下:

(1)获得域内用户的口令策略

根据lockoutThreshold的值,确定防止帐户被锁定的尝试次数。

(2)获得域用户列表

列出所有域用户后,需要判断用户的属性,去掉禁用和锁定的用户。

(3)尝试破解

2.域外暴力破解域用户口令

如果已经获取了用户的密码,可以先读取域内用户的密码策略和用户列表,方法同上。

如果没有任何一个用户的密码,我们只能盲目尝试。

0x06 检测方法

域属性中的Lastbadpasswordattempt可以记录最后一次密码输入错误的登录时间,可以作为识别暴力攻击的依据。

badPwdCount属性记录了用户密码错误的次数,但用户输入正确密码后,该属性会被清除,不能作为判断依据。

如果攻击者从域中发起攻击,那么攻击者已经掌握了域中用户的密码策略和用户列表。从防御的角度来说,需要保证域内用户的密码是不规则的,避免出现多个用户使用同一个密码的情况。

日志(4625-帐户登录失败)可以记录登录失败事件。比如Kali系统通过ldapsearch暴力破解域用户密码时生成的日志如下

5-1.png

使用Kerberos进行暴力破解不会生成日志(4625-帐户登录失败),但可以通过日志记录(4768-请求了Kerberos身份验证票证(TGT ), 4771-Kerberos预身份验证失败)。

0x07 小结

本文介绍了域内外暴力破解域用户密码的常用方法,以及我在测试DomainPasswordSpray时发现的一个bug(需要在更多环境下测试)。基于DomainPasswordSpray实现了域外暴力破解,并结合利用的思想介绍了检测方法。

留下回复

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

黑客攻防讨论组

黑客攻防讨论组

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

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