Skip to content

bloodhound-cli is a Python command-line tool designed to query and manage data from a BloodHound database running on Neo4j. It enables you to enumerate ACLs, computers, and users (including filtering by attributes like password not required or password never expires) in an Active Directory environment ingested by BloodHound.

License

Notifications You must be signed in to change notification settings

ADScanPro/bloodhound-cli

Repository files navigation

bloodhound-cli

bloodhound-cli is a Python command-line tool designed to query and manage data from BloodHound with support for both Legacy (Neo4j) and Community Edition (CE) backends.

πŸ—οΈ Modular Architecture

The CLI now features a clean, modular architecture that eliminates code duplication and follows best practices:

src/bloodhound_cli/
β”œβ”€β”€ core/
β”‚   β”œβ”€β”€ base.py          # Abstract base class with common interface
β”‚   β”œβ”€β”€ legacy.py        # Neo4j implementation
β”‚   β”œβ”€β”€ ce.py           # HTTP API implementation  
β”‚   └── factory.py      # Factory pattern for client creation
β”œβ”€β”€ main.py             # CLI entry point
└── tests/              # Comprehensive test suite

✨ Key Features

πŸ”„ Dual Backend Support

  • Legacy (Neo4j): Full feature set with direct Neo4j queries
  • Community Edition (CE): HTTP API integration with BloodHound CE

🎯 Unified Interface

  • Same commands work with both backends
  • Automatic client selection based on --edition flag
  • No code duplication - queries centralized in base classes

πŸ§ͺ Comprehensive Testing

  • Unit tests with mocks for isolated testing
  • Integration tests with real BloodHound CE and GOAD data
  • Docker-based test environment with realistic data

πŸ”§ Advanced Query Support

  • User enumeration with domain filtering
  • Computer enumeration with LAPS filtering
  • Admin and high-value user detection
  • Password policy analysis
  • Session and access path queries

πŸš€ Installation

Recommended: pipx (isolated environment)

pipx install bloodhound-cli

Alternative: pip

pip install bloodhound-cli

Development: from source

git clone https://github.com/ADScanPro/bloodhound-cli.git
cd bloodhound-cli
pip install -e .

πŸ“– Usage

Basic Commands

List Users

# Legacy (Neo4j)
bloodhound-cli --edition legacy user -d mydomain.local

# Community Edition (CE)  
bloodhound-cli --edition ce user -d mydomain.local

List Computers

# All computers
bloodhound-cli --edition ce computer -d mydomain.local

# Filter by LAPS
bloodhound-cli --edition ce computer -d mydomain.local --laps true

Admin Users

bloodhound-cli --edition ce admin -d mydomain.local

High Value Users

bloodhound-cli --edition ce highvalue -d mydomain.local

Connection Configuration

Legacy (Neo4j)

bloodhound-cli --edition legacy user -d mydomain.local \
  --uri bolt://localhost:7687 \
  --user neo4j \
  --password mypassword

Community Edition (CE)

bloodhound-cli --edition ce user -d mydomain.local \
  --base-url http://localhost:8080 \
  --username admin \
  --ce-password Bloodhound123!

Debug and Verbose Output

bloodhound-cli --edition ce --debug --verbose user -d mydomain.local

πŸ§ͺ Testing

Unit Tests

pytest tests/unit/ -v

Integration Tests

# Requires BloodHound CE running
pytest tests/integration/ -v

Full Test Suite with GOAD Data

# Setup test environment with GOAD data
./scripts/setup-complete.sh
./scripts/test-with-goad-domains.sh

πŸ›οΈ Architecture Benefits

βœ… No Code Duplication

  • Queries defined once in base classes
  • Legacy and CE implementations inherit common interface
  • Changes propagate automatically to both backends

βœ… Easy Extension

  • Add new queries by implementing abstract methods
  • Factory pattern handles client creation
  • Clean separation of concerns

βœ… Comprehensive Testing

  • Unit tests with mocks for fast feedback
  • Integration tests with real data
  • Docker-based test environment

βœ… Maintainable Code

  • Clear separation between CLI, core logic, and implementations
  • Type hints and documentation
  • Follows Python best practices

πŸ”§ Development

Project Structure

bloodhound-cli/
β”œβ”€β”€ src/bloodhound_cli/
β”‚   β”œβ”€β”€ core/           # Core business logic
β”‚   β”œβ”€β”€ main.py         # CLI entry point
β”‚   └── __init__.py
β”œβ”€β”€ tests/              # Test suite
β”œβ”€β”€ scripts/            # Automation scripts
└── test-data/          # Test data (GOAD)

Adding New Queries

  1. Add method to BloodHoundClient base class
  2. Implement in both BloodHoundLegacyClient and BloodHoundCEClient
  3. Add CLI command in main.py
  4. Create tests in tests/

Testing Strategy

  • Unit Tests: Mock external dependencies
  • Integration Tests: Real BloodHound CE with GOAD data
  • CI/CD: Automated testing with Docker

πŸ“Š Supported Domains (GOAD Test Data)

The project includes comprehensive test data from GOAD (Game of Active Directory):

  • north.sevenkingdoms.local: House Stark domain
  • essos.local: Daenerys Targaryen domain
  • sevenkingdoms.local: King's Landing domain

🎯 Roadmap

  • Complete all Legacy queries for CE
  • Add more advanced query capabilities
  • Enhanced error handling and logging
  • Performance optimizations
  • Additional test coverage

πŸ“„ License

This project is licensed under the MIT License.

🀝 Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Add tests for new functionality
  4. Ensure all tests pass
  5. Submit a pull request

πŸ“ž Support

For issues and questions:

  • Create an issue on GitHub
  • Check the test suite for usage examples
  • Review the integration tests for setup guidance

About

bloodhound-cli is a Python command-line tool designed to query and manage data from a BloodHound database running on Neo4j. It enables you to enumerate ACLs, computers, and users (including filtering by attributes like password not required or password never expires) in an Active Directory environment ingested by BloodHound.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

  •  
  •  
  •