Output types

... or how secator unifies all output into common schemas.

secator uses the notion of output types to uniformize tasks output. A task can output one or multiple output types.

The currently available output types are ⍼ Exploit, 💻 Ip, 🔓 Port, 🎤 Record,🏰 Subdomain, 🏷️ Tag, 🔗 Url, 👤 UserAccount, 🚨 Vulnerability.

Feel free to request more output types by opening an issue on the GitHub repo.


⍼ Exploit

@dataclass
class Exploit(OutputType):
    name: str
    id: str
    provider: str
    matched_at: str = ''
    ip: str = ''
    reference: str = ''
    cves: list = field(default_factory=list, compare=False)
    tags: list = field(default_factory=list, compare=False)
    extra_data: dict = field(default_factory=dict, compare=False)

💻 Ip

secator/output_types/ip.py
@dataclass
class Ip(OutputType):
    ip: str
    host: str = ''
    alive: bool = False

🔓 Port

secator/output_types/port.py
@dataclass
class Port(OutputType):
    port: int
    ip: str
    state: str = 'UNKNOWN'
    service_name: str = field(default='', compare=False)
    cpes: list = field(default_factory=list, compare=False)
    host: str = field(default='', repr=True, compare=False)
    protocol: str = field(default='TCP', repr=True, compare=False)
    extra_data: dict = field(default_factory=dict, compare=False)

🎤 Record

secator/output_types/record.py
@dataclass
class Record(OutputType):
    name: str
    type: str
    host: str = ''
    extra_data: dict = field(default_factory=dict, compare=False)

🏰 Subdomain

secator/output_types/subdomain.py
@dataclass
class Subdomain(OutputType):
    host: str
    domain: str
    sources: List[str] = field(default_factory=list, compare=False)
    extra_data: dict = field(default_factory=dict, compare=False)

🏷️ Tag

secator/output_types/tag.py
@dataclass
class Tag(OutputType):
    name: str
    match: str
    extra_data: dict = field(default_factory=dict, repr=True, compare=False)

🔗 Url

secator/output_types/url.py
@dataclass
class Url(OutputType):
    url: str
    host: str = field(default='', compare=False)
    status_code: int = field(default=0, compare=False)
    title: str = field(default='', compare=False)
    webserver: str = field(default='', compare=False)
    tech: list = field(default_factory=list, compare=False)
    content_type: str = field(default='', compare=False)
    content_length: int = field(default=0, compare=False)
    time: str = field(default='', compare=False)
    method: str = field(default='', compare=False)
    words: int = field(default=0, compare=False)
    lines: int = field(default=0, compare=False)
    screenshot_path: str = field(default='', compare=False)
    stored_response_path: str = field(default='', compare=False)
    headers: dict = field(default_actory=dict, repr=True, compare=False)

👤 UserAccount

secator/output_types/user_account.py
@dataclass
class UserAccount(OutputType):
    username: str
    url: str = ''
    email: str = ''
    site_name: str = ''
    extra_data: dict = field(default_factory=dict, compare=False)

🚨 Vulnerability

secator/output_types/vulnerability.py
@dataclass
class Vulnerability(OutputType):
    name: str
    provider: str = ''
    id: str = ''
    matched_at: str = ''
    ip: str = field(default='', compare=False)
    confidence: int = 'low'
    severity: str = 'unknown'
    cvss_score: float = 0
    tags: List[str] = field(default_factory=list)
    extra_data: dict = field(default_factory=dict, compare=False)
    description: str = field(default='', compare=False)
    references: List[str] = field(default_factory=list, compare=False)
    reference: str = field(default='', compare=False)
    confidence_nb: int = 0
    severity_nb: int = 0

Last updated