Interface#
| |
AgentlessTarget#
Each target is represented as an AgentlessTarget dataclass:
| |
The credential_id field references a credential in the credential store. When credentials are provided, they are resolved and passed to execute() via the credentials mapping.
AgentlessResult#
Each target produces an AgentlessResult:
| |
Metadata Fields#
| Field | Type | Description |
|---|---|---|
name | str | Unique module name |
description | str | Human-readable description |
author | str | Author name |
protocol | str | Network protocol (e.g., “ssh”, “smb”) |
connection_params | dict[str, OptionSchema] | Required target connection parameters |
operations | list[str] | Supported operations (e.g., “exec”, “enumerate”) |
options_schema | dict[str, OptionSchema] | Per-operation options |
mitre_attack | list[str] | ATT&CK technique IDs |
dependencies | list[str] | pip packages required by the module |
Key Concepts#
Multi-Target Execution#
The execute method receives a list of AgentlessTarget objects and returns a list of AgentlessResult objects. Modules handle their own parallelism internally when targeting multiple hosts.
Credential Consumption#
When targets have a credential_id set, the manager resolves the credentials from the store and passes them to execute() via the credentials parameter – a dict mapping each credential_id to a decrypted credential dict containing keys like username, secret, domain, etc.
Credential Contribution#
Return ExtractedCredential objects in the result’s credentials field to auto-populate the credential store with discovered credentials.
Proxy Support#
When a proxy configuration is specified, the resolved proxy dict is passed to execute() via the proxy parameter. Your module can use this to route connections through SOCKS or SSH tunnels.
Deployment#
Place the file in plugins/agentless/my_tool.py. Discover with:
| |