Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
cypherhound — 템플릿 기반 BloodHound 터미널 동반 도구 | Kitploit
도구/GitHubGitHub/fin3ss3g0d/cypherhound
ReconnaissanceInformation GatheringPenetration TestingUtilities & Frameworks
GitHubfin3ss3g0d/cypherhound

cypherhound

템플릿 기반 BloodHound 터미널 동반 도구

저장소 보기
45436418개월 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CypherHound

logo

BloodHound 데이터 세트를 위한 Neo4j Cypher 쿼리와 이를 BloodHound CE로 자동 가져오기 위한 스크립트를 포함하는 Python3 터미널 애플리케이션입니다.

출력 샘플

터미널

demo

HTML 보고서

report summary

HTML 보고서 (계속)

details sample

왜?

BloodHound는 모든 침투 테스터에게 필수적인 도구입니다. 하지만 설계상 몇 가지 부정적인 부작용이 있습니다. 제가 경험한 가장 큰 문제점과 이 도구가 해결하려는 부분을 설명하겠습니다:

  1. 내 도구는 목록으로 생각한다 - 내 도구가 내보낸 JSON 그래프를 파싱할 때까지, 다른 도구로 실제 공격을 수행하기 위해 그래프 결과를 줄 단위 .txt 파일로 얻어야 한다.
  2. 그래프 결과 복사/붙여넣기 - 첫 번째 문제와 연결되지만, 이걸 굳이 설명해야 할까?
  3. 그래프가 너무 커서 그릴 수 없는 경우 - 대규모 AD 환경, 동일한 그래프에 여러 최단 경로가 그려지는 경우 등. 어떤 그래프에 포함된 정보는 공격자로서의 목표를 달성하는 데 도움이 되며, 모든 데이터를 효율적으로 볼 수 있어야 한다.
  4. 사용자 지정 Cypher를 수동으로 실행하는 것은 시간이 많이 걸린다 - 자동화하자 :)

이 도구는 레드 팀과 블루 팀 모두에게 상당한 가치를 제공할 수 있습니다.

기능

CypherHound로 BloodHound 데이터를 다시 제어하세요!

  • YAML 파일에서 Cypher 템플릿 읽기
    • 사용자 입력(사용자, 그룹, 컴퓨터별)에 기반한 검색을 위한 Cypher 설정
    • 사용자 정의 정규식 Cypher
  • 모든 결과의 사용자 정의 내보내기
    • grep/cut/awk 친화적인 형식의 예제 제공
    • 모든 Cypher 조합을 현대적이고 세련된 HTML 보고서로 내보내기
  • BloodHound CE GUI에서 동일한 쿼리 실행
    • YAML -> JSON 변환기 및 자동 BloodHound CE 쿼리 임포터
    • BloodHound Legacy customqueries.json를 BloodHound CE로 가져오는 스크립트 포함

설치

python3이 설치되어 있는지 확인하고 다음을 실행하세요:

python3 -m pip install -r requirements.txt

사용법

다음 명령으로 프로그램을 시작하세요: python3 cypherhound.py -c config.json -y queries.yaml

config.json

프로그램은 json 형식의 구성 파일을 읽습니다. 아래는 이 파일의 예시입니다:

{
    "user": "neo4j",
    "pwd": "password",
    "database": "neo4j"
}

여기서:

  • user는 Neo4j 사용자 이름입니다.
  • pwd는 Neo4j 비밀번호입니다.
  • database는 Neo4j 데이터베이스입니다.

YAML 형식

프로그램은 아래 형식의 YAML 파일에서 쿼리를 읽습니다. ad-queries.yaml은 Active Directory 관련 쿼리를 포함한 예제로 제공됩니다. 최단 경로 쿼리의 경우 msg_template은 필수가 아니지만, 경로를 포함하는 변수를 반환해야 합니다

queries:
- group: general
  desc: 소유한 주체에 대한 모든 AddKeyCredentialLink 권한 나열
  cypher: |-
    MATCH (n {owned: true})-[r:AddKeyCredentialLink]->(m)
    RETURN n.name AS n_name, m.name AS m_name, labels(m) AS labels_m, labels(n) AS labels_n
    ORDER BY n.name
  msg_template: |-
    {{ n_name }} ({{ labels_n[0] }}/{{ labels_n[1] }})이(가) {{ m_name }} ({{ labels_m[0] }}/{{ labels_m[1] }})에 대해 AddKeyCredentialLink 권한을 가짐

키/값 쌍에 대한 표 설명은 아래와 같습니다:

키설명
group이 쿼리가 속한 그룹, 그룹은 사용자 정의입니다 (예: "general")
desc쿼리에 대한 설명
cypherNeo4j 형식의 쿼리 자체
msg_templateCypher 변수 기반 터미널 출력을 위한 Jinja2 템플릿, Neo4j 변수에 별칭을 사용하여 Jinja가 중첩 변수로 렌더링하지 않도록 하세요

