文章总结: BloodBash是无服务器版BloodHound,单文件Python工具,直接解析SharpHound/AzureHound采集数据,在内存中构建图并检测30+类AD攻击面(如DCSync、RBCD、ADCSESC1-14等),全程零网络、零服务、零Neo4j。它专为快速AD枚举和CTF场景设计,支持反向导出BloodHound兼容JSON。核心优势是去服务化、秒级分诊,且zip解包内建路径穿越防护,适合隔离环境分析敌意数据。 综合评分: 100 文章分类: 渗透测试,红队,内网渗透,安全工具,漏洞分析
BloodBash 深度审计报告
网安之家-CyberHomestead
2026年8月20日 10:51 湖北
在小说阅读器读本章
去阅读
BloodBash 深度审计报告(技术贴)
仓库:https://github.com/SquidSec/BloodBash 审计版本:
v1.4.2(单文件BloodBash.py= 11,117 行 / 462 KB,Python 3.9+,MIT,386 stars) 作者:SquidSec(Russell / DotNetRussell,https://squidoffense.com/) 审计日期:2026-08-19 交付物:本文档(MD) 说明:源码经 jsDelivr CDN 完整获取,已审计:CLI 全参数面(build_arg_parser全 290 行)、图构建引擎(build_graph565 行)、路径成本模型与有界 DFS、ADCS ESC1–14 检测、SQLite 缓存指纹体系、黄金路径/老虎机动画、四大 YAML profile、pyproject 打包。审计后下载文件已彻底删除。
0. 摘要
BloodBash 是”无服务器版 BloodHound”——官方一句话自述:
“A Bloodhound alternative. BloodBash will ingest the same files bloodhound does but no server is required to use this tool. It’s great for quick AD enumeration.”
它直接吃 SharpHound / AzureHound 的 JSON/ZIP 采集输出,在内存里用 networkx 建 MultiDiGraph,跑 30+ 类攻击面检测(DCSync / RBCD / ADCS ESC1–14 / 危险 ACL / GPO 滥用 / Shadow Credentials / Kerberoast / 信任滥用 / Azure 特权角色……),并做加权攻击路径发现(GenericAll 边成本 1、MemberOf 边成本 10 的 Dijkstra + 有界 DFS)——全程零网络、零服务、零 Neo4j,一条命令出结果,还能反向导出 BloodHound 兼容 JSON / Graphviz DOT / HTML 报告包。
它是 DEF CON 34 AD CTF 官方指定分析器(仓库内 DC34/ 是完整的 Ludus + Ansible 比赛环境部署套件),也是红队”拿到 SharpHound 包但懒得搭 Neo4j”场景的速答工具。
⚠️ 合规声明:BloodBash 是纯离线分析器——不对目标发起任何连接、不执行任何利用;它只分析你已合法采集的数据。仍仅限授权评估使用。本文档基于公开仓库源码,仅用于教育与防御评估。
1. 名字寓意
| 组成部分 | 含义 | | — | — | | Blood | 直接继承 BloodHound 的血统——吃同样的 SharpHound 数据、识别同样的边(GenericAll/DCSync/RBCD…),是”猎犬家族”的终端分支 | | Bash | ① Bash/终端原生——从 GUI 网页应用回到一条 shell 命令;② “bash it out”(敲出来就出结果)的工程俚语 |
合起来:“把 BloodHound 塞回 bash”——名字本身就是对 Neo4j + Go API + React 前端 + Docker Compose 四件套的反抗。代码里的 Vegas 老虎机彩蛋(--golden-path 中奖动画)呼应了它在 DEF CON(拉斯维加斯)CTF 中的出身。
2. 技术定位:它”检测”什么?——攻击面原理抽丝剥茧
BloodBash 本身不利用漏洞;它把 SharpHound 采集到的 AD 关系数据映射成”可利用的攻击面清单”。因此”漏洞原理”分两层:它识别的每类攻击面的底层原理 + 它自己的检测逻辑。
2.1 识别的攻击面与其底层原理(含 OS/协议层分析)
| 检测项 | 底层原理(OS / 协议层) | BloodBash 的判定信号 |
| — | — | — |
| DCSync | 目录复制服务(DRSUILogon)DRSGetNCChanges RPC:持有 DS-Replication-Get-Changes(-All) 扩展权限的主体可向 DC 请求任意对象的凭据哈希——等价”远程读 NTDS.dit” | GetChanges /GetChangesAll 入边 + 预期主体白名单过滤(EXPECTED_DCSYNC_RIDS:512/516/518 等 RID 与跨林 EA)——只报”意外持有者” |
| RBCD | Kerberos S4U2Proxy:资源自身 msDS-AllowedToActOnBehalfOfOtherIdentity(存储为 NT 安全描述符)声明”谁可以代表任意用户向我认证”——写入者即拿到基于资源的约束委派 | AllowedToAct /AddAllowedToAct 边;方向反转处理(SharpHound 把资源作为主体存列表,BloodBash 翻转为 principal→resource);另设 Can Configure RBCD(有 WriteProperty/GenericWrite 于计算机者 = 可自行注入) |
| ADCS ESC1–14 | 证书模板把”谁可注册 + 可写什么 SAN + EKU 是否客户端认证”三者配错时,低权用户可申请任意身份证书 → PKINIT 以 DA 身份取 TGT。如 ESC1 = EnrolleeSuppliesSubject(申领者自填 SAN)+ 客户端认证 EKU + 低权可注册 | 模板属性(EKU OID 1.3.6.1.5.5.7.3.2 等)、EDITF_ATTRIBUTESUBJECTALTNAME2 位、注册 ACL(Enroll/AutoEnroll/GenericAll 等入边)、NO_SECURITY_EXTENSION(0x00080000) 位(ESC9/10);并诚实标注 ESC6/8/10–12 需要 SharpHound 可能没采集的 CA 注册表/HTTP 角色数据 |
| Kerberoast / AS-REP Roast | 前者:任何用户可请求”有 SPN 的账户”的 ST,离线爆破服务密钥;后者:DontReqPreauth 账户可无预认证取 AS-REP,离线爆破 | hasspn 属性 / UAC DONT_REQ_PREAUTH 位(decode_uac 解码);Privileged Roast 变体 = 可烤账户嵌套进 DA/EA 组(血统追踪 is_member_of_privileged_group,深度 25) |
| Shadow Credentials | 向目标 msDS-KeyCredentialLink 写入攻击者公钥 → 以该主体身份做 PKINIT(NT hash 不碰) | AddKeyCredentialLink 出边 + 预期持有者白名单(如 KEY CREDENTIAL ENROLL 管理组)过滤噪音 |
| 危险 ACL | GenericAll/WriteDacl/WriteOwner/Owns/AllExtendedRights——”能改 ACL 者终将自己加冕” | 高价值对象上的非常权入边集合;--indirect 追间接(组传递);_interesting_acl_score 按权限×目标类型打分排序 |
| GPO 滥用 / GPO 内容 | 对 GPO 或其链接的 OU 有写权 = 推送计划任务/脚本到 OU 下所有机器(Groups.xml 等偏好文件历史遗留凭据) | GPO 出边(GenericWrite 等)+ --gpo-content-dir 直接解析 GPO XML 报告(内建 cpassword 检测语料 testData/gpo-xml-fixtures/) |
| Unconstrained / Constrained Delegation | 前者:服务账户收到的任意 TGT 缓存在 LSASS(可窃);后者:S4U2Self/S4U2Proxy 允许代表用户访问指定服务 | unconstraineddelegation 属性(排除 DC 的误报抑制——DC 本来就该有)+ AllowedToDelegate 边 |
| SID History | 保留的旧域 SID 在跨域迁移后仍被信任方接受 → 权限走私 | HasSIDHistory 边 + 域 SID 上下文标注(format_sid_with_domain_context) |
| LAPS / LAPS Readers | 本地管理员密码存 ms-MCS-AdmPwd,能读该属性者 = 机器本地管理员 | 计算机部署状态(msLAPS-EncryptedPassword/legacy 属性缺失检测)+ 读权限入边(排除默认特权组) |
| Trust / SID Filtering | 跨林/跨域信任的 SID 过滤未启用时,SID History 注入跨边界生效 | 信任边打分 _trust_edge_abuse_score(label, sid_filtering) |
| 密码卫生 | 描述字段写密码、永不过期、无密码要求(PASSWD_NOTREQD 位 → 可设空密码) | 属性正则/位检测;pne-kerb-false-negatives-tests 专门防”PNE+Kerberos 位”假阴性 |
| Azure 面 | Privileged Role(GA 等价)、App/SP Secrets(可轮换劫持)、MFA Bypass 信号、Guest 访问、SP 滥用 | AzureHound JSON 的 data 属性 + 待处理边队列(__azure_pending_edges__)二阶段缝合 |
2.2 BloodBash 自身的”OS 调用面”分析(审计者视角)
作为一个纯离线 Python 程序,它的系统调用面极小——这本身就是安全属性:
| 系统交互 | 实现 | 审计结论 |
| — | — | — |
| 文件读 | load_json_dirs 递归读目录 / zipfile 解包(_safe_extract_zip:596) | zip 解包内建 zip-slip 路径穿越防护(逐条目校验目标路径),可安全分析敌意样本包 |
| 文件写 | SQLite 缓存(~/.cache/bloodbash/)、导出 md/json/html/csv/yaml/dot、日志 | 导出目录由用户指定;日志默认 bloodbash.log |
| 网络 | 零 ——无 requests/urllib/socket 出站 | 分析敌意/敏感数据无外泄回调风险;可安全在隔离网段跑 |
| 进程 | 无子进程、无 shell 拼接 | 无注入面 |
| 哈希 | compute_collection_fingerprint:1909 ——SHA-256(规范化 JSON{文件路径+size+mtime_ns, schema 版, 程序版本}) | 缓存指纹含程序版本号:升级后自动失效旧缓存(防陈旧图) |
一句话:BloodBash 的”攻击面”只有文件 I/O,且 zip 解包做了穿越防护——这是可以把敌方 CTF 数据包直接丢给它的原因。
3. 前世今生
| 时间 | 里程碑 |
| — | — |
| 2016 | BloodHound 1.0(@wald0/@CptJesus/@harmj0y):Neo4j + Electron + PowerShell 收集器,定义”图论打 AD”范式 |
| 2019 | BloodHound.py(dirkjanm)让 Linux 远程采集成为可能——但分析端仍要 Neo4j |
| 2021 | PlumHound:把 BloodHound 常用 Cypher 变成批量报表脚本——”无 GUI 分析”的先声,但仍依赖 Neo4j 服务 |
| 2022–2023 | BloodHound CE(SpecterOps):Go API + React + PostgreSQL + Neo4j,功能更强、部署更重(Docker Compose 四容器) |
| 2024 | SquidSec 发布 BloodBash:单文件 Python + networkx 内存图,吃 SharpHound JSON、零服务;为 DEF CON 34 AD CTF 打造(DC34/ 内含 Ludus 比赛靶场模板 + Ansible 布旗 + SharpHound/bloodbash.exe 投放剧本) |
| 2025–2026 | v1.x 系列迭代:ADCS ESC1–14、Azure 模块、SQLite 图缓存、黄金路径动画、YAML profile、报告包/CSV 包/zip 交付、PlumHound 风格导出、13 个 Ludus 实测场景 + 合成语料 + 变异测试工具链 |
血统:BloodHound(数据与边语义)→ PlumHound(报表化思路)→ BloodBash(彻底去服务化)。它导出的 --export-bh BloodHound 兼容 JSON 意味着:BloodBash 可以做 BloodHound 的前置预处理器(快速分诊 → 值得深挖才上图数据库)。
4. 为何诞生
源码与 DC34 材料给出三个明确动机:
- 1. BloodHound 太重:一次”我就想看看有没有 DCSync”的回答需要 Docker/Neo4j/API/前端四件套;CTF 选手和一线红队要的是秒级 triage——BloodBash 裸目录参数 =
--quick-wins(cli_has_explicit_analysis_intent:7467实现了”没给检查标志就自动跑快速分诊”的默认行为); - 2. DEF CON CTF 需要可分发的分析器:
DC34/ansible/plant_collect_ui.yml把 SharpHound.exe + bloodbash.exe 一起投放到靶机,选手采集后本地分析——零依赖环境(目标机都能跑,因为 PyInstaller 出的 exe); - 3. 可测试性:BloodHound 的图算法埋在 Neo4j 里难以回归测试;BloodBash 把全部逻辑放进纯 Python 函数,配套 13 个 Ludus 场景采集包 + ground_truth.json + 合成语料生成器 + 变异工具(
tools/generate_synthetic_sharphound.py、mutate_corpus.py、run_scenario_battery.py)——这是同类工具里罕见的测试工程化投入。
5. 攻击链与渗透测试定位
5.1 链上位置:采集与利用之间的”分析中枢”
[采集] SharpHound.exe / bloodhound-python / AzureHound (外部,需凭据+触网)
│ JSON/ZIP 落盘
▼
[分析] ★ BloodBash(本工具,纯离线)
│ ├─ 攻击面清单:DCSync/RBCD/ESC/ACL/烤串/委派/LAPS/信任/Azure
│ ├─ 路径发现:short/abuse/deep 三模式 → 到高价值目标的最优链
│ ├─ 落脚点画像:--from-user 出站档案(我能打哪)/ --owned 入站路径(打我者谁)
│ └─ 防守输出:--path-break(砍哪条边断最多路)/ 各类 inventory
▼
[利用] bloodyAD / Impacket / Certipy / Rubeus ... (外部执行器)
▼
[闭环] 重新采集 → BloodBash 复核(缓存指纹自动失效)→ 下一轮
5.2 典型渗透流程
# ① 目标域内采集(任选)
SharpHound.exe -c All --zipfilename loot.zip # Windows 落地
bloodhound-python -u u -p 'P' -d corp.local -c All # Linux 远程
# ② 拖回分析机,秒级分诊(裸目录 = --quick-wins)
bloodbash ./loot/ # 或直接 bloodbash loot.zip
# ③ 拿到落脚点后:出站档案(我能打哪 + 到 DA 的路径)
bloodbash ./loot/ --from-user jsmith --from-user-export dossier/
#④ 已控主体:反查"从它能到哪"(入站路径)
bloodbash ./loot/ --owned 'WEB01$,jsmith' --shortest-paths --path-mode abuse
# ⑤ 交付:HTML 报告包 + PlumHound 式 CSV 包 + zip
bloodbash ./loot/ --all --report-pack report/ --csv-pack csvs/ --export-zip deliverable.zip
6. 源码级审计:骚操作与细节妙处
行号基于
BloodBash.py@ v1.4.2(11,117 行)。
6.1 边成本模型:把”滥用难度”编码成 Dijkstra 权重(_PATH_EDGE_COSTS:4731)
GenericAll/WriteDacl/WriteOwner/Owns/GenericWrite = 1
AddKeyCredentialLink/AllowedToAct/WriteAccountRestrions/GetChanges(All)/AllExtendedRights = 1
AddMember/AddSelf/AdminTo/CanRDP/CanPSRemote/ExecuteDCOM/HasSession/HasSIDHistory = 2
Gplink = 6 → Contains = 9 → MemberOf/Member = 10
妙处:--path-mode abuse 下 Dijkstra 的边权重不再是”跳数”而是滥用成本——一条 4 跳但全是 GenericAll 的链会排在 2 跳但绕道组嵌套的链前面,因为后者实际要”先成为组成员”(现实中往往不可控)。这是对 BloodHound 默认最短路径的语义改进:路径的”可操作性”而非”拓扑长度”优先。
6.2 有界滥用 DFS:防 all_simple_paths 爆炸(_bounded_abuse_dfs_paths:4821)
密集 MemberOf 图上 nx.all_simple_paths 会组合爆炸。BloodBash 的对策:** abusing 边优先扩展**(邻居按边成本排序)、纯成员边扇出截断(member_n[:12])、全局扩展预算(max_expansions=4000)+ seen_paths 去重——在 25k 节点/500k 边的企业图上保持可交互(LARGE_GRAPH_NODES/EDGES 阈值自动触发 --fast)。
6.3 “预期主体白名单”降噪哲学(DCSync/Admin/KeyCredential 三处)
初代工具报 DCSync 会把 DOMAIN ADMINS 本身也列出来——废话式发现。BloodBash 为每类高危权限内置预期持有者集合:
- •
EXPECTED_DCSYNC_RIDS(:84起):512/516/518 等 RID + 跨林根 EA; - •
is_expected_admin_principal/_is_expected_key_credential_holder:本地管理员组、密钥注册管理组; - • 只报意外持有者——信噪比是它比裸 Cypher 查询”好用的核心”。配套
testData/pne-kerb-false-negatives-tests甚至专门回归”密码永不过期+Kerberos 必需”组合的假阴性。
6.4 采集格式兼容层:吃三代 SharpHound(_parse_json_dir:789 + build_graph:1274)
- • 老版
MemberName引用 → 名字→SID 解析(name_to_oid注册表); - • SharpHound CE 的
Members装在组上(而非用户的 MemberOf)→ 统一翻转成member → MemberOf → group; - • CE 嵌套会话集合
{Results:[{UserSID,ComputerSID}]}与Sessions/PrivilegedSessions/RegistrySessions三键去重; - • AllowedToAct 方向反转(
:1326注释明说):SharpHound 把资源当主体存列表,BloodBash 翻转为 principal→resource 才符合 BloodHound 路径语义; - •
PrimaryGroupSID不在 Members 里也补边(Domain Users 这类巨型组的常见坑); - • 内置著名组成员注入(
add_well_known_group_memberships:1183):Authenticated Users/Everyone 等 SharpHound 不显式列出的隐式成员关系补进图——否则大量 ACL 路径会断。 - • Azure 数据二阶段缝合:第一遍收集
__azure_pending_edges__待定边,第二遍在 OID 归一化后落图。
6.5 SQLite 图缓存:指纹 + 元数据 + 版本失效(:1839-2135)
- • 指纹 = SHA-256(
{schema, app_version, files:[{path,size,mtime_ns}]}规范化 JSON)——文件 mtime 纳秒级参与,任何文件变动即失效; - •
write/read_graph_cache_meta在 SQLite 里存元数据表,graph_cache_is_valid校验后才加载——程序升级自动弃缓存(app 版本进指纹); - •
--rebuild-cache强制重建、--no-cache完全旁路。11K 行工具对”第二次分析同一包要秒开”的工程执念。
6.6 黄金路径 + Vegas 老虎机(find_golden_path:6279 + _render_slot_machine:6493)
--golden-path 只找一条到 DA 的最优路:反图 BFS 圈定 80 个候选落脚点(排除本身就是高权名的”噪音起点”)→ 快速跳短路 + abuse 加权路择优 → 交互式 TTY 上老虎机滚轮动画揭晓路径(--no-animate 关闭)。这是把”给客户演示攻击路径”做成了一场表演——DEF CON 血统的仪式感。
6.7 恶意 ZIP 防护(_safe_extract_zip:596)
解包逐条目校验解析后路径不越出目标目录(zip-slip 防护)——分析不可信来源的”SharpHound 包”(CTF 对手塞私货)时不会被打。同类工具几乎没人做。
6.8 YAML Profile:分析即配置(profiles/*.yaml + apply_profile_to_args:7624)
四个内置 profile(quick/quick-wins/adcs-heavy/hygiene)把”检查集 + 模式参数 + 导出动作”打包成声明式 YAML;--profile adcs-heavy 一条命令等于十余个标志。自定义 profile 就是给团队沉淀方法论。
6.9 防守侧输出:Path Break / Busiest Paths / Stepping Stones
- •
collect_path_breaks:7964:计算”删除哪条边能打断最多攻击路径”并打分排序——给蓝队的整改优先级; - •
collect_busiest_paths:7867:哪个人在最多条路径上(重点盯防对象); - •
collect_stepping_stones:4981:路径中反复出现的中继节点。 红队工具长出蓝队灵魂,这是它与”纯攻击 BloodHound 查询集”的分野。
6.10 工程杂项亮点
- • 结构化帮助(
StructuredHelpArgumentParser:10321+print_structured_help:10209):-h输出”Start with these 3″入门表 + 速查表,--help-advanced才给全量——11K 行工具的帮助系统本身做了渐进披露设计; - • Finding 折叠上限(
FINDING_COLLAPSE_CAPS):每类发现最多列 25/30/40 条 + 汇总行,防止企业级图刷屏; - • DeferredSection(
:285):节先注册后决定是否打印——空节自动隐藏(--quiet-empty-sections); - • 严重度评分表(
SEVERITY_SCORES):ESC1-8/DCSync=10、RBCD/危险权限=9……统一排序输出(print_prioritized_findings:157)。
7. 开发与设计架构
7.1 分层(11,117 行单文件,206 个函数)
BloodBash.py
├─ 常量层 SEVERITY_SCORES / EXPECTED_DCSYNC_RIDS / _PATH_EDGE_COSTS / FINDING_COLLAPSE_CAPS
├─ 采集层 load_json_dirs → _parse_json_dir(三代 SharpHound + Azure + zip-slip 防护)
│ + _resolve_object_type/_normalize_object_type(CE 别名归一)
├─ 图层 build_graph(networkx MultiDiGraph;边翻转/名SID解析/著名组注入/CE嵌套集合)
│ + SQLite 缓存(指纹/元数据/版本失效)
├─ 检测层 30+ print_*/collect_* 函数(每类攻击面一对"打印+结构化收集")
│ + 白名单降噪(expected principals)+ 严重度挂钩
├─ 路径层 edge_traversal_cost / _dijkstra_path_weighted / _bounded_abuse_dfs_paths
│ / discover_paths_between / find_golden_path / stepping stones / busiest / path-break
├─ 画像层 build_compromise_dossier(--from-user 出站)/ paths_to_owned(--owned 入站)
├─ 导出层 export_results(md/json/html/csv/yaml) / export_bloodhound_compatible / export_to_dot
│ / export_report_pack(多页HTML) / export_csv_pack(PlumHound式) / export_zip_pack
├─ 配置层 load_analysis_profile + 4 内置 YAML + setup wizard
└─ CLI 层 StructuredHelpArgumentParser + build_arg_parser(~70 参数)+ main 编排
测试(仓库根) test_bloodbash.py + 11 个专项测试 + testData/ 40+ 语料目录
+ synthetic-corp-lab(ground_truth.json) + tools/(语料生成/变异/场景跑批)
+ ludus-env-data/ 13 场景采集包
7.2 设计原则
- 1. 零服务:networkx 内存图换 Neo4j——牺牲超大规模交互探索,换取零部署与秒启动;
- 2. 检测即函数:每类攻击面一个纯函数(输入图,输出 findings),可独立回归测试;
- 3. 信噪比优先:预期主体白名单 + 发现折叠 + 严重度排序;
- 4. 红蓝同体:攻击路径与 path-break/busiest 整改建议同一数据底座;
- 5. 数据兼容大于内部洁癖:宁可写三层格式归一,也要吃下三代采集器输出。
依赖仅 4 个:networkx / rich / tqdm / pyyaml(pyproject)——PyInstaller 出单 exe(DC34 靶机上直接投放的就是它)。
8. Cheatsheet:命令配方(-h 参数 = 可编程功能模块)
设计哲学:把每个 flag 当作功能模块,按”输入源(目录/zip/–merge)→ 分析意图(checks/paths/dossier)→ 约束(–domain/–fast/–path-mode)→ 输出(export/report-pack/log)”四段式拼装。
8.1 入门三连(工具 -h 自己推荐的)
bloodbash ./sharphound_json/ # 裸目录 = 自动 --quick-wins 分诊
bloodbash ./loot.zip # 直接吃 zip
bloodbash --list-domains ./loot/ # 先看采集覆盖了哪些域/租户
8.2 采集源模块(输入段)
bloodbash dir1 --merge dir2 dir3 backup.zip # 多域/多森林合并分析
bloodbash loot.zip --rebuild-cache # 强制重解析(无视缓存)
bloodbash loot/ --db /tmp/g.db --cache-dir /tmp/cc # 自定义缓存位置(无 HOME 环境时)
bloodbash loot/ --no-cache # 一次性分析不留痕
8.3 分析意图模块(组合矩阵)
# 单项精查(按需拼装)
bloodbash loot/ --dcsync # 意外 DCSync 持有者
bloodbash loot/ --adcs # ESC1-14
bloodbash loot/ --rbcd # 已配置的 RBCD
bloodbash loot/ --dangerous-permissions --indirect # 危险 ACL(含间接/组传递)
bloodbash loot/ --privileged-roast # 能烤的特权账户(嵌套 DA/EA)
bloodbash loot/ --unconstrained-delegation # 非DC无约束委派
bloodbash loot/ --shadow-credentials # 影子凭据路径
bloodbash loot/ --laps # LAPS 部署状态
bloodbash loot/ --trust # 信任/SID过滤滥用
bloodbash loot/ --sessions # 本地管理/RDP/DCOM/会话
bloodbash loot/ --gpo-abuse --gpo-content-dir ./gpo_xml/ # GPO 权限+内容(cpassword)
bloodbash loot/ --sid-history --constrained-delegation # 组合链
# 路径模块(三种探索模式)
bloodbash loot/ --shortest-paths --path-mode short # 跳数最短
bloodbash loot/ --shortest-paths --path-mode abuse # 滥用成本最低(推荐)
bloodbash loot/ --deep-paths # 深度包=deep模式+垫脚石+最忙路径+断路
bloodbash loot/ --golden-path --from-user jsmith --no-animate # 单路径快速揭晓(CI友好)
# 角色视角模块
bloodbash loot/ --from-user jsmith --from-user-export ./dossier/ # 出站:我能打哪
bloodbash loot/ --owned 'WEB01$,jsmith' --owned-inventory # 入站:已控资产盘点
bloodbash loot/ --from-user-file footholds.txt --owned-file owned.txt # 文件喂主体列表(#注释)
# 防守视角模块
bloodbash loot/ --path-break --path-break-top 20 # 砍哪 20 条边断最多路
bloodbash loot/ --busiest-paths all --busiest-paths-top 10 # 谁在最多路径上
bloodbash loot/ --inventory # 结构+密码年龄+僵尸+特权盘点
bloodbash loot/ --password-age --stale-accounts --privilege-inventory # 拆开单跑
# Azure 模块
bloodbash azure_out/ --azure-privileged-roles --azure-app-secrets
bloodbash azure_out/ --azure-mfa-bypass --azure-guest-access --azure-sp-abuse
bloodbash mixed/ --domain <tenantId> # 按租户过滤
8.4 约束与性能模块
bloodbash loot/ --all --fast # 全量+大图自动降载
bloodbash loot/ --shortest-paths --path-mode deep --path-depth 8 --max-paths 5
bloodbash loot/ --dangerous-permissions --indirect --fast
bloodbash loot/ --deep-analysis # 开满速组环检测(慢)
bloodbash loot/ --all-findings # 末尾全发现表(含空类)
bloodbash loot/ --quiet-empty-sections # 空节隐藏(默认)
8.5 输出与交付模块
bloodbash loot/ --all --export html # nargs='?' const=md → --export 空值=md
bloodbash loot/ --quick-wins --export json --log-file run1.log
bloodbash loot/ --all --report-pack ./report/ --export-zip client.zip # 多页HTML+zip
bloodbash loot/ --csv-pack ./csvs/ # PlumHound 式多CSV包
bloodbash loot/ --export-bh # 反导出 BloodHound 兼容 JSON(进 Neo4j 深挖)
bloodbash loot/ --dot graph.dot # Graphviz(dot -Tsvg graph.dot -o g.svg)
8.6 Profile 模块(声明式配方)
bloodbash loot/ --profile quick-wins # 内置:日0分诊
bloodbash loot/ --profile adcs-heavy # 证书专项+HTML报告包
bloodbash loot/ --profile hygiene # 卫生盘点
bloodbash loot/ --profile ./my.yaml # 自定义(checks 列表+参数+导出一把梭)
8.7 脚本化”命令配方”(参数即模块 → 自动化体系)
# 配方A:接客流水线——采集→分诊→档案→交付全自动
cat > triage.sh <<'EOF'
#!/usr/bin/env bash
set -euo pipefail
LOOT="${1:?usage: triage.sh <sharphound_dir>}"
ENG="${2:-engagement-$(date +%Y%m%d)}"
bloodbash "$LOOT" --profile quick-wins --log-file "$ENG-triage.log" --export md
bloodbash "$LOOT" --from-user-file footholds.txt --from-user-export "$ENG-dossiers/"
bloodbash "$LOOT" --all --report-pack "$ENG-pack" --export-zip "$ENG.zip"
echo "[+] deliverable: $ENG.zip"
EOF
# 配方B:多域巡检——对每个子域过滤并断路建议
for d in $(bloodbash loot/ --list-domains | awk '/FQDN|domain/{print $NF}'); do
bloodbash loot/ --domain "$d" --path-break --path-break-top 10 --export csv
done
# 配方C:CI 回归——语料变异+跑批+差异报警(仓库自带工具链)
python tools/generate_synthetic_sharphound.py --seed 42 --out corpus/
python tools/mutate_corpus.py corpus/ --mutate add-dcsync --out corpus-m/
bloodbash corpus/ --export json > base.json
bloodbash corpus-m/ --export json > mutated.json
diff <(jq -S . base.json) <(jq -S . mutated.json) && echo "REGRESSION!" && exit 1
# 配方D:JSON 输出 → 动态注入下游(jq 管道)
bloodbash loot/ --all --export json | jq '.findings[] | select(.score>=9) | .category'
bloodbash loot/ --from-user jsmith --export json | \
jq -r '.paths[] | [.source, (.hops|join("->")), .target] | @tsv' | \
while IFS=$'\t' read -r src hops dst; do
echo "[$src] $hops => $dst" # 此处可接 bloodyAD/impacket 自动化
done
# 配方E:血统互通——BloodBash 预分诊 → BloodHound 深挖
bloodbash loot/ --export-bh # 生成 bloodbash_bh_*.json
# 拖进 BloodHound CE 界面做交互式图探索
参数模块化心法:输入源(directory/--merge/--db) × 意图(checks/paths/dossier/inventory) × 约束(--domain/--fast/--path-mode/--path-depth) × 输出(--export/--report-pack/--csv-pack/--log-file) —— 四个正交维度任意笛卡尔组合;YAML profile 是”组合的宏”,shell 是”组合的程序”,JSON 导出是”组合的 API”。
9. 落地到实网攻防环境
9.1 前置与部署
| 场景 | 部署 |
| — | — |
| 分析机(Kali/任意 Linux/macOS) | pipx install git+https://github.com/SquidSec/BloodBash.git (依赖仅 4 个纯 Python 库) |
| 目标内网无 Python 环境 | Release 页 PyInstaller 单文件 bloodbash.exe(DC34 正是这么投放的) |
| 数据来源 | SharpHound(-CE)/bloodhound-python/AzureHound 的 JSON 或 zip;--merge 合并多域多批 |
9.2 实战路径(红队 / 蓝队 / CTF 三视角)
- • 红队日 0:拿到立足点 → 采集 →
bloodbash loot/(自动 quick-wins)看意外 DCSync/ESC/RBCD → 有 foothold 就--from-user出站档案定下一步横向; - • 红队深度:
--deep-paths找多跳替代路(主路被封时备用);--golden-path --from-user <低权用户>给客户演示”一条链通到 DA”; - • 蓝队整改:
--path-break拿”删边优先级”清单 → 按分值逐条修 ACL → 重采集复核(缓存指纹自动失效,验证修复生效); - • CTF/教学:仓库
ludus-env-data/13 场景(FCP→Kerberoast→…→ShadowCreds)+ DC34 全套靶场模板,是现成的 AD 攻防训练课程; - • OPSEC 注意:BloodBash 全程离线,分析动作零网络痕迹——痕迹只在采集端(SharpHound 的 LDAP 批量查询),与分析器无关。
9.3 与同类工具协作
bloodhound-python/SharpHound(采集)→ BloodBash(秒级分诊)
├─ 小问题:直接出报告交付(--report-pack --export-zip)
├─ 大森林:--export-bh 进 BloodHound CE 交互深挖
└─ 可利用路径:--export json | jq 注入 bloodyAD/Impacket 自动化
10. AI 辅助设计:头脑风暴与多版本对比
本节示范”用 AI(如本次对话)围绕 BloodBash 做方案设计”的方法论:问题分析 → 任务拆解 → 多方案对比 → 迭代 → 代码交付。
10.1 问题分析(Prompt 模板)
角色:你是 AD 攻防架构师。
背景:我方 200 节点域,已有 SharpHound 采集数据,需在 15 分钟内向客户输出
"到域管的前 5 条可利用路径 + 整改优先级",且分析机不能联网。
约束:无 Docker 权限;团队只会 bash;需可重复执行。
10.2 任务拆解(AI 产出)
- 1. 数据摄取与校验(多批次 zip 合并、采集健康度)
- 2. 攻击面分诊(高严重度清单)
- 3. 路径发现(可操作性优先)
- 4. 整改建议(path-break)
- 5. 交付物生成(HTML+zip)
- 6. 可重复性(脚本化 + 缓存 + 日志)
10.3 多版本方案对比(AI 并行评估)
| 维度 | 方案A:BloodHound CE | 方案B:PlumHound+Neo4j | 方案C:BloodBash ★ | 方案D:手写 jq 脚本 | | — | — | — | — | — | | 部署 | Docker 四容器 | Neo4j 单服务 | pipx 一条命令 | 零部署 | | 离线 | ✔(装好后) | ✔ | ✔(天然零网络) | ✔ | | 首次出结果 | 10–30 分钟 | 5–15 分钟 | <1 分钟(裸目录分诊) | 取决于开发 | | 交互图探索 | ★★★ 最佳 | ★★ | ★(–dot 可看静态图) | ✗ | | 路径可操作性排序 | 需手写 Cypher | 需手写 Cypher | 内建 abuse 成本模型 | ✗ | | 整改建议 | 生态查询 | 生态查询 | –path-break 原生 | ✗ | | 团队 bash 门槛 | Web 界面低 | 低 | 低(CLI+profile) | 高 | | 可测试性 | 弱 | 弱 | 强(40+ 语料+ground truth) | 自定义 |
结论(AI 推荐):C 为主(分诊/交付/整改),复杂森林图探索临时借 A(--export-bh 桥接)——正是 BloodBash 设计者预期的生态位。
10.4 方案迭代示例(两轮)
- • v1:
bloodbash loot/ --all --export html→ 客户反馈”报告太厚”; - • v2:
--profile自定义 YAML 只留 score≥8 的 checks +FINDING_COLLAPSE_CAPS已内建折叠 +--report-pack --export-zip一页式交付 → 迭代即改配置不改代码——profile 机制让方案迭代成本趋近于零。
10.5 代码交付(AI 生成即用物)
见 §8.7 配方 A–E:triage.sh(接客流水线)、多域巡检循环、CI 语料回归、jq 下游注入、BH 互通桥——全部可直接落地。
11. 检测与防御(防守方对照)
| 层 | 要点 |
| — | — |
| 针对采集端 (BloodBash 无网络行为,检测面在 SharpHound) | LDAP 批量枚举(会话/ACL/组)告警;SharpHound 特征查询频率基线 |
| 数据防外带 | SharpHound JSON 落盘即高价值数据——终端 DLP 对大批量 JSON/zip 外发告警 |
| 整改闭环 | 用 --path-break 的删边清单修复 ACL → 重采集 → 对比 --export json 差异验证 |
| 卫生基线 | 定期 --inventory(密码年龄/僵尸账户/特权组)+ --profile hygiene 做巡检 |
| 架构加固 | Tiering 模型收敛高权路径;预期 DCSync/Admin 白名单之外即事件(与工具同款思路自检) |
12. 结论
- • 工具性质:单文件 11K 行、四依赖、零网络、零服务的 SharpHound/AzureHound 离线分析器——BloodHound 生态的”终端速答分支”,DEF CON 34 CTF 御用分析器;红蓝双用(攻击分诊 / path-break 整改)。
- • 最大价值:秒级分诊(裸目录即用)+ 滥用成本路径模型(abuse 模式比跳数更贴近实战)+ 预期主体降噪(只报意外)+ 测试工程化(13 Ludus 场景 + ground truth + 语料变异)。
- • 代码质量:三代格式兼容层、zip-slip 防护、SQLite 指纹缓存(版本感知)、有界 DFS 防爆炸、结构化帮助、发现折叠——单文件巨兽但工程纪律罕见地好。
- • 边界:交互式大规模图探索仍输 BloodHound CE(
--export-bh桥接即可);无利用执行能力(设计如此)。
附:主要参考来源
- • BloodBash(审计对象):https://github.com/SquidSec/BloodBash
- • SquidSec:https://squidoffense.com/ · DEF CON 34 AD CTF 材料(仓库
DC34/) - • BloodHound(数据语义源头):https://github.com/SpecterOps/BloodHound
- • PlumHound(报表化先声):https://github.com/plumhound/plumhound
- • Certified Pre-Owned(ESC 语义):https://posts.specterops.io/certified-pre-owned-d953c1db56c9
- • Ludus(靶场模板来源):https://github.com/francisck/ludus
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:网安之家-CyberHomestead 《BloodBash 深度审计报告》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。









评论