一个将网络共享的访问权限映射到 BloodHound OpenGraph 的工具。
阅读相关博客文章:https://specterops.io/blog/2025/10/30/sharehound-an-opengraph-collector-for-network-shares/
本仓库包含 ShareHound 的两种实现。它们的目标相同——根据 SMB 共享权限生成 BloodHound OpenGraph JSON——但在语言、运行时和功能集上有所不同。选择最适合你工作流程的一种。
| 实现 | 路径 | 作者 | 适用场景 |
|---|---|---|---|
| Python | Python/ | Remi Gascou (@podalirius_) @ SpecterOps | 参考实现;易于扩展和脚本化 |
| Go | Go/ | Javier Azofra @ Siemens Healthineers | 大规模扫描(60,000+ 主机)、检查点、静态二进制 |
每个子目录都有自己的 README,包含完整的安装、使用和配置说明:
--effective-access-only 模式,可在大型环境中大幅减小图的大小将 OpenGraph 导入 BloodHound 后,以下查询可满足最常见的需求。更多信息请参阅各实现的 README。
MATCH (p)-[r]->(s:NetworkShareSMB)
WHERE (p)-[:CanDelete]->(s)
AND (p)-[:CanDsControlAccess]->(s)
AND (p)-[:CanDsCreateChild]->(s)
AND (p)-[:CanDsDeleteChild]->(s)
AND (p)-[:CanDsDeleteTree]->(s)
AND (p)-[:CanDsListContents]->(s)
AND (p)-[:CanDsListObject]->(s)
AND (p)-[:CanDsReadProperty]->(s)
AND (p)-[:CanDsWriteExtendedProperties]->(s)
AND (p)-[:CanDsWriteProperty]->(s)
AND (p)-[:CanReadControl]->(s)
AND (p)-[:CanWriteDacl]->(s)
AND (p)-[:CanWriteOwner]->(s)
RETURN p,r,s
MATCH x=(p)-[r:CanWriteDacl|CanWriteOwner|CanDsWriteProperty|CanDsWriteExtendedProperties]->(s:NetworkShareSMB)
RETURN x
MATCH p=(h:NetworkShareHost)-[:HasNetworkShare]->(s:NetworkShareSMB)-[:Contains*0..]->(f:File)
WHERE toLower(f.name) = toLower("flag.txt")
RETURN p
MATCH p=(h:NetworkShareHost)-[:HasNetworkShare]->(s:NetworkShareSMB)-[:Contains*0..]->(f:File)
WHERE toLower(f.extension) = toLower(".vmdk")
RETURN p
当同一 SID 在共享和 NTFS 级别都拥有匹配权限时——即通过 SMB 授予的真实访问权限——Go 实现会生成 CanEffectiveRead / CanEffectiveWrite / CanEffectiveExecute 边。
MATCH p=(principal)-[:CanEffectiveRead]->(f:File)
RETURN p
欢迎为任一实现提交拉取请求(Pull Request)。如果你想先讨论新功能,请提交 issue。