From 2ebb29828bd1e2f5c62874c28fba759d5ac57d59 Mon Sep 17 00:00:00 2001 From: pyro57000 Date: Wed, 16 Jul 2025 11:22:04 -0500 Subject: [PATCH] added a function to parse net view output to find shares. --- pentest_tool/Cargo.lock | 660 +++++++++++++++++++++++++++ pentest_tool/Cargo.toml | 1 + pentest_tool/src/cli.rs | 5 + pentest_tool/src/exploit.rs | 177 +++++++ pentest_tool/src/info_controls.rs | 51 +++ pentest_tool/src/install.rs | 2 +- pentest_tool/src/main.rs | 21 +- pentest_tool/src/project_controls.rs | 3 +- 8 files changed, 912 insertions(+), 8 deletions(-) create mode 100644 pentest_tool/src/exploit.rs diff --git a/pentest_tool/Cargo.lock b/pentest_tool/Cargo.lock index 17f079d..7fe713a 100644 --- a/pentest_tool/Cargo.lock +++ b/pentest_tool/Cargo.lock @@ -17,6 +17,17 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" +[[package]] +name = "aes" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0" +dependencies = [ + "cfg-if", + "cipher", + "cpufeatures", +] + [[package]] name = "aho-corasick" version = "1.1.3" @@ -96,12 +107,24 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "base16ct" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" + [[package]] name = "base64" version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" +[[package]] +name = "base64ct" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55248b47b0caf0546f7988906588779981c43bb1bc9d0c44087278f80cdb44ba" + [[package]] name = "bindgen" version = "0.70.1" @@ -132,6 +155,15 @@ version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + [[package]] name = "bumpalo" version = "3.16.0" @@ -208,6 +240,16 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "cipher" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" +dependencies = [ + "crypto-common", + "inout", +] + [[package]] name = "clang-sys" version = "1.8.1" @@ -257,6 +299,12 @@ dependencies = [ "memchr", ] +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + [[package]] name = "core-foundation" version = "0.9.4" @@ -316,12 +364,110 @@ dependencies = [ "windows", ] +[[package]] +name = "cpufeatures" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +dependencies = [ + "libc", +] + +[[package]] +name = "crc32fast" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "crypto-bigint" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" +dependencies = [ + "generic-array", + "rand_core", + "subtle", + "zeroize", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "ctr" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" +dependencies = [ + "cipher", +] + +[[package]] +name = "curve25519-dalek" +version = "4.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97fb8b7c4503de7d6ae7b42ab72a5a59857b4c937ec27a3d4539dba95b5ab2be" +dependencies = [ + "cfg-if", + "cpufeatures", + "curve25519-dalek-derive", + "digest", + "fiat-crypto", + "rustc_version", + "subtle", +] + +[[package]] +name = "curve25519-dalek-derive" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "dasp_sample" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c87e182de0887fd5361989c677c4e8f5000cd9491d6d563161a8f3a5519fc7f" +[[package]] +name = "der" +version = "0.7.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7c1832837b905bbfb5101e07cc24c8deddf52f93225eee6ead5f4d63d53ddcb" +dependencies = [ + "const-oid", + "pem-rfc7468", + "zeroize", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "const-oid", + "crypto-common", + "subtle", +] + [[package]] name = "directories" version = "5.0.1" @@ -386,12 +532,66 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "ecdsa" +version = "0.16.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" +dependencies = [ + "der", + "digest", + "elliptic-curve", + "rfc6979", + "signature", + "spki", +] + +[[package]] +name = "ed25519" +version = "2.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "115531babc129696a58c64a4fef0a8bf9e9698629fb97e9e40767d235cfbcd53" +dependencies = [ + "signature", +] + +[[package]] +name = "ed25519-dalek" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4a3daa8e81a3963a60642bcc1f90a670680bd4a77535faa384e9d1c79d620871" +dependencies = [ + "curve25519-dalek", + "ed25519", + "sha2", + "subtle", +] + [[package]] name = "either" version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +[[package]] +name = "elliptic-curve" +version = "0.13.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" +dependencies = [ + "base16ct", + "crypto-bigint", + "digest", + "ff", + "generic-array", + "group", + "pkcs8", + "rand_core", + "sec1", + "subtle", + "zeroize", +] + [[package]] name = "encoding_rs" version = "0.8.35" @@ -423,6 +623,32 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" +[[package]] +name = "ff" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" +dependencies = [ + "rand_core", + "subtle", +] + +[[package]] +name = "fiat-crypto" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28dea519a9695b9977216879a3ebfddf92f1c08c05d984f8996aecd6ecdc811d" + +[[package]] +name = "flate2" +version = "1.0.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + [[package]] name = "fnv" version = "1.0.7" @@ -528,6 +754,17 @@ dependencies = [ "slab", ] +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", + "zeroize", +] + [[package]] name = "getrandom" version = "0.2.15" @@ -535,8 +772,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", + "js-sys", "libc", "wasi", + "wasm-bindgen", ] [[package]] @@ -551,6 +790,17 @@ version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8d1add55171497b4705a648c6b583acafb01d58050a51727785f0b2c8e0a2b2" +[[package]] +name = "group" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" +dependencies = [ + "ff", + "rand_core", + "subtle", +] + [[package]] name = "h2" version = "0.4.7" @@ -576,6 +826,21 @@ version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest", +] + [[package]] name = "home" version = "0.5.11" @@ -875,6 +1140,15 @@ dependencies = [ "hashbrown", ] +[[package]] +name = "inout" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "879f10e63c20629ecabbb64a8010319738c66a5cd0c29b02d63d272b03751d01" +dependencies = [ + "generic-array", +] + [[package]] name = "iovec" version = "0.1.4" @@ -951,6 +1225,9 @@ name = "lazy_static" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +dependencies = [ + "spin", +] [[package]] name = "lewton" @@ -979,6 +1256,12 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "libm" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" + [[package]] name = "libredox" version = "0.1.3" @@ -1122,6 +1405,34 @@ dependencies = [ "minimal-lexical", ] +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", + "rand", +] + +[[package]] +name = "num-bigint-dig" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" +dependencies = [ + "byteorder", + "lazy_static", + "libm", + "num-integer", + "num-iter", + "num-traits", + "rand", + "smallvec", + "zeroize", +] + [[package]] name = "num-derive" version = "0.4.2" @@ -1133,6 +1444,26 @@ dependencies = [ "syn", ] +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + [[package]] name = "num-traits" version = "0.2.19" @@ -1140,6 +1471,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" dependencies = [ "autocfg", + "libm", ] [[package]] @@ -1260,6 +1592,53 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04744f49eae99ab78e0d5c0b603ab218f515ea8cfe5a456d7629ad883a3b6e7d" +[[package]] +name = "p256" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" +dependencies = [ + "ecdsa", + "elliptic-curve", + "primeorder", + "sha2", +] + +[[package]] +name = "p384" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe42f1670a52a47d448f14b6a5c61dd78fce51856e68edaa38f7ae3a46b8d6b6" +dependencies = [ + "ecdsa", + "elliptic-curve", + "primeorder", + "sha2", +] + +[[package]] +name = "p521" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fc9e2161f1f215afdfce23677034ae137bbd45016a880c2eb3ba8eb95f085b2" +dependencies = [ + "base16ct", + "ecdsa", + "elliptic-curve", + "primeorder", + "rand_core", + "sha2", +] + +[[package]] +name = "pem-rfc7468" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" +dependencies = [ + "base64ct", +] + [[package]] name = "pentest_tool" version = "3.1.1" @@ -1273,6 +1652,7 @@ dependencies = [ "futures-io 0.2.1", "reqwest", "rodio", + "ssh-rs", "term_size", "walkdir", ] @@ -1333,12 +1713,51 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "pkcs1" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" +dependencies = [ + "der", + "pkcs8", + "spki", +] + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + [[package]] name = "pkg-config" version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "primeorder" +version = "0.13.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" +dependencies = [ + "elliptic-curve", +] + [[package]] name = "proc-macro-crate" version = "3.2.0" @@ -1372,6 +1791,18 @@ version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", "rand_core", ] @@ -1380,6 +1811,9 @@ name = "rand_core" version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] [[package]] name = "redox_users" @@ -1466,6 +1900,16 @@ dependencies = [ "windows-registry", ] +[[package]] +name = "rfc6979" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8dd2a808d456c4a54e300a23e9f5a67e122c3024119acbfd73e3bf664491cb2" +dependencies = [ + "hmac", + "subtle", +] + [[package]] name = "ring" version = "0.17.8" @@ -1494,6 +1938,27 @@ dependencies = [ "symphonia", ] +[[package]] +name = "rsa" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78928ac1ed176a5ca1d17e578a1825f3d81ca54cf41053a592584b020cfd691b" +dependencies = [ + "const-oid", + "digest", + "num-bigint-dig", + "num-integer", + "num-traits", + "pkcs1", + "pkcs8", + "rand_core", + "sha2", + "signature", + "spki", + "subtle", + "zeroize", +] + [[package]] name = "rustc-demangle" version = "0.1.24" @@ -1506,6 +1971,15 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + [[package]] name = "rustix" version = "0.38.42" @@ -1558,6 +2032,12 @@ dependencies = [ "untrusted", ] +[[package]] +name = "rustversion" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a0d197bd2c9dc6e53b84da9556a69ba4cdfab8619eb41a8bd1cc2027a0f6b1d" + [[package]] name = "ryu" version = "1.0.18" @@ -1582,6 +2062,20 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "sec1" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" +dependencies = [ + "base16ct", + "der", + "generic-array", + "pkcs8", + "subtle", + "zeroize", +] + [[package]] name = "security-framework" version = "2.11.1" @@ -1605,6 +2099,12 @@ dependencies = [ "libc", ] +[[package]] +name = "semver" +version = "1.0.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56e6fa9c48d24d85fb3de5ad847117517440f6beceb7798af16b4a87d616b8d0" + [[package]] name = "serde" version = "1.0.217" @@ -1649,12 +2149,33 @@ dependencies = [ "serde", ] +[[package]] +name = "sha2" +version = "0.10.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + [[package]] name = "shlex" version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest", + "rand_core", +] + [[package]] name = "siphasher" version = "0.3.11" @@ -1692,12 +2213,106 @@ version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "der", +] + +[[package]] +name = "ssh-cipher" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "caac132742f0d33c3af65bfcde7f6aa8f62f0e991d80db99149eb9d44708784f" +dependencies = [ + "cipher", + "ssh-encoding", +] + +[[package]] +name = "ssh-encoding" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb9242b9ef4108a78e8cd1a2c98e193ef372437f8c22be363075233321dd4a15" +dependencies = [ + "base64ct", + "pem-rfc7468", + "sha2", +] + +[[package]] +name = "ssh-key" +version = "0.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b86f5297f0f04d08cabaa0f6bff7cb6aec4d9c3b49d87990d63da9d9156a8c3" +dependencies = [ + "ed25519-dalek", + "num-bigint-dig", + "p256", + "p384", + "p521", + "rand_core", + "rsa", + "sec1", + "sha2", + "signature", + "ssh-cipher", + "ssh-encoding", + "subtle", + "zeroize", +] + +[[package]] +name = "ssh-rs" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04811a04a4dfce78c2a4fbe335501c9e0d6f76fefc5f93adc31b2dd9d5e3a478" +dependencies = [ + "aes", + "ctr", + "flate2", + "num-bigint", + "rand", + "ring", + "rsa", + "sha2", + "signature", + "ssh-key", + "strum", + "strum_macros", + "thiserror", + "tracing", +] + [[package]] name = "stable_deref_trait" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" +[[package]] +name = "strum" +version = "0.25.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" + +[[package]] +name = "strum_macros" +version = "0.25.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23dc1fa9ac9c169a78ba62f0b841814b7abae11bdd047b9c58f893439e309ea0" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "rustversion", + "syn", +] + [[package]] name = "subtle" version = "2.6.1" @@ -1985,10 +2600,23 @@ version = "0.1.41" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" dependencies = [ + "log", "pin-project-lite", + "tracing-attributes", "tracing-core", ] +[[package]] +name = "tracing-attributes" +version = "0.1.30" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "tracing-core" version = "0.1.33" @@ -2004,6 +2632,12 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" +[[package]] +name = "typenum" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f" + [[package]] name = "unicode-ident" version = "1.0.14" @@ -2045,6 +2679,12 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + [[package]] name = "walkdir" version = "2.5.0" @@ -2523,6 +3163,26 @@ dependencies = [ "synstructure", ] +[[package]] +name = "zerocopy" +version = "0.8.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1039dd0d3c310cf05de012d8a39ff557cb0d23087fd44cad61df08fc31907a2f" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.26" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ecf5b4cc5364572d7f4c329661bcc82724222973f2cab6f050a4e5c22f75181" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "zerofrom" version = "0.1.5" diff --git a/pentest_tool/Cargo.toml b/pentest_tool/Cargo.toml index bcbf7c9..9548ef3 100644 --- a/pentest_tool/Cargo.toml +++ b/pentest_tool/Cargo.toml @@ -13,5 +13,6 @@ fs_extra = "1.3.0" futures-io = { version = "0.2.0-beta" } reqwest = {version = "0.12.12", features = ["blocking", "json"]} rodio = "0.20.1" +ssh-rs = "0.5.0" term_size = "0.3.2" walkdir = "2.5.0" diff --git a/pentest_tool/src/cli.rs b/pentest_tool/src/cli.rs index e7e54f5..52e50f5 100644 --- a/pentest_tool/src/cli.rs +++ b/pentest_tool/src/cli.rs @@ -28,6 +28,7 @@ use crate::enumeration; use crate:: tool_controls; use crate::configuration; use crate::tableize; +use crate::exploit; fn help(command: Option){ @@ -76,6 +77,7 @@ fn help(command: Option){ "separate work and personal projects" | "swpp" | "separate projects" | "seppro" => lines.push("separate work and personal||swpp, separate projects, seppro||This command lets you separate work and personal projects into separate config files. This allows you to load personal and work projects separately!".to_owned()), "switch to personal projects" | "switch personal" => lines.push("switch to personal projects||switch personal||This command lets you switch which config file is loaded to the personal config file.".to_owned()), "switch to work projects" | "switch work" => lines.push("switch to work projects||switch work||This command lets you switch to load the work projects.".to_owned()), + "parse net view" | "pnv" => lines.push("parse net view||pnv||This command takes a text file of netview output and parses it into share paths".to_owned()), _ => () } tableize(lines); @@ -123,6 +125,7 @@ fn help(command: Option){ "separate work and personal projects||swpp, separate projects, seppro".to_owned(), "switch to personal projects||switch personal".to_owned(), "switch to work projects||switch work".to_owned(), + "parse net view||pnv".to_owned(), "help||?, -h".to_owned()]; println!("available commands:"); tableize(lines); @@ -262,7 +265,9 @@ pub fn run_command(cmd: String, "separate work and personal projects" | "swpp" | "separate projects" | "seppro" => {project_controls::separate_personal_work_projects(&config_path); return None;} "switch to personal projects" | "switch personal" => {let mut project_load_res = project_controls::swith_to_personal(&config_path); if project_load_res.is_some(){projects.clear();for project in project_load_res.unwrap(){projects.push(project);}}; return None;}, "switch to work projects" | "switch work" => {let mut project_load_res = project_controls::swith_to_work(&config_path); if project_load_res.is_some(){projects.clear();for project in project_load_res.unwrap(){projects.push(project);}}; return None;}, + "ssh spray" | "sshs" | "spray ssh" => {exploit::ssh_spray(None, None, None, get_user_input("spraying with an ssh key?").contains("y")); return None;}, "show settings" | "print settings" | "shset" | "pset" => {configuration::print_settings(&settings); return None}, + "parse net view" | "pnv" => {info_controls::parse_net_view(&active_project); return None;}, _ => {help(None); println!("\n\n unknown command."); return None;} } } diff --git a/pentest_tool/src/exploit.rs b/pentest_tool/src/exploit.rs new file mode 100644 index 0000000..0a55f57 --- /dev/null +++ b/pentest_tool/src/exploit.rs @@ -0,0 +1,177 @@ +use std::fs::read_to_string; +use std::path::PathBuf; +use ssh; +use crate::Project; +use crate::print_error; +use crate::print_success; +use crate::print_informational; +use crate::get_user_input; + +pub fn ssh_spray(user_path: Option<&PathBuf>, + target_path: Option<&PathBuf>, + given_data: Option, + key: bool) + -> Option{ + let mut display = true; + //if given_data.is_some(){ + // display = false; + // } + let mut return_data = String::new(); + let mut targets = Vec::new(); + let mut users = Vec::new(); + let mut ports = Vec::new(); + let mut spray_data = String::new(); + let mut success = Vec::new(); + print_informational("getting paths to data files..."); + match display{ + true => { + print_informational("getting paths to data files..."); + let users_read_res = read_to_string(get_user_input("path to the username file?")); + let target_read_res = read_to_string(get_user_input("path to targets file?")); + if users_read_res.is_err(){ + print_error("error reading users file!", users_read_res.err().unwrap().to_string()); + return None; + } + let users_string = users_read_res.unwrap(); + if target_read_res.is_err(){ + print_error("error reading target file!", target_read_res.err().unwrap().to_string()); + return None; + } + let target_string = target_read_res.unwrap(); + let temp_users: Vec<&str> = users_string.split("\n").collect(); + let temp_targets: Vec<&str> = target_string.split("\n").collect(); + for user in temp_users{ + users.push(String::from(user)); + print_informational(format!("{} loaded!", user)); + } + print_informational("the default ports to try are 22 and 2222."); + if get_user_input("continue with the defaults?").contains("y"){ + ports.push(String::from("22")); + ports.push(String::from("2222")); + } + else{ + loop{ + let new_port = get_user_input("new port to add? enter END in all caps when done."); + if new_port.contains("END"){ + break; + } + else{ + ports.push(new_port); + } + } + } + for target in temp_targets{ + for port in &ports{ + let new_target = format!("{}:{}", target, port); + targets.push(String::from(new_target)); + } + } + if key{ + spray_data = get_user_input("path to key file?"); + } + else { + spray_data = get_user_input("password to spray?"); + } + } + false => { + if user_path.is_none(){ + return_data.push_str("\nno username file provided!\nExiting..."); + return Some(return_data); + } + if target_path.is_none(){ + return_data.push_str("\nno target file provided!\nExiting..."); + return Some(return_data); + } + if given_data.is_none(){ + return_data.push_str("\nno password or key file provided!\nexiting..."); + return Some(return_data); + } + let users_read_res = read_to_string(user_path.unwrap()); + let target_read_res = read_to_string(target_path.unwrap()); + spray_data = given_data.unwrap(); + if users_read_res.is_err(){ + return_data.push_str("\nerror reading user file!\nExiting..."); + return Some(return_data); + } + if target_read_res.is_err(){ + return_data.push_str("\nerror reading target file!\nExiting..."); + return Some(return_data); + } + let users_string = users_read_res.unwrap(); + let targets_string = target_read_res.unwrap(); + let temp_users: Vec<&str> = users_string.split("\n").collect(); + let temp_targets: Vec<&str> = targets_string.split("\n").collect(); + for user in temp_users{ + users.push(String::from(user)); + } + for target in temp_targets{ + targets.push(String::from(target)); + } + } + } + if display{ + print_informational("spraying useers..."); + } + match key{ + true => { + for target in targets{ + for user in &users{ + let session_res = ssh::create_session().username(user.as_str()).private_key_path(&spray_data).connect(&target); + if session_res.is_err(){ + let error_text = format!("Error opening ssh session for {} on {}", user, target); + if display{ + print_error(&error_text, format!("{}",session_res.err().unwrap())); + } + else{ + return_data.push_str(format!("\n{}", error_text).as_str()); + } + break; + } + let session = session_res.unwrap(); + let out_string = format!("{}@{}", user, target); + success.push(out_string.clone()); + if display{ + print_success(out_string); + } + session.close(); + } + } + }, + false => { + for target in targets{ + for user in &users{ + let information_text = format!("testing {} on {}", user, target); + print_informational(information_text); + let session_res = ssh::create_session().username(user.as_str()).password(&spray_data).connect(&target); + if session_res.is_err(){ + let error_text = format!("Error opening ssh session for {} on {}", user, target); + if display{ + print_error(&error_text, format!("{}",session_res.err().unwrap())); + } + else{ + return_data.push_str(format!("\n{}", error_text).as_str()); + } + } + else{ + let session = session_res.unwrap(); + let out_string = format!("{}@{}", user, target); + success.push(out_string.clone()); + if display{ + print_success(out_string); + } + session.close(); + } + } + } + } + } + let return_data = success.join("\n"); + if display{ + println!("these are the successful sprays!"); + print_success(return_data); + return None; + } + else{ + return Some(return_data); + } +} diff --git a/pentest_tool/src/info_controls.rs b/pentest_tool/src/info_controls.rs index 284ebc1..c3a9552 100644 --- a/pentest_tool/src/info_controls.rs +++ b/pentest_tool/src/info_controls.rs @@ -1,4 +1,5 @@ use std::collections::HashMap; +use std::fmt::write; use std::fs; use std::fs::read_to_string; use std::fs::OpenOptions; @@ -14,6 +15,10 @@ use clearscreen::clear; use clearscreen; use rodio::{Decoder, OutputStream, Sink}; use crate::get_user_input; +use crate::open_append; +use crate::print_error; +use crate::print_informational; +use crate::print_success; use crate::Project; #[allow(unused)] @@ -928,4 +933,50 @@ pub fn get_scope_entries(project: &Project) -> Option>{ return Some(hosts); } +pub fn parse_net_view(project: &Project){ + let mut share_paths = Vec::new(); + let mut note_path = project.notes_folder.clone(); + let netview_output_path = PathBuf::from(get_user_input("path to the net view output file")); + let netview_read_res = read_to_string(netview_output_path); + if netview_read_res.is_err(){ + print_error("error reading netview output file!", netview_read_res.err().unwrap().to_string()); + return; + } + let netview_text = netview_read_res.unwrap(); + let netview_sections: Vec<&str> = netview_text.split("shared resources at ").collect(); + for section in netview_sections{ + let mut server = String::new(); + let lines: Vec<&str> = section.lines().collect(); + for line in lines{ + if line.contains("\\\\"){ + server.push_str(line.trim()); + } + else if line.contains("Disk"){ + let share_name = line.split_whitespace().collect::>()[0]; + let share_path = format!("{}\\{}", server, share_name); + share_paths.push(share_path); + } + } + } + print_success("data gathered!"); + print_informational("writing notes"); + note_path.push("initial enum.md"); + let open_res = open_append(¬e_path); + if open_res.is_none(){ + print_error("error opening enum notes!", String::from("can't open file")); + return; + } + let mut note_file = open_res.unwrap(); + let write_res = write!(note_file, "\n\n# Shares\n"); + if write_res.is_err(){ + print_error("error writing to note file!", write_res.err().unwrap().to_string()); + return; + } + write_res.unwrap(); + for share_path in share_paths{ + write!(note_file, "- [ ] {}\n\n", share_path).unwrap(); + } + print_success("shares parsed, and saved to initial enum in your obsidian vault!"); +} + diff --git a/pentest_tool/src/install.rs b/pentest_tool/src/install.rs index 6a4d79a..552ee0d 100644 --- a/pentest_tool/src/install.rs +++ b/pentest_tool/src/install.rs @@ -222,7 +222,7 @@ vault_name:{}" exit(1); } let mut project_conf_file = project_conf_res.unwrap(); - let project_write_res = write!(project_conf_file, "Projects Config File"); + let project_write_res = write!(project_conf_file, "Projects Config File\ndefault:default:{}:{}:yes:{}:current", ¤t_notes.display(), ¤t_projects.display(), &template_box_name); if project_write_res.is_err(){ println!("error writing project config file."); exit(1); diff --git a/pentest_tool/src/main.rs b/pentest_tool/src/main.rs index 044659e..a26a3ca 100644 --- a/pentest_tool/src/main.rs +++ b/pentest_tool/src/main.rs @@ -29,6 +29,7 @@ mod victim_commands; mod enumeration; mod tool_controls; mod configuration; +mod exploit; pub fn print_error(message: &str ,error: String){ println!("{}", message.red()); @@ -95,10 +96,19 @@ pub fn tableize(given_lines: Vec) { let mut column_numbers: Vec<&usize> = column_sizes.keys().collect(); column_numbers.sort_by(|a, b| a.cmp(b)); for column in column_numbers{ - /*if data_vec[*column].len() > column_sizes[&longest_column]{ - let split_data_vec = data_vec[*column].split_at(column_sizes[&longest_column]); - }*/ - let padding = column_sizes[column] - data_vec[*column].len(); + let mut data_to_add = String::new(); + let mut data_vec_len = data_vec[*column].len(); + if data_vec_len > column_sizes[&longest_column]{ + while data_vec_len > column_sizes[&longest_column]{ + data_vec_len = data_vec_len / 2; + let (data_vec_start, data_vec_end) = data_vec[*column].split_at(data_vec_len); + data_to_add = format!("{}\n{}", data_vec_start, data_vec_end); + } + } + else{ + data_to_add = String::from(data_vec[*column]); + } + let padding = column_sizes[column] - data_vec_len; if count == 1{ let formatted_cell = format!("{} {}{}", "|".green(), data_vec[*column].bold().green(), " ".repeat(padding)); header.push_str(&formatted_cell); @@ -108,8 +118,7 @@ pub fn tableize(given_lines: Vec) { separater.push_str(&formatted_cell); } else { - - let formatted_cell = format!("{} {}{}", "|".green(), data_vec[*column], " ".repeat(padding)); + let formatted_cell = format!("{} {}{}", "|".green(), data_to_add, " ".repeat(padding)); outdata.push_str(&formatted_cell); add_ending = true; } diff --git a/pentest_tool/src/project_controls.rs b/pentest_tool/src/project_controls.rs index 61f7fd8..eec35d9 100644 --- a/pentest_tool/src/project_controls.rs +++ b/pentest_tool/src/project_controls.rs @@ -626,7 +626,8 @@ pub fn separate_personal_work_projects(config_path: &PathBuf){ let copy_res = fs::copy(&config, &config_personal); if copy_res.is_err(){ print_error("error copying to conf.personal!", copy_res.err().unwrap().to_string()); - let copy_cmd = format!("plase run the following command in your terminal\ncp {} {}", &config.display(), &config_personal.display()); + let copy_cmd = format!("plase run the following command in your + \ncp {} {}", &config.display(), &config_personal.display()); print_informational(copy_cmd); } else{