Create main.rs
This commit is contained in:
112
initial_recon/src/main.rs
Normal file
112
initial_recon/src/main.rs
Normal file
@@ -0,0 +1,112 @@
|
|||||||
|
use std::fs;
|
||||||
|
use std::env;
|
||||||
|
use std::str;
|
||||||
|
use std::io::Write;
|
||||||
|
|
||||||
|
struct Target{
|
||||||
|
host_address: String,
|
||||||
|
subdomains: String,
|
||||||
|
url: String,
|
||||||
|
ports: Vec<String>,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
fn get_subdomains(mut targets: Vec<Target>){
|
||||||
|
let mut loopize = true;
|
||||||
|
let mut domains: Vec<String> = Vec::new();
|
||||||
|
while loopize{
|
||||||
|
let mut domain = String::new();
|
||||||
|
println!("domain to research? (enter DONE when done)");
|
||||||
|
std::io::stdin().read_line(&mut domain).unwrap();
|
||||||
|
if domain.contains("DONE"){
|
||||||
|
loopize = false;
|
||||||
|
break
|
||||||
|
}
|
||||||
|
domains.push(domain.clone());
|
||||||
|
}
|
||||||
|
for domain in domains{
|
||||||
|
let mut return_string = String::new();
|
||||||
|
let output = std::process::Command::new("gobuster")
|
||||||
|
.arg("dns")
|
||||||
|
.arg("-d")
|
||||||
|
.arg(domain)
|
||||||
|
.arg("-w")
|
||||||
|
.arg("/home/work_folder/FRSecure/hacking_tools/wordlists/SecLists/Discovery/DNS/subdomains-top1million-110000.txt")
|
||||||
|
.output()
|
||||||
|
.expect("Error running gobuster command");
|
||||||
|
return_string.push_str(match str::from_utf8(&output.stdout){Ok(val) => val, Err(_) => panic!("got a non UFT-8 data from it")});
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let args: Vec<String> = env::args().collect();
|
||||||
|
if args.len() != 4{
|
||||||
|
print!{"
|
||||||
|
This program is mean to take the output of nessus and build the notes in obsidian note for you.
|
||||||
|
export a nessus report as a csv with the default columns selected then point this program at it
|
||||||
|
|
||||||
|
USAGE:
|
||||||
|
inital_recon /path/to/nessus/csv org_name Project_name
|
||||||
|
"}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
let mut targets: Vec<Target> = Vec::new();
|
||||||
|
// pentest notes is the path to your obsidian folder with pentest notes in it
|
||||||
|
let pentest_notes = "/home/pyro/syncs/work_folder/FRSecure/notes/Hack_Notes/pentest_notes/current";
|
||||||
|
let company_name = &args[2];
|
||||||
|
let project_name = &args[3];
|
||||||
|
let project_folder_path = format!("{}/{}/{}", pentest_notes, company_name,project_name);
|
||||||
|
let host_notes = format!("{}/{}",project_folder_path, "host_notes.md");
|
||||||
|
let attack_notes = format!("{}/{}", project_folder_path, "attacks.md");
|
||||||
|
let nessus_csv = fs::read_to_string(&args[1]).expect("Failed to read nessus file");
|
||||||
|
let nessus_lines: Vec<&str> = nessus_csv.split("\n").collect();
|
||||||
|
for line in nessus_lines{
|
||||||
|
let mut new = false;
|
||||||
|
if line.len() != 0{
|
||||||
|
let split_line: Vec<&str> = line.split(",").collect();
|
||||||
|
let ip = split_line[0];
|
||||||
|
let port = split_line[2];
|
||||||
|
for target in &mut targets{
|
||||||
|
if target.host_address == ip.to_owned(){
|
||||||
|
let mut new_port = true;
|
||||||
|
for existing_port in &target.ports{
|
||||||
|
if port == existing_port{
|
||||||
|
new_port = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if new_port == true{
|
||||||
|
target.ports.push(port.to_owned());
|
||||||
|
}
|
||||||
|
new = true;
|
||||||
|
//println!("{}", new);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if new == false{
|
||||||
|
//println!("{}", new);
|
||||||
|
let new_target = Target{host_address: ip.to_owned(), ports: vec!(port.to_owned()), url: "".to_owned(), subdomains: "".to_owned()};
|
||||||
|
targets.push(new_target);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
println!("attempting to create {}", &host_notes);
|
||||||
|
let mut out_notes = fs::File::create(&host_notes).expect("error creating new notes file");
|
||||||
|
for target in targets{
|
||||||
|
writeln!(&mut out_notes, "\n# {}", target.host_address);
|
||||||
|
write!(&mut out_notes, "Domain Name:
|
||||||
|
|
||||||
|
port|service|attack_notes
|
||||||
|
----|-------|------------- ");
|
||||||
|
for port in target.ports{
|
||||||
|
let out_port = port.trim();
|
||||||
|
if out_port != "0".to_owned(){
|
||||||
|
write!(&mut out_notes, "
|
||||||
|
{}|", out_port);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
writeln!(&mut out_notes, "\n\n----");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user