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.
⍼ 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