0x00 前言

在域渗透中,如果已经掌握了一些域用户的口令,通常会选择寻找口令规律,生成字典文件,尝试对其他域用户的口令进行暴力破解。

站在防御的角度,需要确保域用户没有使用存在规律的弱口令,也需要能够发现暴力破解域用户口令的行为。

本文将要分别介绍在域内和域外暴力破解域用户口令的常用方法,结合利用思路,介绍检测方法。

  0x01 简介

本文将要介绍以下内容:

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

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

· 检测方法

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

多次口令输入错误会导致用户帐户被锁定,默认设置的错误次数为5

用户帐户被锁定后,默认需要等待30分钟才能恢复使用

最后一次口令输入错误的时间会被记录,无法通过修改LDAP数据进行清除,提示如下:

Error 0x209A Access to the attribute is not permitted because the attribute is owned by the Security Accounts Manager (SAM).

用户帐户被锁定后,即使输入正确的口令,也会提示口令错误。

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

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

获取口令策略的详细方法可参考上篇文章《 渗透基础——域内用户口令策略的获取 》

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

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

这里需要额外对用户的属性进行判断,去除被禁用和被锁定的用户。

(1)识别被禁用的用户

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

如下图:

参考资料:

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

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

Get-NetUser | select name,useraccountcontrol

输出结果如下图:

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

Get-NetUser test2| select useraccountcontrol | ConvertFrom-UACValue -ShowAll

输出结果如下图:

能够获得用户test2具有以下属性:

· ACCOUNTDISABLE

· NORMAL_ACCOUNT

· DONT_EXPIRE_PASSWORD

(2)识别被锁定的用户

虽然用户的ACCOUNTDISABLE属性中偏移0x0010处标记为LOCKOUT,如下图:

但这个位置的值并不能用来判断当前用户是否被锁定。

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

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

Get-NetUser | select name,badPwdCount,lockoutTime

输出结果如下图:

很明显,可以发现用户testa处于被锁定的状态

3.使用DomainPasswordSpray进行口令爆破

地址:

https://github.com/dafthack/DomainPasswordSpray

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

实例如下:

Invoke-DomainPasswordSpray -UserList .\users.txt -Password DomainUser123! -Verbose

输出结果如下图:

注:DomainPasswordSpray支持筛选用户的功能,获得所有用户的列表,排除被禁用和被锁定的用户。

命令如下:

Get-DomainUserList -RemoveDisabled -RemovePotentialLockouts

我在我的测试环境(dc:Server2012R2)下这个功能出现bug,无法识别出被锁定的用户testa

如下图:

实际上用户testa的状态被锁定,如下图:

个人猜测产生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";ldapsearch -x -H ldap://192.168.1.1:389 -D "CN="$i",CN=Users,DC=test,DC=com" -w DomainUser123! -b "DC=test,DC=com" |grep "# numEntrie";done

test.txt保存所有用户名,如果口令正确,输出查询结果的个数,如果口令错误,返回验证错误:ldap_bind: Invalid credentials (49)

输出结果如下图:

成功暴力破解出用户testb的口令。

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

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

具体修改的位置如下:

原版中修改LDAP查询的语句:

$DomainContext = New-Object System.DirectoryServices.ActiveDirectory.DirectoryContext("domain",$Domain)

$DomainObject = [System.DirectoryServices.ActiveDirectory.Domain]::GetDomain($DomainContext)

$CurrentDomain = "LDAP://" + ([ADSI]"LDAP://$Domain").distinguishedName

替换为LDAP的查询语句,示例:"192.168.1.1/DC=test,DC=com"

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

由于是在域外进行暴力破解,无法获得域用户的口令策略,所以我移除了DomainPasswordSpray中获得口令策略的功能。

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

https://github.com/3gstudent/Homework-of-Powershell/blob/master/Invoke-DomainPasswordSprayOutsideTheDomain.ps1

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

Invoke-DomainPasswordSprayOutsideTheDomain -Domain "192.168.1.1/DC=test,DC=com" -UserList .\user.txt -Password DomainUser123! -Verbose

输出结果如下图:

  0x05 利用思路

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

流程如下:

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

根据lockoutThreshold的数值决定尝试的次数,避免帐户被锁定。

(2)获得域用户列表

列出所有域用户后,需要对用户的属性进行判断,去除被禁用和被锁定的用户。

(3)尝试破解

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

如果已经获得了一个用户的口令,那么可以先读取域内用户的口令策略和用户列表,方法同上。

如果没有任何用户的口令,只能进行盲目的尝试。

  0x06 检测方法

域用户属性中的lastbadpasswordattempt能够记录上次口令输入错误的登陆时间,这可以作为识别暴力破解攻击的依据。

badPwdCount属性会记录用户口令错误的次数,但是用户输入正确的口令后,这个属性会被清零,无法作为判断的依据。

如果攻击者从域内发起攻击,那么攻击者已经掌握了域内用户的口令策略和用户列表,站在防御的角度,需要确保域内用户的口令不存在规律,避免多个用户使用同一口令的情况。

日志(4625 - An account failed to log on)能够记录登录失败的事件,例如Kali系统通过ldapsearch暴力破解域用户口令时产生的日志如下图

