
BloodHound API를 위한 대화형 명령줄 셸입니다.
BloodHound용 대화형 명령줄 셸입니다. 웹 UI를 열지 않고도 터미널에서 Active Directory 객체를 조회하고, 취약점을 탐색하며, 공격 경로를 찾을 수 있습니다.
Python 3.11+ 및 BloodHound CE v9 서버가 필요합니다(v9.7.1에서 테스트됨).
pipx install bhshell # recommended
# or
pip install bhshell
$ bhshell --url http://127.0.0.1:8080
[bh: shell] > login -u admin
[+] Logged in as admin on 127.0.0.1:8080
[bh: shell] > hunt
Severity Check Count Example Description
critical dcsync 4 [email protected] Non-Tier-Zero principals with replication rights
critical adcs 95 [email protected] AD CS escalation paths (ESC*, GoldenCert)
high kerberoastable 2 [email protected] Kerberoastable users
...
[*] Details: 'hunt CHECK' (e.g. 'hunt dcsync'), or 'hunt --all'.
[bh: shell] > user PHANTOM\svc_kerb_del --all -o svc_kerb_del.csv
[bh: shell] > ou phantom.corp -t
[bh: shell] > computer DF-MS-SHS -G
[bh: shell] > gpo 'ENABLE [email protected]' -c
[bh: shell] > path --owned -g
스크립팅을 위해 동일한 명령을 비대화형으로 실행할 수 있습니다: bhshell -c "hunt --json" > hunt.json.
| 명령 | 표시 내용 |
|---|---|
user, computer, group, lookup | Kerberoastable / AS-REP roastable, 위임, 비밀번호 경과 기간, Tier Zero 및 owned 플래그, 그룹 중첩, 인바운드/아웃바운드 ACL 제어, 세션 및 로컬 관리자 권한 |
ou | OU, 컨테이너 및 전체 도메인: 객체, Tier Zero 및 owned 개수가 포함된 OU 트리, OU 아래의 모든 객체, 적용되는 GPO(강제 링크, 상속 차단) 및 Tier Zero 외부에서 이를 편집할 수 있는 주체, OU를 제어하는 주체; user/computer -G는 단일 객체에 적용된 GPO를 표시합니다. 동일한 이름의 OU는 고유 이름(distinguished name)으로 선택됩니다 |
gpo | GPO가 연결된 위치, GPO가 적용되는 사용자 및 컴퓨터(상속 차단 및 강제 링크 고려) 및 Tier Zero 외부에서 이를 편집할 수 있는 주체 |
ca, template | 엔터프라이즈 CA 및 인증서 템플릿: 템플릿이 충족하는 ESC 조건(BloodHound에 엣지가 없는 ESC2 및 ESC15 포함), CA의 호스트 및 설정(ESC6, ESC8), 그리고 등록, 관리(ESC7) 또는 재작성(ESC4)할 수 있는 주체 |
search | 속성 필터와 일치하는 객체(search -t user hasspn enabled), 날짜, 경과 기간(90d) 및 와일드카드 포함 |
path | 대상 또는 Tier Zero로의 최단 경로, 모든 owned 객체로부터의 경로, 또는 --via 단계를 통한 경로; 홉 체인, 터미널 그래프 또는 보고서용 SVG/PNG로 출력 |
hunt | 심각도별 도메인 전체 검사: DCSync, Tier Zero 제어, AD CS(ESC*), Kerberoasting, 권한 있는 세션, LAPS/gMSA 리더, 속성에 저장된 비밀번호 또는 기본값으로 남아 있는 비밀번호(Windows 2000 이전 컴퓨터, 미사용 계정, 표준 쌍둥이 계정이 있는 관리자 계정), 탈취 프리미티브(Shadow Credentials, RBCD), GPO 제어, NTLM 릴레이, 트러스트, 가능한 허니토큰...; hunt --owned는 owned 객체가 수행할 수 있는 작업으로 제한합니다 |
cypher, query | 원시 Cypher 및 저장된 쿼리 라이브러리: 번들 쿼리, 사용자 자신의 .cyp 파일(~/.bhshell/queries/ 또는 config query_dirs로 설정한 임의의 폴더) 및 서버에 저장된 쿼리 |
owned, hvt | 이름 또는 이름 파일로 owned 및 Tier Zero 객체를 표시하거나 표시 해제 |
domains, trusts | 도메인별 개수 및 SID 필터링 상태가 포함된 트러스트 맵 |
자신만의 쿼리를 추가하려면 ~/.bhshell/queries/에 .cyp 파일로 저장한 후 이름으로 실행하세요:
$ cat ~/.bhshell/queries/stale-admins.cyp
// description: Enabled adminCount users who have not logged on for a year
MATCH (u:User) WHERE u.admincount = true AND u.enabled = true
AND u.lastlogontimestamp < (datetime().epochseconds - 31536000) RETURN u
[bh: shell] > query run stale-admins -o stale-admins.csv
형식과 다른 폴더(팀 저장소, 참여 건당 하나의 폴더)에 쿼리를 보관하는 방법은 쿼리 라이브러리를 참고하세요.
대부분의 명령은 --json과 -o FILE(JSON 또는 CSV)을 받으며, 객체를 나열하는 명령은 다른 도구에 넘길 이름의 단순 목록을 위해
--names-only 또는 -o FILE.txt도 받습니다. 로그인은 비밀번호(및 MFA) 또는
API 토큰으로 동작하며, 비밀 값은 프롬프트로 입력받거나 환경에서 읽어오며 인자로 전달되지 않습니다.
전체 사용 가이드(모든 명령, 뷰 플래그, 검색 필터, 경로 옵션, 헌트 검사 및
구성 설정)는 docs/USAGE.md에 있습니다.
셸 내부에서 help 또는 help <command>를 실행하세요.
버그 보고와 풀 리퀘스트는 github.com/kr0no/bloodhound-shell/issues에서 환영합니다.
git clone https://github.com/kr0no/bloodhound-shell.git
cd bloodhound-shell
python3 -m venv .venv && . .venv/bin/activate
pip install -e '.[dev]'
pre-commit install
python -m pytest
서버 없이 pytest는 오프라인 테스트만 실행합니다. 나머지는 샘플 데이터가 로드된 BloodHound CE 인스턴스에 대해 실행됩니다:
export BHSHELL_TEST_URL=http://127.0.0.1:8080 BH_USER=admin BH_PASSWORD='...'
python -m pytest -m live
이들은 서버에서만 읽으며 ~/.bhshell은 절대 건드리지 않습니다.
MIT 라이선스에 따라 배포됩니다. 자세한 내용은 LICENSE를 참조하세요.
BloodHound는 SpecterOps의 상표입니다. bhshell은 독립적인 프로젝트이며 SpecterOps와 제휴하거나 SpecterOps의 보증을 받지 않습니다.