Cypher의 동적 매개변수 (Jinja2 params.*)

프로그램은 Jinja2를 사용하여 Cypher를 렌더링합니다. set 명령으로 런타임 매개변수를 정의하고 YAML에서 {{ params.<key> }}로 참조하세요.

CLI

set <key> <value...> # 예: set user [email protected]
unset <key> # 선택 사항
show # 선택 사항

YAML 예제

- group: user
  desc: 이 사용자에 대한 모든 권한 나열
  cypher: |-
    MATCH (n:User)-[r]->(m)
    WHERE n.name =~ '((?i){{ params.user }})'
    RETURN n.name AS n_name, TYPE(r) AS rel_type, labels(m) AS labels_m, m.name AS m_name
    ORDER BY TYPE(r)
  msg_template: |-
    사용자 {{ n_name }}이(가) {{ m_name }} ({{ labels_m[0] }}/{{ labels_m[1] }})에 대해 {{ rel_type }} 권한을 가짐

일반적인 매개변수 패턴

매개변수 키예시 값Cypher에서 사용
params.user[email protected]= {{ params.user }}
params.user_regex(?i)john\.doe(@example\.com)?=~ '{{ params.user_regex }}'
params.groupDomain [email protected]= {{ params.group }}
params.prefixACME-STARTS WITH {{ params.prefix }}

JSON 형식

이 리포지토리는 JSON 파일에서 BloodHound CE UI로 쿼리를 자동 가져오는 query-importer.py 스크립트를 제공합니다. 또한 터미널 애플리케이션용 YAML 파일을 query-importer.py 및 BloodHound CE가 예상하는 JSON 형식으로 변환하는 bh_query_converter.py도 제공됩니다. 필요한 JSON 형식의 예시는 아래와 같습니다:

{
  "queries": [
    {
      "name": "소유한 주체에 대한 모든 AddKeyCredentialLink 권한 나열",
      "description": "소유한 주체에 대한 모든 AddKeyCredentialLink 권한 나열 - 일반",
      "query": "MATCH p=(n {owned: true})-[r:AddKeyCredentialLink]->(m)\nRETURN p\nORDER BY n.name"
    },
    {
      "name": "Users, Domain Users, Authenticated Users, Everyone 그룹에 대한 모든 AddKeyCredentialLink 권한 나열",
      "description": "Users, Domain Users, Authenticated Users, Everyone 그룹에 대한 모든 AddKeyCredentialLink 권한 나열 - 일반",
      "query": "MATCH p=(n:Group)-[r:AddKeyCredentialLink]->(m)\nWHERE (n.objectid =~ \"(?i)S-1-5-21-.*-513\" OR n.objectid =~ \"(?i).*-S-1-5-11\" OR n.objectid =~ \"(?i).*-S-1-1-0\" OR n.objectid =~ \"(?i).*-S-1-5-32-545\")\nRETURN p\nORDER BY n.name"
    }
  ]
}

명령어

전체 명령어 메뉴는 아래와 같습니다:

문서화된 명령어 (자세한 내용은 'help -v', 특정 주제는 'help <topic>' 사용):
======================================================================================================
alias                 별칭 관리
clear                 터미널 지우기
cls                   터미널 지우기
edit                  텍스트 편집기를 실행하고 선택적으로 파일 열기
export                쿼리를 실행하고 결과 저장
help                  사용 가능한 명령어 목록 표시 또는 특정 명령어에 대한 자세한 도움말 제공
history               이전에 입력한 명령어 보기, 실행, 편집, 저장 또는 지우기
list                  그룹별로 쿼리 나열
macro                 매크로 관리
report                여러 쿼리를 실행하고 HTML 보고서 생성
run                   쿼리 실행
run_pyscript          콘솔 내에서 Python 스크립트 파일 실행
run_script            ASCII 또는 UTF-8 텍스트로 인코딩된 스크립트 파일의 명령어 실행
search                저장된 쿼리 전체 텍스트 검색
set                   동적 검색 매개변수 설정 (set <TARGET> <VALUE...>)
shell                 OS 프롬프트에서 명령어 실행
shortcuts             사용 가능한 바로가기 목록 표시
show                  동적 검색 매개변수 표시
unset                 동적 검색 매개변수 해제 (unset <TARGET>)

문서화되지 않은 명령어:
======================
exit  q  quit  stop

BloodHound CE 통합

custom searches

scripts/bloodhound-ce/query-importer.py

query-importer.py 스크립트는 JSON 파일에서 BloodHound CE UI로 쿼리를 자동 가져옵니다. 또한 터미널 애플리케이션용 YAML 파일을 query-importer.py 및 BloodHound CE가 예상하는 JSON 형식으로 변환하는 bh_query_converter.py도 제공됩니다.

scripts/bloodhound-ce/bh_query_converter.py

도구 다운로드