使用kerbrute进行暴力破解不会产生日志(4625 - An account failed to log on),但是可以通过日志(4768 - A Kerberos authentication ticket (TGT) was requested和4771 - Kerberos pre-authentication failed)记录。

  0x07 小结

本文分别介绍了在域内和域外暴力破解域用户口令的常用方法,介绍了我在测试DomainPasswordSpray时发现的一个bug(需要在更多的环境进行测试),基于DomainPasswordSpray实现了域外暴力破解,结合利用思路,介绍检测方法。

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

渗透基础——通过LDAP协议暴力破解域用户的口令相关推荐

  1. 域渗透基础之NTLM认证协议

    域渗透基础的两个认证协议ntlm和Kerberos协议是必须总结的~ 这篇简单总结下ntlm协议 晚上写下kerberos 0x01 NTLM简介 NTLM使用在Windows NT和Windows ...

  2. 域渗透基础知识(二)之活动目录 Active Directory 的查询

    目录 Active Directory Active Directory 的查询基础语法 什么是BaseDN 什么是Naming Context 什么是LDAP(轻量级目录访问协议) 过滤规则 LDA ...

  3. 渗透基础 | 常用端口利用总结

    21端口渗透剖析 SSH 是协议,通常使用 OpenSSH 软件实现协议应用.SSH 为 Secure Shell 的缩写,由 IETF 的网络工作小组(Network Working Group)所 ...

  4. 1、域渗透基础简单信息收集

    之前写过一篇内网当中域渗透的简单文章.好久没遇到忘得差不多了.前几天做项目,正好碰到了域环境,正好有时间,再回顾一下原来的知识,另外把新补充的知识再记录一下. 域相关知识 什么是域 域英文叫DOMAI ...

  5. Exp10 Final 类CTF(Webug3.0漏洞靶场—渗透基础)

    一.前言 Webug定义为"我们的漏洞"靶场,基础环境基于PHP/MySQL搭建而成,整个web环境装在了一个纯净版的Windows Server 2003的虚拟机中. 此靶场包含 ...

  6. 一梦江湖手游基础攻略之暴力成品华山

    一梦江湖手游基础攻略之暴力成品华山 定位:近战 外功 特点:输出,操作难度较高 加点选择:全敏,(想要爆发高暴击率必不可少,而一点敏可以增加1.5暴击跟1.5命中,相对于全劲性价比更高). 洗练选择: ...

  7. 17.AD域和LDAP协议

    LDAP需求分析 为了集中管理,容易维护和优化,降低运维成本,在任何计算机平台上,用很容易获得的而且数目不断增加的LDAP的客户端程序访问LDAP目录,更容易定制应用程序企业引用LDAP服务器. LD ...

  8. AD域和LDAP协议

    AD域和LDAP协议 1.LDAP 1.1 常见的目录服务软件 X.500 LDAP Actrive Directory,Microsoft公司 NIS 1.2 LDAP特点 LDAP是轻量目录访问协 ...

  9. Windows ❀ AD域服务器的搭建(LDAP协议)

    Windows下AD域服务器是如何搭建的? 一.AD域介绍 1.目录服务 定义:目录服务就是按照树状存储信息的模式 目录服务特点: 目录服务的数据类型主要是字符型,而不是关系数据库提供的整数.浮点数. ...

最新文章

  1. python自动化发送邮件_python接口自动化(三十三)-python自动发邮件总结及实例说明番外篇——下(详解)...
  2. AnnotationConfigApplicationContext 通过调用注解Bean 定义读取器
  3. 维护没有源代码的遗留 Java 项目
  4. HDU 2571 命运
  5. gearman mysql持久化_gearman + mysql方式实现持久化操作示例
  6. @Async注解导致循环依赖,BeanCurrentlyInCreationException异常
  7. WPF中通过AForge实现USB摄像头拍照
  8. meta 标签的详细使用
  9. 解决TortoiseGit每次Pull或者Push都需要输用户名密码的问题
  10. VBA中使用EXCEL工作表函数
  11. AR.js专题-多Renderer支持
  12. 进制转换—任意进制乘法表
  13. canvas图片合成模糊变清晰的方法
  14. 科技云报道:安全脱管不如托管
  15. (数据科学学习手札32)Python中re模块的详细介绍
  16. kafka-topics.sh脚本详解
  17. 基于MATLAB的人脸识别 (1)
  18. mindray心电监护仪使用说明_监护仪使用说明
  19. 添加微软自带日文输入方法
  20. 停摆里再陷亏损,猫眼苦等春天

热门文章

  1. Deformable DETR TBD范式的不二选择
  2. 仿照网易云音乐界面 android特效
  3. php标签属性大全,史上最全的标签总结大全
  4. 恢复磁盘原始空间大小
  5. 小米手机 全面屏 状态判断
  6. ​分散式污水处理站远程在线监测
  7. CSS学习笔记 08、过渡与动画
  8. lcd显示屏c语言程序设计,基于单片机的LCD显示器控制的设计.doc
  9. html中表单设置圆角,使用css选择器来实现表格的四角变圆角——2019.9.6
  10. Python3 : pdb调试