0x00 简介

在之前的一编域渗透-Kerberos认证文章中已经写过kerberos的认证过程,这次写的是如何去枚举域中的用户名,得到用户名后我们才可以做下一步的操作,比如密码喷洒等。

0x01 认证过程分析

对于用户名枚举需要对根据以下错误信息来辨别用户名是否正确:

用户状态 Kerberos 错误信息
用户启用 KDC_ERR_PREAUTH_REQUIRED
用户锁定 KDC_ERR_CLIENT_REVOKED
用户不存在 KDC_ERR_C_PRINCIPAL_UNKNOWN

我们来看下用户不存在的AS_REQ包,主要是在cname的参数里面设置:

1

返回了一个PRINCIPAL_UNKNOWN 错误的包,:

2

那如果是用户名正确,密码不正确的包呢:

4

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 

下面可以知道枚举出存在的域用户:

5

在运行完成之后会将结果保存在 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

会显示出爆破出的域用户:

6

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:

7

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 

8

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

枚举结果:

9

0x03 总结

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