fix: more cleaning up for FreeBSD
This commit is contained in:
parent
f6428b92fe
commit
1dfd7e0499
6
Cargo.lock
generated
6
Cargo.lock
generated
@ -1316,7 +1316,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "sparse-05-client"
|
name = "sparse-05-client"
|
||||||
version = "0.5.0"
|
version = "0.7.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ansi_term",
|
"ansi_term",
|
||||||
"anyhow",
|
"anyhow",
|
||||||
@ -1335,7 +1335,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "sparse-05-common"
|
name = "sparse-05-common"
|
||||||
version = "0.1.0"
|
version = "0.7.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ecies-ed25519",
|
"ecies-ed25519",
|
||||||
"ed25519-dalek",
|
"ed25519-dalek",
|
||||||
@ -1346,7 +1346,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "sparse-05-server"
|
name = "sparse-05-server"
|
||||||
version = "0.5.0"
|
version = "0.7.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"catconf",
|
"catconf",
|
||||||
|
|||||||
13
flake.lock
generated
13
flake.lock
generated
@ -77,6 +77,18 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"freebsd": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"narHash": "sha256-rKgZfcUDZpwF8Pi7Ybh+fSIRsVZshOgX5Qe2owMxKLQ=",
|
||||||
|
"type": "file",
|
||||||
|
"url": "https://download.freebsd.org/releases/ISO-IMAGES/14.1/FreeBSD-14.1-RELEASE-amd64-dvd1.iso"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"type": "file",
|
||||||
|
"url": "https://download.freebsd.org/releases/ISO-IMAGES/14.1/FreeBSD-14.1-RELEASE-amd64-dvd1.iso"
|
||||||
|
}
|
||||||
|
},
|
||||||
"libnl": {
|
"libnl": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
@ -130,6 +142,7 @@
|
|||||||
"crane": "crane",
|
"crane": "crane",
|
||||||
"fenix": "fenix",
|
"fenix": "fenix",
|
||||||
"flake-utils": "flake-utils",
|
"flake-utils": "flake-utils",
|
||||||
|
"freebsd": "freebsd",
|
||||||
"libnl": "libnl",
|
"libnl": "libnl",
|
||||||
"libpcap-src": "libpcap-src",
|
"libpcap-src": "libpcap-src",
|
||||||
"nixpkgs": "nixpkgs",
|
"nixpkgs": "nixpkgs",
|
||||||
|
|||||||
29
flake.nix
29
flake.nix
@ -29,15 +29,36 @@
|
|||||||
url = "https://www.winpcap.org/install/bin/WpdPack_4_1_2.zip";
|
url = "https://www.winpcap.org/install/bin/WpdPack_4_1_2.zip";
|
||||||
flake = false;
|
flake = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
freebsd = {
|
||||||
|
url =
|
||||||
|
"https://download.freebsd.org/releases/ISO-IMAGES/14.1/FreeBSD-14.1-RELEASE-amd64-dvd1.iso";
|
||||||
|
flake = false;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs = { self, nixpkgs, flake-utils, crane, fenix, rust-overlay
|
outputs = { self, nixpkgs, flake-utils, crane, fenix, rust-overlay
|
||||||
, libpcap-src, libnl, winpcap }:
|
, libpcap-src, libnl, winpcap, freebsd }:
|
||||||
flake-utils.lib.eachDefaultSystem (system:
|
flake-utils.lib.eachDefaultSystem (system:
|
||||||
let
|
let
|
||||||
pkgs = import nixpkgs {
|
pkgs = import nixpkgs {
|
||||||
inherit system;
|
inherit system;
|
||||||
overlays = [ (import rust-overlay) fenix.overlays.default ];
|
overlays = [ (import rust-overlay) fenix.overlays.default ];
|
||||||
|
config.allowUnfree = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
freebsdVm = pkgs.stdenv.mkDerivation {
|
||||||
|
name = "sparse-freebsd-vm";
|
||||||
|
|
||||||
|
buildInputs = with pkgs; [ qemu xz libguestfs ];
|
||||||
|
|
||||||
|
unpackPhase = ''
|
||||||
|
mkdir -p $out/vm
|
||||||
|
cp ${freebsd} $out/vm/freebsd.qcow2.xz
|
||||||
|
xz -d $out/vm/freebsd.qcow2.xz
|
||||||
|
'';
|
||||||
|
|
||||||
|
installPhase = "\n";
|
||||||
};
|
};
|
||||||
|
|
||||||
buildTools = with pkgs; [
|
buildTools = with pkgs; [
|
||||||
@ -156,16 +177,18 @@
|
|||||||
devShells.default = craneLib.devShell {
|
devShells.default = craneLib.devShell {
|
||||||
name = "sparse";
|
name = "sparse";
|
||||||
|
|
||||||
buildInputs = windowsBuildTools ++ [ rust-analyzer rustup ];
|
buildInputs = windowsBuildTools ++ [ rust-analyzer packer ];
|
||||||
|
|
||||||
SPARSE_BUILD_WINPCAP = "${winpcap}/Lib";
|
SPARSE_BUILD_WINPCAP = "${winpcap}/Lib";
|
||||||
SPARSE_BUILD_LIBPCAP = "${libpcap-src}";
|
SPARSE_BUILD_LIBPCAP = "${libpcap-src}";
|
||||||
SPARSE_BUILD_LIBNL = "${libnl}";
|
SPARSE_BUILD_LIBNL = "${libnl}";
|
||||||
|
|
||||||
|
FREEBSD_ISO = "${freebsd}";
|
||||||
};
|
};
|
||||||
|
|
||||||
packages = {
|
packages = {
|
||||||
inherit sparse-05-linux-server sparse-05-windows-server
|
inherit sparse-05-linux-server sparse-05-windows-server
|
||||||
sparse-05-windows-service sparse-05-client;
|
sparse-05-windows-service sparse-05-client freebsdVm;
|
||||||
|
|
||||||
inherit sparse-c2-linux-beacon sparse-c2-server sparse-c2-client;
|
inherit sparse-c2-linux-beacon sparse-c2-server sparse-c2-client;
|
||||||
|
|
||||||
|
|||||||
@ -42,7 +42,6 @@ fn main() {
|
|||||||
.define("DISABLE_TC", "ON")
|
.define("DISABLE_TC", "ON")
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
// panic!("hahahahah test {}", dst.display());
|
|
||||||
println!("cargo:rustc-link-search=native={}/lib", dst.display());
|
println!("cargo:rustc-link-search=native={}/lib", dst.display());
|
||||||
println!("cargo:rustc-link-search=native={}/lib64", dst.display());
|
println!("cargo:rustc-link-search=native={}/lib64", dst.display());
|
||||||
println!("cargo:rustc-link-lib=static=pcap");
|
println!("cargo:rustc-link-lib=static=pcap");
|
||||||
|
|||||||
@ -228,7 +228,7 @@ impl<T: Disabled> Interface<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn activate(mut self) -> error::Result<Interface<DevActivated>> {
|
pub fn activate(mut self) -> error::Result<Interface<DevActivated>> {
|
||||||
if unsafe { dbg!(ffi::pcap_activate(self.dev)) } != 0 {
|
if unsafe { ffi::pcap_activate(self.dev) } != 0 {
|
||||||
Err(unsafe { ffi::pcap_geterr(self.dev) })?;
|
Err(unsafe { ffi::pcap_geterr(self.dev) })?;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +0,0 @@
|
|||||||
[toolchain]
|
|
||||||
channel = "stable"
|
|
||||||
components = []
|
|
||||||
targets = [ "x86_64-unknown-freebsd" ]
|
|
||||||
profile = "minimal"
|
|
||||||
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "sparse-05-client"
|
name = "sparse-05-client"
|
||||||
version = "0.5.0"
|
version = "0.7.0"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
@ -12,7 +12,7 @@ libc = "0.2.147"
|
|||||||
rand = "0.7"
|
rand = "0.7"
|
||||||
rmp-serde = "1.1.2"
|
rmp-serde = "1.1.2"
|
||||||
serde = { version = "1.0.188", features = ["derive"] }
|
serde = { version = "1.0.188", features = ["derive"] }
|
||||||
sparse-05-common = { version = "0.1.0", path = "../sparse-05-common" }
|
sparse-05-common = { version = "0.7.0", path = "../sparse-05-common" }
|
||||||
structopt = { version = "0.3.26", features = ["paw"] }
|
structopt = { version = "0.3.26", features = ["paw"] }
|
||||||
tempfile = "3.8.0"
|
tempfile = "3.8.0"
|
||||||
tokio = { version = "1.32.0", features = ["full"] }
|
tokio = { version = "1.32.0", features = ["full"] }
|
||||||
|
|||||||
@ -10,6 +10,7 @@ pub fn print_capabilities(capabilities: &Capabilities, ip: &IpAddr) {
|
|||||||
"\tOperating system: \t{}",
|
"\tOperating system: \t{}",
|
||||||
match &capabilities.operating_system {
|
match &capabilities.operating_system {
|
||||||
OperatingSystem::Linux => "Linux",
|
OperatingSystem::Linux => "Linux",
|
||||||
|
OperatingSystem::FreeBSD => "FreeBSD",
|
||||||
OperatingSystem::Windows => "Windows",
|
OperatingSystem::Windows => "Windows",
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
@ -57,7 +58,7 @@ pub fn print_capabilities(capabilities: &Capabilities, ip: &IpAddr) {
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
OperatingSystem::Windows => {
|
OperatingSystem::Windows | OperatingSystem::FreeBSD => {
|
||||||
println!(
|
println!(
|
||||||
"\tAdmin user: \t\t{}",
|
"\tAdmin user: \t\t{}",
|
||||||
match capabilities.root {
|
match capabilities.root {
|
||||||
|
|||||||
@ -26,6 +26,7 @@ impl std::str::FromStr for TargetOs {
|
|||||||
fn from_str(input: &str) -> Result<Self, Self::Err> {
|
fn from_str(input: &str) -> Result<Self, Self::Err> {
|
||||||
match input {
|
match input {
|
||||||
"linux" => Ok(Self::Linux),
|
"linux" => Ok(Self::Linux),
|
||||||
|
"freebsd" => Ok(Self::FreeBSD),
|
||||||
"windows" => Ok(Self::Windows),
|
"windows" => Ok(Self::Windows),
|
||||||
"windows-service" => Ok(Self::WindowsService),
|
"windows-service" => Ok(Self::WindowsService),
|
||||||
_ => Err("could not parse target operating system"),
|
_ => Err("could not parse target operating system"),
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "sparse-05-common"
|
name = "sparse-05-common"
|
||||||
version = "0.1.0"
|
version = "0.7.0"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "sparse-05-server"
|
name = "sparse-05-server"
|
||||||
version = "0.5.0"
|
version = "0.7.0"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
@ -13,7 +13,7 @@ libc = { version = "0.2.147" }
|
|||||||
serde = { version = "1.0.188", features = ["derive"] }
|
serde = { version = "1.0.188", features = ["derive"] }
|
||||||
rmp-serde = "1.1.2"
|
rmp-serde = "1.1.2"
|
||||||
catconf = "0.1.2"
|
catconf = "0.1.2"
|
||||||
sparse-05-common = { version = "0.1.0", path = "../sparse-05-common" }
|
sparse-05-common = { version = "0.7.0", path = "../sparse-05-common" }
|
||||||
ecies-ed25519 = { version = "0.5.1", features = ["serde"] }
|
ecies-ed25519 = { version = "0.5.1", features = ["serde"] }
|
||||||
packets = { path = "../../packets" }
|
packets = { path = "../../packets" }
|
||||||
pcap-sys = { path = "../../pcap-sys", optional = true }
|
pcap-sys = { path = "../../pcap-sys", optional = true }
|
||||||
|
|||||||
@ -34,7 +34,7 @@ impl Interface {
|
|||||||
.ok_or(anyhow!("could not get an ethernet interface"))?
|
.ok_or(anyhow!("could not get an ethernet interface"))?
|
||||||
} else {
|
} else {
|
||||||
interfaces
|
interfaces
|
||||||
.find(|eth| eth.starts_with("eth") || eth.starts_with("en"))
|
.find(|eth| eth.starts_with("eth") || eth.starts_with("en") || eth.starts_with("vtnet") || eth.starts_with("vmx"))
|
||||||
.ok_or(anyhow!("could not get an ethernet interface"))?
|
.ok_or(anyhow!("could not get an ethernet interface"))?
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -57,27 +57,24 @@ impl Interface {
|
|||||||
}};
|
}};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
log::debug!("opening interface {interface_name}...");
|
||||||
let mut interface = retry!(pcap_sys::Interface::<pcap_sys::DevDisabled>::new(
|
let mut interface = retry!(pcap_sys::Interface::<pcap_sys::DevDisabled>::new(
|
||||||
&interface_name
|
&interface_name
|
||||||
));
|
));
|
||||||
|
|
||||||
retry!(interface.set_buffer_size(1024));
|
retry!(interface.set_buffer_size(2048));
|
||||||
retry!(interface.set_non_blocking(false));
|
retry!(interface.set_non_blocking(false));
|
||||||
retry!(interface.set_promisc(false));
|
retry!(interface.set_promisc(false));
|
||||||
retry!(interface.set_timeout(10));
|
retry!(interface.set_timeout(10));
|
||||||
|
|
||||||
log::debug!("Configured raw listener interface");
|
|
||||||
|
|
||||||
let interface = retry!(interface.activate());
|
let interface = retry!(interface.activate());
|
||||||
|
|
||||||
log::debug!("Activated raw listener interface");
|
log::debug!("setting pcap filter");
|
||||||
|
if cfg!(linux) {
|
||||||
if cfg!(windows) {
|
|
||||||
retry!(interface.set_filter(&format!("udp port {port}"), true, None));
|
|
||||||
} else {
|
|
||||||
retry!(interface.set_filter(&format!("inbound and udp port {port}"), true, None));
|
retry!(interface.set_filter(&format!("inbound and udp port {port}"), true, None));
|
||||||
|
} else {
|
||||||
|
retry!(interface.set_filter(&format!("udp port {port}"), true, None));
|
||||||
}
|
}
|
||||||
|
|
||||||
log::debug!("Updated filter for listener interface");
|
log::debug!("Updated filter for listener interface");
|
||||||
|
|
||||||
if interface.datalink() != pcap_sys::consts::DLT_EN10MB {
|
if interface.datalink() != pcap_sys::consts::DLT_EN10MB {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user