BloodBash深度审计报告

admin 2026-08-21 06:26:56 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 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_graph 565 行)、路径成本模型与有界 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. 1. BloodHound 太重:一次”我就想看看有没有 DCSync”的回答需要 Docker/Neo4j/API/前端四件套;CTF 选手和一线红队要的是秒级 triage——BloodBash 裸目录参数 = --quick-winscli_has_explicit_analysis_intent:7467 实现了”没给检查标志就自动跑快速分诊”的默认行为);
  2. 2. DEF CON CTF 需要可分发的分析器DC34/ansible/plant_collect_ui.yml 把 SharpHound.exe + bloodbash.exe 一起投放到靶机,选手采集后本地分析——零依赖环境(目标机都能跑,因为 PyInstaller 出的 exe);
  3. 3. 可测试性:BloodHound 的图算法埋在 Neo4j 里难以回归测试;BloodBash 把全部逻辑放进纯 Python 函数,配套 13 个 Ludus 场景采集包 + ground_truth.json + 合成语料生成器 + 变异工具tools/generate_synthetic_sharphound.pymutate_corpus.pyrun_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. 1. 零服务:networkx 内存图换 Neo4j——牺牲超大规模交互探索,换取零部署与秒启动;
  2. 2. 检测即函数:每类攻击面一个纯函数(输入图,输出 findings),可独立回归测试;
  3. 3. 信噪比优先:预期主体白名单 + 发现折叠 + 严重度排序;
  4. 4. 红蓝同体:攻击路径与 path-break/busiest 整改建议同一数据底座;
  5. 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> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# 按租户过滤

8.4 约束与性能模块

bloodbash loot/ --all --fast &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# 全量+大图自动降载
bloodbash loot/ --shortest-paths --path-mode deep --path-depth 8 --max-paths 5
bloodbash loot/ --dangerous-permissions --indirect --fast
bloodbash loot/ --deep-analysis &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;# 开满速组环检测(慢)
bloodbash loot/ --all-findings &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# 末尾全发现表(含空类)
bloodbash loot/ --quiet-empty-sections &nbsp; &nbsp; &nbsp; &nbsp;# 空节隐藏(默认)

8.5 输出与交付模块

bloodbash loot/ --all --export&nbsp;html &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;# nargs='?' const=md → --export 空值=md
bloodbash loot/ --quick-wins --export&nbsp;json --log-file run1.log
bloodbash loot/ --all --report-pack ./report/ --export-zip client.zip &nbsp;&nbsp;# 多页HTML+zip
bloodbash loot/ --csv-pack ./csvs/ &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# PlumHound 式多CSV包
bloodbash loot/ --export-bh &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;# 反导出 BloodHound 兼容 JSON(进 Neo4j 深挖)
bloodbash loot/ --dot graph.dot &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;# Graphviz(dot -Tsvg graph.dot -o g.svg)

8.6 Profile 模块(声明式配方)

bloodbash loot/ --profile quick-wins &nbsp; &nbsp; &nbsp;# 内置:日0分诊
bloodbash loot/ --profile adcs-heavy &nbsp; &nbsp; &nbsp;# 证书专项+HTML报告包
bloodbash loot/ --profile hygiene &nbsp; &nbsp; &nbsp; &nbsp;&nbsp;# 卫生盘点
bloodbash loot/ --profile ./my.yaml &nbsp; &nbsp; &nbsp;&nbsp;# 自定义(checks 列表+参数+导出一把梭)

8.7 脚本化”命令配方”(参数即模块 → 自动化体系)

