
네트워크 공유의 접근 권한을 BloodHound OpenGraphs로 쉽게 매핑하는 Python 도구
네트워크 공유의 액세스 권한을 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
Go 구현은 동일한 SID가 공유 및 NTFS 수준 모두에서 일치하는 권한을 가질 때(즉, SMB를 통해 실제로 부여된 액세스) CanEffectiveRead / CanEffectiveWrite / CanEffectiveExecute 엣지를 생성합니다.
MATCH p=(principal)-[:CanEffectiveRead]->(f:File)
RETURN p
두 구현 모두에 대한 풀 리퀘스트를 환영합니다. 먼저 새 기능을 논의하고 싶다면 이슈를 열어 주세요.