Some checks failed
CI Docker Mining Proof / Linux agent hashrate proof (push) Has been cancelled
Parse technology stack from crawl headers, grab SSH/HTTP/WinRM banners, merge smart port bundles with FleetPorts, and suggest deploy-kit lane plus SSM for EC2 metadata targets.
102 lines
3.3 KiB
Python
102 lines
3.3 KiB
Python
from pathlib import Path
|
|
|
|
CONTENT = r"""package recon
|
|
|
|
import "time"
|
|
|
|
var FleetPorts = []int{22, 80, 443, 445, 3389, 5985, 5986, 6262, 8080, 8443}
|
|
|
|
const (
|
|
DefaultPortDialTimeout = 2 * time.Second
|
|
DefaultCrawlDepth = 2
|
|
DefaultCrawlMaxPages = 50
|
|
)
|
|
|
|
type ScanRequest struct {
|
|
Host string `json:"host"`
|
|
Port int `json:"port,omitempty"`
|
|
Scheme string `json:"scheme,omitempty"`
|
|
Paths []string `json:"paths,omitempty"`
|
|
Profile string `json:"profile,omitempty"`
|
|
}
|
|
|
|
type PortResult struct {
|
|
Port int `json:"port"`
|
|
Open bool `json:"open"`
|
|
}
|
|
|
|
type FormFinding struct {
|
|
PageURL string `json:"page_url"`
|
|
Action string `json:"action,omitempty"`
|
|
Method string `json:"method,omitempty"`
|
|
Enctype string `json:"enctype,omitempty"`
|
|
Fields []string `json:"fields,omitempty"`
|
|
HasFile bool `json:"has_file_input,omitempty"`
|
|
Multipart bool `json:"multipart,omitempty"`
|
|
}
|
|
|
|
type URLFieldFinding struct {
|
|
PageURL string `json:"page_url"`
|
|
Name string `json:"name"`
|
|
Type string `json:"type,omitempty"`
|
|
Hint string `json:"hint"`
|
|
}
|
|
|
|
type PageFinding struct {
|
|
URL string `json:"url"`
|
|
StatusCode int `json:"status_code"`
|
|
Title string `json:"title,omitempty"`
|
|
}
|
|
|
|
type CrawlReport struct {
|
|
PagesFetched int `json:"pages_fetched"`
|
|
Pages []PageFinding `json:"pages,omitempty"`
|
|
FileInputs []FormFinding `json:"file_inputs,omitempty"`
|
|
MultipartForms []FormFinding `json:"multipart_forms,omitempty"`
|
|
URLFields []URLFieldFinding `json:"url_fields,omitempty"`
|
|
SSRFScore int `json:"ssrf_score"`
|
|
CMSFingerprints []string `json:"cms_fingerprints,omitempty"`
|
|
}
|
|
|
|
type DeployRecommendation struct {
|
|
Lane string `json:"lane,omitempty"`
|
|
Template string `json:"template,omitempty"`
|
|
Reason string `json:"reason"`
|
|
Priority int `json:"priority"`
|
|
}
|
|
|
|
type ScanReport struct {
|
|
ScanID string `json:"scan_id,omitempty"`
|
|
Host string `json:"host"`
|
|
Profile string `json:"profile,omitempty"`
|
|
Status string `json:"status,omitempty"`
|
|
ScannedAt time.Time `json:"scanned_at"`
|
|
Ports []PortResult `json:"ports"`
|
|
Crawl *CrawlReport `json:"crawl,omitempty"`
|
|
RelayVia string `json:"relay_via,omitempty"`
|
|
UDPHints []UDPHint `json:"udp_hints,omitempty"`
|
|
PathTracerHints []string `json:"path_tracer_hints,omitempty"`
|
|
Message string `json:"message,omitempty"`
|
|
Recommendations []DeployRecommendation `json:"recommendations,omitempty"`
|
|
}
|
|
|
|
type ReconScanDiff struct {
|
|
NewPorts []int `json:"new_ports,omitempty"`
|
|
NewForms []FormFinding `json:"new_forms,omitempty"`
|
|
}
|
|
|
|
type ReconHistoryEntry struct {
|
|
ScanID string `json:"scan_id"`
|
|
Host string `json:"host"`
|
|
Profile string `json:"profile,omitempty"`
|
|
Status string `json:"status"`
|
|
ScannedAt time.Time `json:"scanned_at"`
|
|
Report *ScanReport `json:"report,omitempty"`
|
|
Diff *ReconScanDiff `json:"diff,omitempty"`
|
|
}
|
|
"""
|
|
|
|
Path(__file__).resolve().parents[1] / "server/internal/recon/types.go"
|
|
Path(r"g:/crypto miner/server/internal/recon/types.go").write_text(CONTENT, encoding="utf-8", newline="\n")
|
|
print("wrote types.go")
|