渗透基础——通过LDAP协议暴力破解域用户的口令
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协议暴力破解域用户的口令相关推荐
- 域渗透基础之NTLM认证协议
域渗透基础的两个认证协议ntlm和Kerberos协议是必须总结的~ 这篇简单总结下ntlm协议 晚上写下kerberos 0x01 NTLM简介 NTLM使用在Windows NT和Windows ...
- 域渗透基础知识(二)之活动目录 Active Directory 的查询
目录 Active Directory Active Directory 的查询基础语法 什么是BaseDN 什么是Naming Context 什么是LDAP(轻量级目录访问协议) 过滤规则 LDA ...
- 渗透基础 | 常用端口利用总结
21端口渗透剖析 SSH 是协议,通常使用 OpenSSH 软件实现协议应用.SSH 为 Secure Shell 的缩写,由 IETF 的网络工作小组(Network Working Group)所 ...
- 1、域渗透基础简单信息收集
之前写过一篇内网当中域渗透的简单文章.好久没遇到忘得差不多了.前几天做项目,正好碰到了域环境,正好有时间,再回顾一下原来的知识,另外把新补充的知识再记录一下. 域相关知识 什么是域 域英文叫DOMAI ...
- Exp10 Final 类CTF(Webug3.0漏洞靶场—渗透基础)
一.前言 Webug定义为"我们的漏洞"靶场,基础环境基于PHP/MySQL搭建而成,整个web环境装在了一个纯净版的Windows Server 2003的虚拟机中. 此靶场包含 ...
- 一梦江湖手游基础攻略之暴力成品华山
一梦江湖手游基础攻略之暴力成品华山 定位:近战 外功 特点:输出,操作难度较高 加点选择:全敏,(想要爆发高暴击率必不可少,而一点敏可以增加1.5暴击跟1.5命中,相对于全劲性价比更高). 洗练选择: ...
- 17.AD域和LDAP协议
LDAP需求分析 为了集中管理,容易维护和优化,降低运维成本,在任何计算机平台上,用很容易获得的而且数目不断增加的LDAP的客户端程序访问LDAP目录,更容易定制应用程序企业引用LDAP服务器. LD ...
- AD域和LDAP协议
AD域和LDAP协议 1.LDAP 1.1 常见的目录服务软件 X.500 LDAP Actrive Directory,Microsoft公司 NIS 1.2 LDAP特点 LDAP是轻量目录访问协 ...
- Windows ❀ AD域服务器的搭建(LDAP协议)
Windows下AD域服务器是如何搭建的? 一.AD域介绍 1.目录服务 定义:目录服务就是按照树状存储信息的模式 目录服务特点: 目录服务的数据类型主要是字符型,而不是关系数据库提供的整数.浮点数. ...
最新文章
- python自动化发送邮件_python接口自动化(三十三)-python自动发邮件总结及实例说明番外篇——下(详解)...
- AnnotationConfigApplicationContext 通过调用注解Bean 定义读取器
- 维护没有源代码的遗留 Java 项目
- HDU 2571 命运
- gearman mysql持久化_gearman + mysql方式实现持久化操作示例
- @Async注解导致循环依赖,BeanCurrentlyInCreationException异常
- WPF中通过AForge实现USB摄像头拍照
- meta 标签的详细使用
- 解决TortoiseGit每次Pull或者Push都需要输用户名密码的问题
- VBA中使用EXCEL工作表函数
- AR.js专题-多Renderer支持
- 进制转换—任意进制乘法表
- canvas图片合成模糊变清晰的方法
- 科技云报道:安全脱管不如托管
- (数据科学学习手札32)Python中re模块的详细介绍
- kafka-topics.sh脚本详解
- 基于MATLAB的人脸识别 (1)
- mindray心电监护仪使用说明_监护仪使用说明
- 添加微软自带日文输入方法
- 停摆里再陷亏损,猫眼苦等春天