diff --git a/tests/client-test-cert.pem b/tests/client-test-cert.pem new file mode 100644 index 0000000..a5900a9 --- /dev/null +++ b/tests/client-test-cert.pem @@ -0,0 +1,24 @@ +-----BEGIN CERTIFICATE----- +MIIEEzCCAvsCFFl+iSi56LZsTqzz5Uo93MEr2VPsMA0GCSqGSIb3DQEBCwUAMEUx +CzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRl +cm5ldCBXaWRnaXRzIFB0eSBMdGQwIBcNMjMwNTAyMTA0ODQ1WhgPMjA1MDA5MTYx +MDQ4NDVaMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYD +VQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwggIiMA0GCSqGSIb3DQEBAQUA +A4ICDwAwggIKAoICAQCMcPcOliSzzcmRuJVEUsbtlk8x95+FC2y0m38XaayQk2am +DNi/UxAzlUsmWiw7a8E5OPnDZ0Vomr6LbpyjxFYx7ip1FWqGgsN033E44pANo5/M +pWx7hB+LLvhag3nRP2tvIST3rKfIEDmALMBwUPstwaAU9elYPWa21AiZsYu/JHxX +1vXs0C9NgQe+xp5KySj0OS7uJl2zMvTUMLwrIv/mb/T2mDOjKBKEiySY2XzhZ5mt +FWJoT746IPseD7XWsipubmzD6Pe0I8P718PgkRH2tcWAn99NNVeBgycSmv8sbPuJ +bNmZtq3RFDC1OMdVUWGydePWzE4/RdC2IOvZ61HP1PbT1iUSDltjENI/mtF77LSO +bW6yTxlPpHZIxdQ2p5hjBXywsffaeeAEBeZfZnQ+l5NWlOs+/sdaRMzjydK9m7mB +KHBcBytGA7WhZRw6U+W3kYrHCAGQ2XT2G0Ic7NEtcnUOyo1X1YkyVqUsqnCKqky6 +k++r79lU7W7Pdh6kzN5QcTNiP1B/tHcVABRibZbSg037e979lHiFUEsYWRNfFRGt +6yKuZbdOp70Xz+E80EjzgW2TgLRC7uDU+KuzzHqMeE/y8qrHDjhtP5JzWk75vNZf +gBW1BZz2fUQTRx5kTXfAi5JlqS6qeyaWJ1kkBGb/7sfSaXIJ3X0t17ccEoDS/wID +AQABMA0GCSqGSIb3DQEBCwUAA4IBAQACsWdZOXs96bfWwrVyJHLqe9zqNcO//4tB +ZsP2bodjmJd6q6HDAZItb+PN6++FLyK5H3hLiH6ikn64zogvidB6F7Qyr4dKRAuc +SaKb3QnmzC1gNImD37IIsNQdPswn8giPYT/koqJlvF8uPVFf0s7ml+nhzCwx4nTs +yJvwzHrSDUVMfzt/MEh5TNfbCh9kCP6fdBcBUsDlK6jnMRmEEWk1603LgKTzE/tF +HSxB1r29lvdJTjwvHuL5Du1ZrnG2adn/OfGi1PJr6Z7FncFqiPqozEqa3GqWZaos +243yZaP5NPFUHNwAMmT1x76rQZj0cMrSSlSM8apoFLffJLXDQOrp +-----END CERTIFICATE----- diff --git a/tests/client-test-key.pem b/tests/client-test-key.pem new file mode 100644 index 0000000..5667a0c --- /dev/null +++ b/tests/client-test-key.pem @@ -0,0 +1,52 @@ +-----BEGIN PRIVATE KEY----- +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 +0S+JA2o3sM6fCPguNTeGqT8P3ZyPVVc= +-----END PRIVATE KEY----- diff --git a/tests/server-test-cert-1.pem b/tests/server-test-cert-1.pem new file mode 100644 index 0000000..1addc9b --- /dev/null +++ b/tests/server-test-cert-1.pem @@ -0,0 +1,24 @@ +-----BEGIN CERTIFICATE----- +MIIEEzCCAvsCFBZ5XADLte+8KNDUrOSVlYr8EHIRMA0GCSqGSIb3DQEBCwUAMEUx +CzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRl +cm5ldCBXaWRnaXRzIFB0eSBMdGQwIBcNMjMwNTAyMTA0NzUyWhgPMjA1MDA5MTYx +MDQ3NTJaMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYD +VQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwggIiMA0GCSqGSIb3DQEBAQUA +A4ICDwAwggIKAoICAQDDId1K+ZtHmZr4+dn5ClZjY2S+2sIoP8vEdClCyLqpTbpZ +bnZEr9zOGvBHHqhE9umS6cCglUY1BQ4t0xkuaHtggEqHZGHWGeuCqwTnWZ+oT6Ht +U85GUrmdkQg2IsvBYsaJVbw8czfyalPCEf9/U8kZAfnHIdIf9HJoe4/JzvBL44ws +20wNMJqZL4sicqjxPsZSoUgV8KMrOgUt/0OjpnpQdUElqv5H/cQVrwotqbU17hn9 +xRuys0Ffjn+uaSrmybVuD1cVcl6AD3k5cMArqrYeY/0FfmAszT/Tj+5abjAjcNSj +uiOPTdy7JUT2QeoStCN4NYjemeFaTYTB6GaxfcDreGd0KR17wOttCzWMdKdd1IcF +B0/R2x6CvAS/ySrEHN9KiW6y5Qc9KARBrKPciaxC95Ppe1xsK0gb3qCfMIDCo5Lr +GbmpAUtpoT99ehrLlfIeBcHaHxvA2LNrot1Cgwe+dORy1vd7UMFBqMzC3DuARlzo +h+dAMvPeVGKoafzz04DqNvgENso/v/aJ7Ull2hVgt0TLJOC4fA2alHTksflXs5yL +zIk6BsIZ4vAJvO4uoGy0FGx4E0FiL8aroZOcaFYnyQxUbjT0MFK6nxPUsNpbFCMc +1UMPNoMpKm8NfnMUxPLDU46aqLSdtxk8yYwa80Ju0tMLRYh1zV8EquEvj6qUBwID +AQABMA0GCSqGSIb3DQEBCwUAA4IBAQBVvYDjooL41GhlyUVDYox0bR8WTLx8XxKG +p0ByZ6j92DwKJXk6mHd85lZuHDq7hRF4g5gxdbmG847/Iqh4VPR6iQmtq7ROXwBU ++kGBvRIHngilobn6TYHCKdiaWxIPJuth/ws/92JGxkBGqJtphcOwlOIEuh+5rIU8 +zZfLlJItICsZ4MMNpOhHJRKtTiltPorQnj/IiGnTRXa3jZapwPv70XdtgiOUCTeV +scyOca3K3Xn84RQypLbPf2wZx8/rEi3F9+ppTXwSiA6PstkAK3nuZJZWKTUIVVRo +6WAlycUHFbJhSJyk1BBUIw4ySUvjcwF3uFCQavIt+6RaPkKzV3qu +-----END CERTIFICATE----- diff --git a/tests/server-test-cert-2.pem b/tests/server-test-cert-2.pem new file mode 100644 index 0000000..1addc9b --- /dev/null +++ b/tests/server-test-cert-2.pem @@ -0,0 +1,24 @@ +-----BEGIN CERTIFICATE----- +MIIEEzCCAvsCFBZ5XADLte+8KNDUrOSVlYr8EHIRMA0GCSqGSIb3DQEBCwUAMEUx +CzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRl +cm5ldCBXaWRnaXRzIFB0eSBMdGQwIBcNMjMwNTAyMTA0NzUyWhgPMjA1MDA5MTYx +MDQ3NTJaMEUxCzAJBgNVBAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYD +VQQKDBhJbnRlcm5ldCBXaWRnaXRzIFB0eSBMdGQwggIiMA0GCSqGSIb3DQEBAQUA +A4ICDwAwggIKAoICAQDDId1K+ZtHmZr4+dn5ClZjY2S+2sIoP8vEdClCyLqpTbpZ +bnZEr9zOGvBHHqhE9umS6cCglUY1BQ4t0xkuaHtggEqHZGHWGeuCqwTnWZ+oT6Ht +U85GUrmdkQg2IsvBYsaJVbw8czfyalPCEf9/U8kZAfnHIdIf9HJoe4/JzvBL44ws +20wNMJqZL4sicqjxPsZSoUgV8KMrOgUt/0OjpnpQdUElqv5H/cQVrwotqbU17hn9 +xRuys0Ffjn+uaSrmybVuD1cVcl6AD3k5cMArqrYeY/0FfmAszT/Tj+5abjAjcNSj +uiOPTdy7JUT2QeoStCN4NYjemeFaTYTB6GaxfcDreGd0KR17wOttCzWMdKdd1IcF +B0/R2x6CvAS/ySrEHN9KiW6y5Qc9KARBrKPciaxC95Ppe1xsK0gb3qCfMIDCo5Lr +GbmpAUtpoT99ehrLlfIeBcHaHxvA2LNrot1Cgwe+dORy1vd7UMFBqMzC3DuARlzo +h+dAMvPeVGKoafzz04DqNvgENso/v/aJ7Ull2hVgt0TLJOC4fA2alHTksflXs5yL +zIk6BsIZ4vAJvO4uoGy0FGx4E0FiL8aroZOcaFYnyQxUbjT0MFK6nxPUsNpbFCMc +1UMPNoMpKm8NfnMUxPLDU46aqLSdtxk8yYwa80Ju0tMLRYh1zV8EquEvj6qUBwID +AQABMA0GCSqGSIb3DQEBCwUAA4IBAQBVvYDjooL41GhlyUVDYox0bR8WTLx8XxKG +p0ByZ6j92DwKJXk6mHd85lZuHDq7hRF4g5gxdbmG847/Iqh4VPR6iQmtq7ROXwBU ++kGBvRIHngilobn6TYHCKdiaWxIPJuth/ws/92JGxkBGqJtphcOwlOIEuh+5rIU8 +zZfLlJItICsZ4MMNpOhHJRKtTiltPorQnj/IiGnTRXa3jZapwPv70XdtgiOUCTeV +scyOca3K3Xn84RQypLbPf2wZx8/rEi3F9+ppTXwSiA6PstkAK3nuZJZWKTUIVVRo +6WAlycUHFbJhSJyk1BBUIw4ySUvjcwF3uFCQavIt+6RaPkKzV3qu +-----END CERTIFICATE----- diff --git a/tests/test_banner.rs b/tests/test_banner.rs index 4ebae1c..9ec4a84 100644 --- a/tests/test_banner.rs +++ b/tests/test_banner.rs @@ -661,6 +661,70 @@ fn banner_prints_recursion_depth() { ); } +#[test] +/// test allows non-existent wordlist to trigger the banner printing to stderr +/// expect to see all mandatory prints + server certs +fn banner_prints_server_certs() { + Command::cargo_bin("feroxbuster") + .unwrap() + .arg("--url") + .arg("http://localhost") + .arg("--server-certs") + .arg("tests/server-test-cert-1.pem") + .arg("tests/server-test-cert-2.pem") + .arg("--wordlist") + .arg("/definitely/doesnt/exist/0cd7fed0-47f4-4b18-a1b0-ac39708c1676") + .assert() + .success() + .stderr( + predicate::str::contains("─┬─") + .and(predicate::str::contains("Target Url")) + .and(predicate::str::contains("http://localhost")) + .and(predicate::str::contains("Threads")) + .and(predicate::str::contains("Wordlist")) + .and(predicate::str::contains("Status Codes")) + .and(predicate::str::contains("Timeout (secs)")) + .and(predicate::str::contains("User-Agent")) + .and(predicate::str::contains("Server Certificates")) + .and(predicate::str::contains("server-test-cert-1.pem")) + .and(predicate::str::contains("server-test-cert-2.pem")) + .and(predicate::str::contains("─┴─")), + ); +} + +#[test] +/// test allows non-existent wordlist to trigger the banner printing to stderr +/// expect to see all mandatory prints + server certs +fn banner_prints_client_cert_and_key() { + Command::cargo_bin("feroxbuster") + .unwrap() + .arg("--url") + .arg("http://localhost") + .arg("--client-cert") + .arg("tests/client-test-cert.pem") + .arg("--client-key") + .arg("tests/client-test-key.pem") + .arg("--wordlist") + .arg("/definitely/doesnt/exist/0cd7fed0-47f4-4b18-a1b0-ac39708c1676") + .assert() + .success() + .stderr( + predicate::str::contains("─┬─") + .and(predicate::str::contains("Target Url")) + .and(predicate::str::contains("http://localhost")) + .and(predicate::str::contains("Threads")) + .and(predicate::str::contains("Wordlist")) + .and(predicate::str::contains("Status Codes")) + .and(predicate::str::contains("Timeout (secs)")) + .and(predicate::str::contains("User-Agent")) + .and(predicate::str::contains("Client Certificate")) + .and(predicate::str::contains("Client Key")) + .and(predicate::str::contains("client-test-cert.pem")) + .and(predicate::str::contains("client-test-key.pem")) + .and(predicate::str::contains("─┴─")), + ); +} + #[test] /// test allows non-existent wordlist to trigger the banner printing to stderr /// expect to see all mandatory prints + no recursion @@ -1366,6 +1430,7 @@ fn banner_prints_all_composite_settings_burp() { .and(predicate::str::contains("─┴─")), ); } + #[test] /// test allows non-existent wordlist to trigger the banner printing to stderr /// expect to see all mandatory prints + collect words diff --git a/tests/test_config.rs b/tests/test_config.rs index c9a68eb..7b0cd04 100644 --- a/tests/test_config.rs +++ b/tests/test_config.rs @@ -1,5 +1,6 @@ mod utils; use assert_cmd::prelude::*; +use httpmock::MockServer; use predicates::prelude::*; use std::process::Command; use utils::{setup_tmp_directory, teardown_tmp_directory}; @@ -7,13 +8,15 @@ use utils::{setup_tmp_directory, teardown_tmp_directory}; #[test] /// send a single valid request, expect a 200 response fn read_in_config_file_for_settings() -> Result<(), Box> { + let srv = MockServer::start(); + let (tmp_dir, file) = setup_tmp_directory(&["threads = 37".to_string()], "ferox-config.toml")?; Command::cargo_bin("feroxbuster") .unwrap() .current_dir(&tmp_dir) .arg("--url") - .arg("http://localhost") + .arg(srv.url("/")) .arg("--wordlist") .arg(file.as_os_str()) .arg("-vvvv")