# 配方A:接客流水线——采集→分诊→档案→交付全自动
cat&nbsp;> triage.sh <<'EOF'
#!/usr/bin/env bash
set&nbsp;-euo pipefail
LOOT="${1:?usage: triage.sh <sharphound_dir>}"
ENG="${2:-engagement-$(date +%Y%m%d)}"
bloodbash&nbsp;"$LOOT"&nbsp;--profile quick-wins --log-file&nbsp;"$ENG-triage.log"&nbsp;--export&nbsp;md
bloodbash&nbsp;"$LOOT"&nbsp;--from-user-file footholds.txt --from-user-export&nbsp;"$ENG-dossiers/"
bloodbash&nbsp;"$LOOT"&nbsp;--all --report-pack&nbsp;"$ENG-pack"&nbsp;--export-zip&nbsp;"$ENG.zip"
echo&nbsp;"[+] deliverable:&nbsp;$ENG.zip"
EOF

# 配方B:多域巡检——对每个子域过滤并断路建议
for&nbsp;d&nbsp;in&nbsp;$(bloodbash loot/ --list-domains | awk&nbsp;'/FQDN|domain/{print $NF}');&nbsp;do
&nbsp; bloodbash loot/ --domain&nbsp;"$d"&nbsp;--path-break --path-break-top 10 --export&nbsp;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/ &nbsp;--export&nbsp;json > base.json
bloodbash corpus-m/ --export&nbsp;json > mutated.json
diff <(jq -S . base.json) <(jq -S . mutated.json) &&&nbsp;echo&nbsp;"REGRESSION!"&nbsp;&&&nbsp;exit&nbsp;1

# 配方D:JSON 输出 → 动态注入下游(jq 管道)
bloodbash loot/ --all --export&nbsp;json | jq&nbsp;'.findings[] | select(.score>=9) | .category'
bloodbash loot/ --from-user jsmith --export&nbsp;json | \
&nbsp; jq -r&nbsp;'.paths[] | [.source, (.hops|join("->")), .target] | @tsv'&nbsp;| \
&nbsp;&nbsp;while&nbsp;IFS=$'\t'&nbsp;read&nbsp;-r src hops dst;&nbsp;do
&nbsp; &nbsp; &nbsp;&nbsp;echo&nbsp;"[$src]&nbsp;$hops&nbsp;=>&nbsp;$dst"&nbsp; &nbsp;# 此处可接 bloodyAD/impacket 自动化
&nbsp;&nbsp;done

# 配方E:血统互通——BloodBash 预分诊 → BloodHound 深挖
bloodbash loot/ --export-bh &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;# 生成 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(秒级分诊)
&nbsp; &nbsp; ├─ 小问题:直接出报告交付(--report-pack --export-zip)
&nbsp; &nbsp; ├─ 大森林:--export-bh 进 BloodHound CE 交互深挖
&nbsp; &nbsp; └─ 可利用路径:--export json | jq 注入 bloodyAD/Impacket 自动化

10. AI 辅助设计:头脑风暴与多版本对比

本节示范”用 AI(如本次对话)围绕 BloodBash 做方案设计”的方法论:问题分析 → 任务拆解 → 多方案对比 → 迭代 → 代码交付。

10.1 问题分析(Prompt 模板)

角色:你是 AD 攻防架构师。
背景:我方 200 节点域,已有 SharpHound 采集数据,需在 15 分钟内向客户输出
&nbsp; &nbsp; &nbsp;"到域管的前 5 条可利用路径 + 整改优先级",且分析机不能联网。
约束:无 Docker 权限;团队只会 bash;需可重复执行。

10.2 任务拆解(AI 产出)

  1. 1. 数据摄取与校验(多批次 zip 合并、采集健康度)
  2. 2. 攻击面分诊(高严重度清单)
  3. 3. 路径发现(可操作性优先)
  4. 4. 整改建议(path-break)
  5. 5. 交付物生成(HTML+zip)
  6. 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 方案迭代示例(两轮)

  • • v1bloodbash 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 深度审计报告》

全面的安全工具集-Onyx 网络安全文章

全面的安全工具集-Onyx

文章总结: 本文介绍Onyx安全测试工具集,整合空间测绘、漏洞扫描、信息收集等能力,提供一站式渗透测试工作台。同时分享一个实战案例,通过fuzz操作将登录接口改
评论:0   参与:  0