|
|
@@ -14,6 +14,7 @@ use crate::start_pentest;
|
|
|
|
use crate::get_user_input;
|
|
|
|
use crate::get_user_input;
|
|
|
|
use crate::menu;
|
|
|
|
use crate::menu;
|
|
|
|
use crate::portscan_controls;
|
|
|
|
use crate::portscan_controls;
|
|
|
|
|
|
|
|
use crate::victim_commands;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
fn help(command: Option<String>){
|
|
|
|
fn help(command: Option<String>){
|
|
|
@@ -48,6 +49,7 @@ fn help(command: Option<String>){
|
|
|
|
"exit" => {println!("Command:exit\nAliases:(none)\nThis command exits the pentest_tool, it will save all project infomation, and wait for all threads to re-join the main thread before exiting."); return;},
|
|
|
|
"exit" => {println!("Command:exit\nAliases:(none)\nThis command exits the pentest_tool, it will save all project infomation, and wait for all threads to re-join the main thread before exiting."); return;},
|
|
|
|
"settings" => {println!("\n\nThe settings file is located at ~/.config/pyro_pentest_tool/conf\n\nThe format is setting_name:setting_value.\n\nNeeded settings are\n project_files - the place to store current project files folders\n\n projtect_notes - the place to store current project notes\n\n tools_folder - the place to store custom tools like those downloaded from github\n\n upcoming_files - the place to store upcoming project files folders\n\n upcoming_notes - The place to store upcoming project note files\n\n box_template - the name of the distrobox you want to clone for project boxes\n\n terminal - the command you use to launch a terminal, while running a specific command: Ex: konsole -e \n\n cracking_rig - the user and host you use for a personal cracking rig in the openssh formating: Ex: pyro@cracking_rig or pyro@192.168.1.101 if you do not have a cracking rig the default is @n\n\n rockyou_location - the location on the cracking rig for the rockyou.txt file default is n\n\n rule_location - the location on the cracking rig for the one rule to rule them all file. Default is n\n\n pass_file - this is the location where you store your standard password spray file. If you do not have a custom one this tool provides one. The default is ~/.config/pyro_pentest_tool/passwordspary.md\n\n fingerprint - this is whether you want fingerprint authentication within your distroboxes, takes y/n\n\n vault_name - the name of your obsidian vault, default is notes\n\n"); return;},
|
|
|
|
"settings" => {println!("\n\nThe settings file is located at ~/.config/pyro_pentest_tool/conf\n\nThe format is setting_name:setting_value.\n\nNeeded settings are\n project_files - the place to store current project files folders\n\n projtect_notes - the place to store current project notes\n\n tools_folder - the place to store custom tools like those downloaded from github\n\n upcoming_files - the place to store upcoming project files folders\n\n upcoming_notes - The place to store upcoming project note files\n\n box_template - the name of the distrobox you want to clone for project boxes\n\n terminal - the command you use to launch a terminal, while running a specific command: Ex: konsole -e \n\n cracking_rig - the user and host you use for a personal cracking rig in the openssh formating: Ex: pyro@cracking_rig or pyro@192.168.1.101 if you do not have a cracking rig the default is @n\n\n rockyou_location - the location on the cracking rig for the rockyou.txt file default is n\n\n rule_location - the location on the cracking rig for the one rule to rule them all file. Default is n\n\n pass_file - this is the location where you store your standard password spray file. If you do not have a custom one this tool provides one. The default is ~/.config/pyro_pentest_tool/passwordspary.md\n\n fingerprint - this is whether you want fingerprint authentication within your distroboxes, takes y/n\n\n vault_name - the name of your obsidian vault, default is notes\n\n"); return;},
|
|
|
|
"parse normal nmap file" | "pnnf" | "parse nmap" | "pn" => {println!("Command:parse normal nmap file\nAliases: pnnf, parse nmap, pn\n\nThis command parses the normal output of an nmap scan (like if you just tee'd or >'d it to a file) and outputs in host:port or int the coablt strike tsv format. It will attempt to find the file within the active project's files folder, and if it can't find the file it will prompt you for input.")},
|
|
|
|
"parse normal nmap file" | "pnnf" | "parse nmap" | "pn" => {println!("Command:parse normal nmap file\nAliases: pnnf, parse nmap, pn\n\nThis command parses the normal output of an nmap scan (like if you just tee'd or >'d it to a file) and outputs in host:port or int the coablt strike tsv format. It will attempt to find the file within the active project's files folder, and if it can't find the file it will prompt you for input.")},
|
|
|
|
|
|
|
|
"sharpersist command" | "spc" | "sharp scheduled task" | "sst" => {println!("Command: sharpersist command\nAliases: spc, sharp scheduled task, sst\n\nThis comand prints the commands to run to use sharpersist.exe to create a scheduled task that runs hourly called FRPersist.")},
|
|
|
|
"show scope" | "ss" | "show s" | "s s" | "scope" => {println!("Command:show scope\nAliases:ss, show s, s s, scope\n\nThis command displays the current project's scope as just the hosts in the scope table in your notes.")},
|
|
|
|
"show scope" | "ss" | "show s" | "s s" | "scope" => {println!("Command:show scope\nAliases:ss, show s, s s, scope\n\nThis command displays the current project's scope as just the hosts in the scope table in your notes.")},
|
|
|
|
_ => ()
|
|
|
|
_ => ()
|
|
|
|
}
|
|
|
|
}
|
|
|
@@ -84,6 +86,7 @@ prune distroboxes | pdb | prune
|
|
|
|
clear | clear screen | cls
|
|
|
|
clear | clear screen | cls
|
|
|
|
parse nomral nmap file | pnnf | parse nmap | pn
|
|
|
|
parse nomral nmap file | pnnf | parse nmap | pn
|
|
|
|
show scope | ss | show s | s s | scope
|
|
|
|
show scope | ss | show s | s s | scope
|
|
|
|
|
|
|
|
|
|
|
|
help | ? | -h
|
|
|
|
help | ? | -h
|
|
|
|
")
|
|
|
|
")
|
|
|
|
}
|
|
|
|
}
|
|
|
@@ -193,6 +196,7 @@ pub fn run_command(cmd: String,
|
|
|
|
"parse normal nmap file" | "pnnf" | "parse nmap" | "pn" => {portscan_controls::parse_normal_nmap_output(&active_project); return None;},
|
|
|
|
"parse normal nmap file" | "pnnf" | "parse nmap" | "pn" => {portscan_controls::parse_normal_nmap_output(&active_project); return None;},
|
|
|
|
"show scope" | "ss" | "show s" | "s s" | "scope" => {let scope_res = info_controls::get_scope_entries(&active_project); if scope_res.is_some(){for host in scope_res.unwrap(){println!("{}", host)}}return None},
|
|
|
|
"show scope" | "ss" | "show s" | "s s" | "scope" => {let scope_res = info_controls::get_scope_entries(&active_project); if scope_res.is_some(){for host in scope_res.unwrap(){println!("{}", host)}}return None},
|
|
|
|
"port scan" | "ps" | "nmap" | "nmap scan" | "ns" | "nm" => {portscan_controls::run_nmap_portscan(&active_project); return None;},
|
|
|
|
"port scan" | "ps" | "nmap" | "nmap scan" | "ns" | "nm" => {portscan_controls::run_nmap_portscan(&active_project); return None;},
|
|
|
|
|
|
|
|
"sharpersist command" | "spc" | "sharp scheduled task" | "sst" => {victim_commands::sharp_persist_command(&tools_dir); return None;},
|
|
|
|
_ => {help(None); println!("\n\n unknown command."); return None;}
|
|
|
|
_ => {help(None); println!("\n\n unknown command."); return None;}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
@@ -270,6 +274,7 @@ pub fn cli(interactive: bool,
|
|
|
|
";
|
|
|
|
";
|
|
|
|
print_banner(banner);
|
|
|
|
print_banner(banner);
|
|
|
|
while loopize{
|
|
|
|
while loopize{
|
|
|
|
|
|
|
|
project_controls::save_projects(&projects, &config_path);
|
|
|
|
let active_project = get_active_project(&projects);
|
|
|
|
let active_project = get_active_project(&projects);
|
|
|
|
print!("
|
|
|
|
print!("
|
|
|
|
Active Project: {}, {}
|
|
|
|
Active Project: {}, {}
|
|
|
|