Skip to main content

ploit_malper/
models.rs

1use serde::{Deserialize, Serialize};
2use serde_json::Value;
3
4#[derive(Debug, Clone, Serialize, Deserialize, Default)]
5pub struct ScanRecord {
6    pub target: String,
7    pub tool: String,
8    pub title: String,
9    pub severity: String,
10    pub port: Option<u16>,
11    pub cve: Option<String>,
12    pub service: Option<String>,
13    pub raw: Value,
14    #[serde(default, skip_serializing_if = "Option::is_none")]
15    pub nvd_description: Option<String>,
16    #[serde(default, skip_serializing_if = "Option::is_none")]
17    pub nvd_cvss_v3: Option<f32>,
18    #[serde(default, skip_serializing_if = "Option::is_none")]
19    pub nvd_cvss_v3_severity: Option<String>,
20    #[serde(default, skip_serializing_if = "Option::is_none")]
21    pub nvd_cvss_v2: Option<f32>,
22    #[serde(default, skip_serializing_if = "Option::is_none")]
23    pub nvd_published: Option<String>,
24    #[serde(default, skip_serializing_if = "Option::is_none")]
25    pub nvd_last_modified: Option<String>,
26    #[serde(default, skip_serializing_if = "Vec::is_empty")]
27    pub nvd_references: Vec<String>,
28}
29
30#[derive(Debug, Clone, Serialize, Deserialize)]
31pub struct DedupResult {
32    pub unique_count: usize,
33    pub removed_count: usize,
34    pub records: Vec<ScanRecord>,
35}
36
37#[derive(Debug, Clone, Serialize, Deserialize)]
38pub struct DedupStats {
39    pub total: usize,
40    pub unique: usize,
41    pub removed: usize,
42}
43
44#[derive(Debug, Clone, Serialize, Deserialize)]
45pub struct ModuleSuggestion {
46    pub service_banner: String,
47    pub suggested_module: String,
48    pub confidence: String,
49}
50
51#[derive(Debug, Clone, Serialize, Deserialize)]
52pub struct PayloadRecipe {
53    pub platform: String,
54    pub architecture: String,
55    pub lhost: String,
56    pub lport: u16,
57    pub format: String,
58    pub output_path: String,
59    pub encoder: Option<String>,
60    pub iterations: Option<u32>,
61    pub command: String,
62}
63
64#[derive(Debug, Clone, Serialize, Deserialize)]
65pub struct NVDCVEInfo {
66    pub cve_id: String,
67    pub description: String,
68    pub cvss_v3_score: Option<f32>,
69    pub cvss_v3_severity: Option<String>,
70    pub cvss_v2_score: Option<f32>,
71    pub published: String,
72    pub last_modified: String,
73    pub references: Vec<String>,
74}
75
76#[derive(Debug, Clone, Serialize, Deserialize)]
77pub struct MSFWorkspaceInfo {
78    pub name: String,
79    pub scope: String,
80    pub host_count: u64,
81}
82
83#[derive(Debug, Clone, Serialize, Deserialize)]
84pub struct MSFHostInfo {
85    pub address: String,
86    pub os_name: String,
87    pub os_flavor: String,
88    pub state: String,
89    pub notes_count: u64,
90}
91
92#[derive(Debug, Clone, Serialize, Deserialize)]
93pub struct MSFLoginResult {
94    pub success: bool,
95    pub token: String,
96    pub error: String,
97}
98
99#[derive(Debug, Clone, Serialize, Deserialize)]
100pub struct MSFWorkspacesResult {
101    pub workspaces: Vec<MSFWorkspaceInfo>,
102    pub error: String,
103}
104
105#[derive(Debug, Clone, Serialize, Deserialize)]
106pub struct MSFHostsResult {
107    pub hosts: Vec<MSFHostInfo>,
108    pub error: String,
109}
110
111#[derive(Debug, Clone, Serialize, Deserialize)]
112pub struct MSFHostCheckResult {
113    pub exists: bool,
114    pub error: String,
115}