From be57e620f01aec131b9282efdb2a5fc1c87d7582 Mon Sep 17 00:00:00 2001
From: cortantief
Date: Mon, 20 Sep 2021 07:00:39 +0200
Subject: [PATCH 01/91] Correcting error when extensions are used with word
that start with two slashes
The cause of that error was the fact that the check was made inside a chain of if-else-if conditions, since the extension are tested before the slashes
resulting to not check correctly the word.
---
src/url.rs | 28 ++++++++++++++++++++++------
1 file changed, 22 insertions(+), 6 deletions(-)
diff --git a/src/url.rs b/src/url.rs
index d771fb6..b21ae2b 100644
--- a/src/url.rs
+++ b/src/url.rs
@@ -98,12 +98,17 @@ impl FeroxUrl {
};
// extensions and slashes are mutually exclusive cases
- let word = if extension.is_some() {
+ let mut word = if extension.is_some() {
format!("{}.{}", word, extension.unwrap())
} else if self.handles.config.add_slash && !word.ends_with('/') {
// -f used, and word doesn't already end with a /
format!("{}/", word)
- } else if word.starts_with("//") {
+ } else {
+ String::from(word)
+ };
+
+ // We check seperatly if wordlist contains words that begin with 2 forward slashes
+ if word.starts_with("//") {
// bug ID'd by @Sicks3c, when a wordlist contains words that begin with 2 forward slashes
// i.e. //1_40_0/static/js, it gets joined onto the base url in a surprising way
// ex: https://localhost/ + //1_40_0/static/js -> https://1_40_0/static/js
@@ -111,11 +116,8 @@ impl FeroxUrl {
// and simply removes prefixed forward slashes if there are two of them. Additionally,
// trim_start_matches will trim the pattern until it's gone, so even if there are more than
// 2 /'s, they'll still be trimmed
- word.trim_start_matches('/').to_string()
- } else {
- String::from(word)
+ word = word.trim_start_matches('/').to_string();
};
-
let base_url = Url::parse(&url)?;
let joined = base_url.join(&word)?;
@@ -451,6 +453,20 @@ mod tests {
);
}
+ #[test]
+ /// word with two prepended slashes and extensions doesn't discard the entire domain
+ fn format_url_word_with_two_prepended_slashes_and_extensions(){
+ let handles = Arc::new(Handles::for_testing(None, None).0);
+ let url = FeroxUrl::from_string("http://localhost", handles);
+ for ext in ["rocks", "fun"] {
+ let to_check = format!("http://localhost/upload/ferox.{}", ext);
+ assert_eq!(
+ url.format("//upload/ferox", Some(ext)).unwrap(),
+ reqwest::Url::parse(&to_check[..]).unwrap()
+ );
+ }
+ }
+
#[test]
/// word that is a fully formed url, should return an error
fn format_url_word_that_is_a_url() {
From c89453c5c3903dd7d7e8538fdba97da43e05e4ce Mon Sep 17 00:00:00 2001
From: cortantief
Date: Mon, 20 Sep 2021 10:00:48 +0200
Subject: [PATCH 02/91] Adding support for slash and extensions at the same
time.
Support for the extensions and slash where added by using a special condition inside the format function allowing us to treat slash as an extension with a particular format.
We had to modify other place to propagate the changes like in make_wildcard_request for example.
Ofcourse we had to delete the limitation inside the arg parser.
A test was added to ensure the validity of the implementation.
---
src/heuristics.rs | 8 +++++++-
src/parser.rs | 1 -
src/url.rs | 43 +++++++++++++++++++++++++++++++++----------
3 files changed, 40 insertions(+), 12 deletions(-)
diff --git a/src/heuristics.rs b/src/heuristics.rs
index 026e699..900a197 100644
--- a/src/heuristics.rs
+++ b/src/heuristics.rs
@@ -156,7 +156,13 @@ impl HeuristicTests {
log::trace!("enter: make_wildcard_request({}, {})", target, length);
let unique_str = self.unique_string(length);
- let nonexistent_url = target.format(&unique_str, None)?;
+ // To take care of slash when needed
+ let slash = if self.handles.config.add_slash {
+ Some("/")
+ } else {
+ None
+ };
+ let nonexistent_url = target.format(&unique_str, slash)?;
let response = logged_request(&nonexistent_url.to_owned(), self.handles.clone()).await?;
diff --git a/src/parser.rs b/src/parser.rs
index d241a73..4663701 100644
--- a/src/parser.rs
+++ b/src/parser.rs
@@ -265,7 +265,6 @@ pub fn initialize() -> App<'static, 'static> {
.short("f")
.long("add-slash")
.takes_value(false)
- .conflicts_with("extensions")
.help("Append / to each request")
)
.arg(
diff --git a/src/url.rs b/src/url.rs
index b21ae2b..9a5f38b 100644
--- a/src/url.rs
+++ b/src/url.rs
@@ -41,8 +41,12 @@ impl FeroxUrl {
log::trace!("enter: formatted_urls({})", word);
let mut urls = vec![];
-
- match self.format(word, None) {
+ let slash = if self.handles.config.add_slash {
+ Some("/")
+ } else {
+ None
+ };
+ match self.format(word, slash) {
// default request, i.e. no extension
Ok(url) => urls.push(url),
Err(_) => self.handles.stats.send(AddError(UrlFormat))?,
@@ -55,7 +59,6 @@ impl FeroxUrl {
Err(_) => self.handles.stats.send(AddError(UrlFormat))?,
}
}
-
log::trace!("exit: formatted_urls -> {:?}", urls);
Ok(urls)
}
@@ -97,13 +100,17 @@ impl FeroxUrl {
self.target.to_string()
};
- // extensions and slashes are mutually exclusive cases
+ // extensions and slashes are now not mutually exclusive cases
let mut word = if extension.is_some() {
- format!("{}.{}", word, extension.unwrap())
- } else if self.handles.config.add_slash && !word.ends_with('/') {
- // -f used, and word doesn't already end with a /
- format!("{}/", word)
- } else {
+ // We handle the special case of forward slash
+ // That allow us to treat it as an extension with a particular format
+ let ext = extension.unwrap();
+ if ext == "/" {
+ format!("{}/", word)
+ } else {
+ format!("{}.{}", word, ext)
+ }
+ } else {
String::from(word)
};
@@ -455,7 +462,7 @@ mod tests {
#[test]
/// word with two prepended slashes and extensions doesn't discard the entire domain
- fn format_url_word_with_two_prepended_slashes_and_extensions(){
+ fn format_url_word_with_two_prepended_slashes_and_extensions() {
let handles = Arc::new(Handles::for_testing(None, None).0);
let url = FeroxUrl::from_string("http://localhost", handles);
for ext in ["rocks", "fun"] {
@@ -476,4 +483,20 @@ mod tests {
assert!(formatted.is_err());
}
+ #[test]
+ /// word with extension AND slash are correctly handled
+ fn format_url_word_with_postslash_and_extensions() {
+ let config = Configuration {
+ add_slash: true,
+ extensions: vec!["rocks".to_string(), "fun".to_string()],
+ ..Default::default()
+ };
+ let handles = Arc::new(Handles::for_testing(None, Some(Arc::new(config))).0);
+ let url = FeroxUrl::from_string("http://localhost", handles);
+ match url.formatted_urls("ferox") {
+ Ok(urls) => assert_eq!(urls.len(), 3), // 3 = One for the main word + slash and for the two extensions
+ Err(err) => panic!("{}", err.to_string()),
+ }
+
+ }
}
From 9a3754a31d7a8ebe6078a0439c5a91311a8d126c Mon Sep 17 00:00:00 2001
From: cortantief
Date: Mon, 20 Sep 2021 10:56:19 +0200
Subject: [PATCH 03/91] Cargo fmt formating
---
src/heuristics.rs | 2 +-
src/url.rs | 1 -
2 files changed, 1 insertion(+), 2 deletions(-)
diff --git a/src/heuristics.rs b/src/heuristics.rs
index 900a197..6004e17 100644
--- a/src/heuristics.rs
+++ b/src/heuristics.rs
@@ -162,7 +162,7 @@ impl HeuristicTests {
} else {
None
};
- let nonexistent_url = target.format(&unique_str, slash)?;
+ let nonexistent_url = target.format(&unique_str, slash)?;
let response = logged_request(&nonexistent_url.to_owned(), self.handles.clone()).await?;
diff --git a/src/url.rs b/src/url.rs
index 9a5f38b..16a3ae9 100644
--- a/src/url.rs
+++ b/src/url.rs
@@ -497,6 +497,5 @@ mod tests {
Ok(urls) => assert_eq!(urls.len(), 3), // 3 = One for the main word + slash and for the two extensions
Err(err) => panic!("{}", err.to_string()),
}
-
}
}
From d4a69fa2ecce6dbe691fe05dff3c6b1a83b95b5a Mon Sep 17 00:00:00 2001
From: cortantief
Date: Mon, 20 Sep 2021 10:58:53 +0200
Subject: [PATCH 04/91] clippy plus cargo fmt
---
src/url.rs | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/src/url.rs b/src/url.rs
index 16a3ae9..87919d3 100644
--- a/src/url.rs
+++ b/src/url.rs
@@ -101,10 +101,9 @@ impl FeroxUrl {
};
// extensions and slashes are now not mutually exclusive cases
- let mut word = if extension.is_some() {
+ let mut word = if let Some(ext) = extension {
// We handle the special case of forward slash
// That allow us to treat it as an extension with a particular format
- let ext = extension.unwrap();
if ext == "/" {
format!("{}/", word)
} else {
From 0b75e1a548350c955c241e87f3ae736a7c55c452 Mon Sep 17 00:00:00 2001
From: Daniel Saxton
Date: Sun, 19 Sep 2021 18:18:18 -0500
Subject: [PATCH 05/91] Implement random user agent flag
---
ferox-config.toml.example | 1 +
src/banner/container.rs | 12 +++++++++++-
src/config/container.rs | 11 +++++++++++
src/config/tests.rs | 7 +++++++
4 files changed, 30 insertions(+), 1 deletion(-)
diff --git a/ferox-config.toml.example b/ferox-config.toml.example
index cf8396d..c14ecf7 100644
--- a/ferox-config.toml.example
+++ b/ferox-config.toml.example
@@ -27,6 +27,7 @@
# output = "/targets/ellingson_mineral_company/gibson.txt"
# debug_log = "/var/log/find-the-derp.log"
# user_agent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0"
+# random_agent = false
# redirects = true
# insecure = true
# extensions = ["php", "html"]
diff --git a/src/banner/container.rs b/src/banner/container.rs
index c01f426..92d35cf 100644
--- a/src/banner/container.rs
+++ b/src/banner/container.rs
@@ -50,6 +50,9 @@ pub struct Banner {
/// represents Configuration.user_agent
user_agent: BannerEntry,
+ /// represents Configuration.random_agent
+ random_agent: BannerEntry,
+
/// represents Configuration.config
config: BannerEntry,
@@ -276,6 +279,7 @@ impl Banner {
let wordlist = BannerEntry::new("📖", "Wordlist", &config.wordlist);
let timeout = BannerEntry::new("💥", "Timeout (secs)", &config.timeout.to_string());
let user_agent = BannerEntry::new("🦡", "User-Agent", &config.user_agent);
+ let random_agent = BannerEntry::new("🦡", "User-Agent", "(Random)");
let extract_links =
BannerEntry::new("🔎", "Extract Links", &config.extract_links.to_string());
let json = BannerEntry::new("🧔", "JSON Output", &config.json.to_string());
@@ -304,6 +308,7 @@ impl Banner {
filter_status,
timeout,
user_agent,
+ random_agent,
auto_bail,
auto_tune,
proxy,
@@ -437,7 +442,12 @@ by Ben "epi" Risher {} ver: {}"#,
}
writeln!(&mut writer, "{}", self.timeout)?;
- writeln!(&mut writer, "{}", self.user_agent)?;
+
+ if config.random_agent {
+ writeln!(&mut writer, "{}", self.random_agent)?;
+ } else {
+ writeln!(&mut writer, "{}", self.user_agent)?;
+ }
// followed by the maybe printed or variably displayed values
if !config.config.is_empty() {
diff --git a/src/config/container.rs b/src/config/container.rs
index 014772a..df2bb76 100644
--- a/src/config/container.rs
+++ b/src/config/container.rs
@@ -154,6 +154,10 @@ pub struct Configuration {
#[serde(default = "user_agent")]
pub user_agent: String,
+ /// Use random User-Agent
+ #[serde(default)]
+ pub random_agent: bool,
+
/// Follow redirects
#[serde(default)]
pub redirects: bool,
@@ -295,6 +299,7 @@ impl Default for Configuration {
redirects: false,
no_recursion: false,
extract_links: false,
+ random_agent: false,
save_state: true,
proxy: String::new(),
config: String::new(),
@@ -344,6 +349,7 @@ impl Configuration {
/// - **auto_bail**: `false`
/// - **save_state**: `true`
/// - **user_agent**: `feroxbuster/VERSION`
+ /// - **random_agent**: `false`
/// - **insecure**: `false` (don't be insecure, i.e. don't allow invalid certs)
/// - **extensions**: `None`
/// - **url_denylist**: `None`
@@ -647,6 +653,10 @@ impl Configuration {
update_config_if_present!(&mut config.user_agent, args, "user_agent", String);
update_config_if_present!(&mut config.timeout, args, "timeout", u64);
+ if args.is_present("random_agent") {
+ config.random_agent = true;
+ }
+
if args.is_present("redirects") {
config.redirects = true;
}
@@ -824,6 +834,7 @@ impl Configuration {
update_if_not_default!(&mut conf.timeout, new.timeout, timeout());
update_if_not_default!(&mut conf.user_agent, new.user_agent, user_agent());
+ update_if_not_default!(&mut conf.random_agent, new.random_agent, false);
update_if_not_default!(&mut conf.threads, new.threads, threads());
update_if_not_default!(&mut conf.depth, new.depth, depth());
update_if_not_default!(&mut conf.wordlist, new.wordlist, wordlist());
diff --git a/src/config/tests.rs b/src/config/tests.rs
index daeaddb..7896acc 100644
--- a/src/config/tests.rs
+++ b/src/config/tests.rs
@@ -81,6 +81,7 @@ fn default_configuration() {
assert!(!config.auto_bail);
assert_eq!(config.requester_policy, RequesterPolicy::Default);
assert!(!config.no_recursion);
+ assert!(!config.random_agent);
assert!(!config.json);
assert!(config.save_state);
assert!(!config.stdin);
@@ -383,6 +384,12 @@ fn config_reads_queries() {
assert_eq!(config.queries, queries);
}
+#[test]
+fn config_default_not_random_agent() {
+ let config = setup_config_test();
+ assert!(!config.random_agent);
+}
+
#[test]
#[should_panic]
/// test that an error message is printed and panic is called when report_and_exit is called
From 83ba49a48674062cfabde0961febe16c00e44184 Mon Sep 17 00:00:00 2001
From: epi
Date: Tue, 21 Sep 2021 20:49:31 -0500
Subject: [PATCH 06/91] added test for formatted_urls when both extension and
slash are set
---
src/url.rs | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)
diff --git a/src/url.rs b/src/url.rs
index 87919d3..9140b5b 100644
--- a/src/url.rs
+++ b/src/url.rs
@@ -251,6 +251,29 @@ mod tests {
assert_eq!(urls, [Url::parse("http://localhost/turbo").unwrap()])
}
+ #[test]
+ /// sending url + word with both an extension and add-slash should get back
+ /// two urls, one with '/' appended to the word, and the other with the extension
+ /// appended
+ fn formatted_urls_extensions_with_add_slash_returns_two_urls_with_extensions() {
+ let config = Configuration {
+ extensions: vec![String::from("js")],
+ add_slash: true,
+ ..Default::default()
+ };
+
+ let handles = Arc::new(Handles::for_testing(None, Some(Arc::new(config))).0);
+ let url = FeroxUrl::from_string("http://localhost", handles);
+ let urls = url.formatted_urls("turbo").unwrap();
+ assert_eq!(
+ urls,
+ [
+ Url::parse("http://localhost/turbo/").unwrap(),
+ Url::parse("http://localhost/turbo.js").unwrap()
+ ]
+ )
+ }
+
#[test]
/// sending url + word + 1 extension should get back two urls, one base and one with extension
fn formatted_urls_one_extension_returns_two_urls() {
From d36379ba1bafff25e12bff2c6293f83bb6bc50ff Mon Sep 17 00:00:00 2001
From: epi
Date: Wed, 22 Sep 2021 07:28:57 -0500
Subject: [PATCH 07/91] nitpickery stuff; removed the test i added cuz it's a
duplicate
---
src/heuristics.rs | 2 ++
src/url.rs | 54 +++++++++++++++++++++++------------------------
2 files changed, 28 insertions(+), 28 deletions(-)
diff --git a/src/heuristics.rs b/src/heuristics.rs
index 6004e17..ec7b5c0 100644
--- a/src/heuristics.rs
+++ b/src/heuristics.rs
@@ -156,12 +156,14 @@ impl HeuristicTests {
log::trace!("enter: make_wildcard_request({}, {})", target, length);
let unique_str = self.unique_string(length);
+
// To take care of slash when needed
let slash = if self.handles.config.add_slash {
Some("/")
} else {
None
};
+
let nonexistent_url = target.format(&unique_str, slash)?;
let response = logged_request(&nonexistent_url.to_owned(), self.handles.clone()).await?;
diff --git a/src/url.rs b/src/url.rs
index 9140b5b..aea222f 100644
--- a/src/url.rs
+++ b/src/url.rs
@@ -41,11 +41,13 @@ impl FeroxUrl {
log::trace!("enter: formatted_urls({})", word);
let mut urls = vec![];
+
let slash = if self.handles.config.add_slash {
Some("/")
} else {
None
};
+
match self.format(word, slash) {
// default request, i.e. no extension
Ok(url) => urls.push(url),
@@ -100,7 +102,11 @@ impl FeroxUrl {
self.target.to_string()
};
- // extensions and slashes are now not mutually exclusive cases
+ // As of version 2.3.4, extensions and trailing slashes are no longer mutually exclusive.
+ // Trailing slashes are now treated as just another extension, which is pretty clever.
+ //
+ // In addition to the change above, @cortantief ID'd a bug here that incorrectly handled
+ // 2 leading forward slashes when extensions were used. This block addresses the bugfix.
let mut word = if let Some(ext) = extension {
// We handle the special case of forward slash
// That allow us to treat it as an extension with a particular format
@@ -113,7 +119,7 @@ impl FeroxUrl {
String::from(word)
};
- // We check seperatly if wordlist contains words that begin with 2 forward slashes
+ // We check separately if the current word begins with 2 forward slashes
if word.starts_with("//") {
// bug ID'd by @Sicks3c, when a wordlist contains words that begin with 2 forward slashes
// i.e. //1_40_0/static/js, it gets joined onto the base url in a surprising way
@@ -124,6 +130,7 @@ impl FeroxUrl {
// 2 /'s, they'll still be trimmed
word = word.trim_start_matches('/').to_string();
};
+
let base_url = Url::parse(&url)?;
let joined = base_url.join(&word)?;
@@ -251,29 +258,6 @@ mod tests {
assert_eq!(urls, [Url::parse("http://localhost/turbo").unwrap()])
}
- #[test]
- /// sending url + word with both an extension and add-slash should get back
- /// two urls, one with '/' appended to the word, and the other with the extension
- /// appended
- fn formatted_urls_extensions_with_add_slash_returns_two_urls_with_extensions() {
- let config = Configuration {
- extensions: vec![String::from("js")],
- add_slash: true,
- ..Default::default()
- };
-
- let handles = Arc::new(Handles::for_testing(None, Some(Arc::new(config))).0);
- let url = FeroxUrl::from_string("http://localhost", handles);
- let urls = url.formatted_urls("turbo").unwrap();
- assert_eq!(
- urls,
- [
- Url::parse("http://localhost/turbo/").unwrap(),
- Url::parse("http://localhost/turbo.js").unwrap()
- ]
- )
- }
-
#[test]
/// sending url + word + 1 extension should get back two urls, one base and one with extension
fn formatted_urls_one_extension_returns_two_urls() {
@@ -505,9 +489,12 @@ mod tests {
assert!(formatted.is_err());
}
+
#[test]
- /// word with extension AND slash are correctly handled
- fn format_url_word_with_postslash_and_extensions() {
+ /// sending url + word with both an extension and add-slash should get back
+ /// two urls, one with '/' appended to the word, and the other with the extension
+ /// appended
+ fn formatted_urls_with_postslash_and_extensions() {
let config = Configuration {
add_slash: true,
extensions: vec!["rocks".to_string(), "fun".to_string()],
@@ -516,7 +503,18 @@ mod tests {
let handles = Arc::new(Handles::for_testing(None, Some(Arc::new(config))).0);
let url = FeroxUrl::from_string("http://localhost", handles);
match url.formatted_urls("ferox") {
- Ok(urls) => assert_eq!(urls.len(), 3), // 3 = One for the main word + slash and for the two extensions
+ Ok(urls) => {
+ // 3 = One for the main word + slash and for the two extensions
+ assert_eq!(urls.len(), 3);
+ assert_eq!(
+ urls,
+ [
+ Url::parse("http://localhost/ferox/").unwrap(),
+ Url::parse("http://localhost/ferox.rocks").unwrap(),
+ Url::parse("http://localhost/ferox.fun").unwrap(),
+ ]
+ )
+ }
Err(err) => panic!("{}", err.to_string()),
}
}
From 42c06c87cc7b991b2061679dc516ebf8d4fa5dfd Mon Sep 17 00:00:00 2001
From: epi
Date: Wed, 22 Sep 2021 07:29:14 -0500
Subject: [PATCH 08/91] bumped version to 2.3.4
---
Cargo.lock | 2 +-
Cargo.toml | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/Cargo.lock b/Cargo.lock
index 76383a8..0397dd0 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -596,7 +596,7 @@ dependencies = [
[[package]]
name = "feroxbuster"
-version = "2.3.3"
+version = "2.3.4"
dependencies = [
"anyhow",
"assert_cmd",
diff --git a/Cargo.toml b/Cargo.toml
index b2ef130..9e574ca 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "feroxbuster"
-version = "2.3.3"
+version = "2.3.4"
authors = ["Ben 'epi' Risher "]
license = "MIT"
edition = "2018"
From dd1c824d9800cb6d0784f51eb6f228ce1f40e6cb Mon Sep 17 00:00:00 2001
From: epi
Date: Wed, 22 Sep 2021 07:30:38 -0500
Subject: [PATCH 09/91] updated shell completions that care about mutual
exclusion
---
shell_completions/_feroxbuster | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/shell_completions/_feroxbuster b/shell_completions/_feroxbuster
index 42b3552..e18af9d 100644
--- a/shell_completions/_feroxbuster
+++ b/shell_completions/_feroxbuster
@@ -78,8 +78,8 @@ _feroxbuster() {
'--insecure[Disables TLS certificate validation]' \
'-n[Do not scan recursively]' \
'--no-recursion[Do not scan recursively]' \
-'(-x --extensions)-f[Append / to each request]' \
-'(-x --extensions)--add-slash[Append / to each request]' \
+'-f[Append / to each request]' \
+'--add-slash[Append / to each request]' \
'(-u --url)--stdin[Read url(s) from STDIN]' \
'-e[Extract links from response body (html, javascript, etc...); make new requests based on findings (default: false)]' \
'--extract-links[Extract links from response body (html, javascript, etc...); make new requests based on findings (default: false)]' \
From 28f63aae94d330801caf5037c55cb75c415797b0 Mon Sep 17 00:00:00 2001
From: Daniel Saxton
Date: Wed, 22 Sep 2021 17:09:11 -0500
Subject: [PATCH 10/91] Test
---
tests/test_banner.rs | 25 +++++++++++++++++++++++++
1 file changed, 25 insertions(+)
diff --git a/tests/test_banner.rs b/tests/test_banner.rs
index e1a3299..1f4b373 100644
--- a/tests/test_banner.rs
+++ b/tests/test_banner.rs
@@ -143,6 +143,31 @@ fn banner_prints_denied_urls() {
);
}
+#[test]
+/// test allows non-existent wordlist to trigger the banner printing to stderr
+/// expect to see all mandatory prints + multiple headers
+fn banner_prints_random_agent() {
+ Command::cargo_bin("feroxbuster")
+ .unwrap()
+ .arg("--url")
+ .arg("http://localhost")
+ .arg("--random-agent")
+ .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("(Random)"))
+ .and(predicate::str::contains("─┴─")),
+ );
+}
+
#[test]
/// test allows non-existent wordlist to trigger the banner printing to stderr
/// expect to see all mandatory prints + multiple size filters
From 40fccb97611e8226b009fbf1221b8a3c041804cb Mon Sep 17 00:00:00 2001
From: Daniel Saxton
Date: Wed, 22 Sep 2021 19:14:07 -0500
Subject: [PATCH 11/91] Bump minor version
---
Cargo.lock | 2 +-
Cargo.toml | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/Cargo.lock b/Cargo.lock
index 76383a8..596dc0c 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -596,7 +596,7 @@ dependencies = [
[[package]]
name = "feroxbuster"
-version = "2.3.3"
+version = "2.4.0"
dependencies = [
"anyhow",
"assert_cmd",
diff --git a/Cargo.toml b/Cargo.toml
index b2ef130..0eddae1 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "feroxbuster"
-version = "2.3.3"
+version = "2.4.0"
authors = ["Ben 'epi' Risher "]
license = "MIT"
edition = "2018"
From 8d11bb1800776680a7bc7d4b23fe60571a282dd8 Mon Sep 17 00:00:00 2001
From: Daniel Saxton
Date: Wed, 22 Sep 2021 19:21:07 -0500
Subject: [PATCH 12/91] README
---
README.md | 3 +++
1 file changed, 3 insertions(+)
diff --git a/README.md b/README.md
index 6499f96..137ef99 100644
--- a/README.md
+++ b/README.md
@@ -482,6 +482,9 @@ FLAGS:
-V, --version
Prints version information
+ -A, --random-agent
+ Use a random User-Agent
+
-v, --verbosity
Increase verbosity level (use -vv or more for greater effect. [CAUTION] 4 -v's is probably too much)
From bce55e77f32452413c7a7a2c1d0bbfe6d558aada Mon Sep 17 00:00:00 2001
From: Daniel Saxton
Date: Wed, 22 Sep 2021 19:41:52 -0500
Subject: [PATCH 13/91] Add arg
---
shell_completions/_feroxbuster | 2 ++
shell_completions/_feroxbuster.ps1 | 2 ++
shell_completions/feroxbuster.bash | 2 +-
shell_completions/feroxbuster.fish | 1 +
src/parser.rs | 9 +++++++++
5 files changed, 15 insertions(+), 1 deletion(-)
diff --git a/shell_completions/_feroxbuster b/shell_completions/_feroxbuster
index 42b3552..dba5517 100644
--- a/shell_completions/_feroxbuster
+++ b/shell_completions/_feroxbuster
@@ -72,6 +72,8 @@ _feroxbuster() {
'--json[Emit JSON logs to --output and --debug-log instead of normal text]' \
'-D[Don'\''t auto-filter wildcard responses]' \
'--dont-filter[Don'\''t auto-filter wildcard responses]' \
+'-A[Use a random User-Agent]' \
+'--random-agent[Use a random User-Agent]' \
'-r[Follow redirects]' \
'--redirects[Follow redirects]' \
'-k[Disables TLS certificate validation]' \
diff --git a/shell_completions/_feroxbuster.ps1 b/shell_completions/_feroxbuster.ps1
index 81539c5..bad2b9c 100644
--- a/shell_completions/_feroxbuster.ps1
+++ b/shell_completions/_feroxbuster.ps1
@@ -77,6 +77,8 @@ Register-ArgumentCompleter -Native -CommandName 'feroxbuster' -ScriptBlock {
[CompletionResult]::new('--json', 'json', [CompletionResultType]::ParameterName, 'Emit JSON logs to --output and --debug-log instead of normal text')
[CompletionResult]::new('-D', 'D', [CompletionResultType]::ParameterName, 'Don''t auto-filter wildcard responses')
[CompletionResult]::new('--dont-filter', 'dont-filter', [CompletionResultType]::ParameterName, 'Don''t auto-filter wildcard responses')
+ [CompletionResult]::new('-A', 'A', [CompletionResultType]::ParameterName, 'Use a random User-Agent')
+ [CompletionResult]::new('--random-agent', 'random-agent', [CompletionResultType]::ParameterName, 'Use a random User-Agent')
[CompletionResult]::new('-r', 'r', [CompletionResultType]::ParameterName, 'Follow redirects')
[CompletionResult]::new('--redirects', 'redirects', [CompletionResultType]::ParameterName, 'Follow redirects')
[CompletionResult]::new('-k', 'k', [CompletionResultType]::ParameterName, 'Disables TLS certificate validation')
diff --git a/shell_completions/feroxbuster.bash b/shell_completions/feroxbuster.bash
index 1a23ade..5e1016e 100644
--- a/shell_completions/feroxbuster.bash
+++ b/shell_completions/feroxbuster.bash
@@ -20,7 +20,7 @@ _feroxbuster() {
case "${cmd}" in
feroxbuster)
- opts=" -v -q -D -r -k -n -f -e -h -V -w -u -t -d -T -p -P -R -s -o -a -x -H -Q -S -X -W -N -C -L --verbosity --silent --quiet --auto-tune --auto-bail --json --dont-filter --redirects --insecure --no-recursion --add-slash --stdin --extract-links --help --version --wordlist --url --threads --depth --timeout --proxy --replay-proxy --replay-codes --status-codes --output --resume-from --debug-log --user-agent --extensions --dont-scan --headers --query --filter-size --filter-regex --filter-words --filter-lines --filter-status --filter-similar-to --scan-limit --parallel --rate-limit --time-limit "
+ opts=" -v -q -D -A -r -k -n -f -e -h -V -w -u -t -d -T -p -P -R -s -o -a -x -H -Q -S -X -W -N -C -L --verbosity --silent --quiet --auto-tune --auto-bail --json --dont-filter --random-agent --redirects --insecure --no-recursion --add-slash --stdin --extract-links --help --version --wordlist --url --threads --depth --timeout --proxy --replay-proxy --replay-codes --status-codes --output --resume-from --debug-log --user-agent --extensions --dont-scan --headers --query --filter-size --filter-regex --filter-words --filter-lines --filter-status --filter-similar-to --scan-limit --parallel --rate-limit --time-limit "
if [[ ${cur} == -* || ${COMP_CWORD} -eq 1 ]] ; then
COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
return 0
diff --git a/shell_completions/feroxbuster.fish b/shell_completions/feroxbuster.fish
index 382bca2..146f9b5 100644
--- a/shell_completions/feroxbuster.fish
+++ b/shell_completions/feroxbuster.fish
@@ -32,6 +32,7 @@ complete -c feroxbuster -n "__fish_use_subcommand" -l auto-tune -d 'Automaticall
complete -c feroxbuster -n "__fish_use_subcommand" -l auto-bail -d 'Automatically stop scanning when an excessive amount of errors are encountered'
complete -c feroxbuster -n "__fish_use_subcommand" -l json -d 'Emit JSON logs to --output and --debug-log instead of normal text'
complete -c feroxbuster -n "__fish_use_subcommand" -s D -l dont-filter -d 'Don\'t auto-filter wildcard responses'
+complete -c feroxbuster -n "__fish_use_subcommand" -s A -l random-agent -d 'Use a random User-Agent'
complete -c feroxbuster -n "__fish_use_subcommand" -s r -l redirects -d 'Follow redirects'
complete -c feroxbuster -n "__fish_use_subcommand" -s k -l insecure -d 'Disables TLS certificate validation'
complete -c feroxbuster -n "__fish_use_subcommand" -s n -l no-recursion -d 'Do not scan recursively'
diff --git a/src/parser.rs b/src/parser.rs
index d241a73..e6b6ede 100644
--- a/src/parser.rs
+++ b/src/parser.rs
@@ -192,6 +192,15 @@ pub fn initialize() -> App<'static, 'static> {
"Sets the User-Agent (default: feroxbuster/VERSION)"
),
)
+ .arg(
+ Arg::with_name("random_agent")
+ .short("A")
+ .long("random-agent")
+ .takes_value(false)
+ .help(
+ "Use a random User-Agent"
+ ),
+ )
.arg(
Arg::with_name("redirects")
.short("r")
From 5235208aa8fd1be53a78d4d8aad3c7b65c953f73 Mon Sep 17 00:00:00 2001
From: epi
Date: Thu, 23 Sep 2021 21:22:52 -0500
Subject: [PATCH 14/91] dynamically generate user agents at build time for
inclusion into lib.rs
---
Cargo.lock | 1 +
Cargo.toml | 1 +
build.rs | 44 +++++++++++++++++++++++++++++++++++++++++++-
src/lib.rs | 3 +++
src/main.rs | 3 +++
5 files changed, 51 insertions(+), 1 deletion(-)
diff --git a/Cargo.lock b/Cargo.lock
index 596dc0c..dc46f48 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -615,6 +615,7 @@ dependencies = [
"log",
"openssl",
"predicates",
+ "rand",
"regex",
"reqwest",
"rlimit",
diff --git a/Cargo.toml b/Cargo.toml
index 0eddae1..22ccb07 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -20,6 +20,7 @@ clap = "2.33"
regex = "1"
lazy_static = "1.4"
dirs = "4.0"
+rand = "0.8"
[dependencies]
futures = { version = "0.3"}
diff --git a/build.rs b/build.rs
index 591a124..d012407 100644
--- a/build.rs
+++ b/build.rs
@@ -7,10 +7,38 @@ use clap::Shell;
include!("src/parser.rs");
+
+/// this code is taken from
+/// https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=4734c208edf7da625588fa16b5e2ed93
+/// which was linked in the random user agent issue discussion
+///
+/// ** I'm not advocating for the use of this code, just using it for demonstration purposes **
+use rand::prelude::*;
+use std::fmt::Write as fmt_Write;
+use std::fs::write;
+const WINDOWS_VERSION: [&str; 11] = [
+ "3.1", "3.5", "4.0", "5.0", "5.1", "5.2", "6.0", "6.1", "6.2", "6.3", "10.0",
+];
+fn generate_randomua() -> String {
+ let mut rng = thread_rng();
+ let gecko_version = format!("{:.1}", rng.gen_range(40.0..60.0));
+ let platform = if (rng.gen::() % 2) == 0 {
+ let version = WINDOWS_VERSION.choose(&mut rng).unwrap();
+ format!("(Windows NT {}; rv:{}) Gecko/20100101 Firefox/{}",
+ version, gecko_version, gecko_version)
+ } else {
+ let version = format!("10.{}", rng.gen_range(0..19));
+ format!("(Macintosh; Intel Mac OS X {}; rv:{}) Gecko/20100101 Firefox/{}",
+ version, gecko_version, gecko_version)
+ };
+ format!("Mozilla/5.0 {}", platform)
+}
+
+
fn main() {
println!("cargo:rerun-if-env-changed=src/parser.rs");
- if std::env::var("DOCS_RS").is_ok() {
+ if env::var("DOCS_RS").is_ok() {
return; // only build when we're not generating docs
}
@@ -83,4 +111,18 @@ fn main() {
eprintln!("Couldn't copy example config into config directory");
}
}
+
+ let user_agents = (0..20).map(|_| generate_randomua()).collect::>();
+
+ let mut definition = String::from("pub static USER_AGENTS:[&'static str; ");
+
+ definition.push_str(user_agents.len().to_string().as_str());
+ definition.push_str("] = [");
+ for user_agent in user_agents {
+ definition.push_str(&format!("\"{}\",", user_agent));
+ }
+ definition.push_str("];");
+
+ let out_file = format!("{}/user-agents.rs", env::var("OUT_DIR").unwrap());
+ write(out_file, definition);
}
diff --git a/src/lib.rs b/src/lib.rs
index c187471..02e50e4 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -92,6 +92,9 @@ pub const DEFAULT_STATUS_CODES: [StatusCode; 10] = [
/// Expected location is in the same directory as the feroxbuster binary.
pub const DEFAULT_CONFIG_NAME: &str = "ferox-config.toml";
+// includes user agents generated at build time
+include!(concat!(env!("OUT_DIR"), "/user-agents.rs"));
+
#[cfg(test)]
mod tests {
use super::*;
diff --git a/src/main.rs b/src/main.rs
index 3fb96ea..1f855f5 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -17,6 +17,7 @@ use tokio::{
use tokio_util::codec::{FramedRead, LinesCodec};
use feroxbuster::{
+ USER_AGENTS,
banner::{Banner, UPDATE_URL},
config::{Configuration, OutputLevel},
event_handlers::{
@@ -175,6 +176,8 @@ async fn wrapped_main(config: Arc) -> Result<()> {
PROGRESS_BAR.join().unwrap();
});
+ PROGRESS_PRINTER.println(USER_AGENTS[0]);
+
// spawn all event handlers, expect back a JoinHandle and a *Handle to the specific event
let (stats_task, stats_handle) = StatsHandler::initialize(config.clone());
let (filters_task, filters_handle) = FiltersHandler::initialize();
From efd706cb9ba34385f5fde276241ee319602c3eae Mon Sep 17 00:00:00 2001
From: Daniel Saxton
Date: Sun, 26 Sep 2021 10:09:52 -0500
Subject: [PATCH 15/91] cargo fmt
---
build.rs | 18 +++++++++++-------
src/main.rs | 2 +-
2 files changed, 12 insertions(+), 8 deletions(-)
diff --git a/build.rs b/build.rs
index d012407..7f3786e 100644
--- a/build.rs
+++ b/build.rs
@@ -7,7 +7,6 @@ use clap::Shell;
include!("src/parser.rs");
-
/// this code is taken from
/// https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=4734c208edf7da625588fa16b5e2ed93
/// which was linked in the random user agent issue discussion
@@ -24,17 +23,20 @@ fn generate_randomua() -> String {
let gecko_version = format!("{:.1}", rng.gen_range(40.0..60.0));
let platform = if (rng.gen::() % 2) == 0 {
let version = WINDOWS_VERSION.choose(&mut rng).unwrap();
- format!("(Windows NT {}; rv:{}) Gecko/20100101 Firefox/{}",
- version, gecko_version, gecko_version)
+ format!(
+ "(Windows NT {}; rv:{}) Gecko/20100101 Firefox/{}",
+ version, gecko_version, gecko_version
+ )
} else {
let version = format!("10.{}", rng.gen_range(0..19));
- format!("(Macintosh; Intel Mac OS X {}; rv:{}) Gecko/20100101 Firefox/{}",
- version, gecko_version, gecko_version)
+ format!(
+ "(Macintosh; Intel Mac OS X {}; rv:{}) Gecko/20100101 Firefox/{}",
+ version, gecko_version, gecko_version
+ )
};
format!("Mozilla/5.0 {}", platform)
}
-
fn main() {
println!("cargo:rerun-if-env-changed=src/parser.rs");
@@ -112,7 +114,9 @@ fn main() {
}
}
- let user_agents = (0..20).map(|_| generate_randomua()).collect::>();
+ let user_agents = (0..20)
+ .map(|_| generate_randomua())
+ .collect::>();
let mut definition = String::from("pub static USER_AGENTS:[&'static str; ");
diff --git a/src/main.rs b/src/main.rs
index 1f855f5..56fa8a1 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -17,7 +17,6 @@ use tokio::{
use tokio_util::codec::{FramedRead, LinesCodec};
use feroxbuster::{
- USER_AGENTS,
banner::{Banner, UPDATE_URL},
config::{Configuration, OutputLevel},
event_handlers::{
@@ -30,6 +29,7 @@ use feroxbuster::{
scan_manager::{self},
scanner,
utils::{fmt_err, slugify_filename},
+ USER_AGENTS,
};
#[cfg(not(target_os = "windows"))]
use feroxbuster::{utils::set_open_file_limit, DEFAULT_OPEN_FILE_LIMIT};
From c5e59b70f7813659df836f13321dde097c0c6203 Mon Sep 17 00:00:00 2001
From: Daniel Saxton
Date: Tue, 28 Sep 2021 15:44:11 -0500
Subject: [PATCH 16/91] Hard code
---
build.rs | 48 +-----------------------------------------------
src/lib.rs | 17 ++++++++++++++---
2 files changed, 15 insertions(+), 50 deletions(-)
diff --git a/build.rs b/build.rs
index 7f3786e..591a124 100644
--- a/build.rs
+++ b/build.rs
@@ -7,40 +7,10 @@ use clap::Shell;
include!("src/parser.rs");
-/// this code is taken from
-/// https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=4734c208edf7da625588fa16b5e2ed93
-/// which was linked in the random user agent issue discussion
-///
-/// ** I'm not advocating for the use of this code, just using it for demonstration purposes **
-use rand::prelude::*;
-use std::fmt::Write as fmt_Write;
-use std::fs::write;
-const WINDOWS_VERSION: [&str; 11] = [
- "3.1", "3.5", "4.0", "5.0", "5.1", "5.2", "6.0", "6.1", "6.2", "6.3", "10.0",
-];
-fn generate_randomua() -> String {
- let mut rng = thread_rng();
- let gecko_version = format!("{:.1}", rng.gen_range(40.0..60.0));
- let platform = if (rng.gen::() % 2) == 0 {
- let version = WINDOWS_VERSION.choose(&mut rng).unwrap();
- format!(
- "(Windows NT {}; rv:{}) Gecko/20100101 Firefox/{}",
- version, gecko_version, gecko_version
- )
- } else {
- let version = format!("10.{}", rng.gen_range(0..19));
- format!(
- "(Macintosh; Intel Mac OS X {}; rv:{}) Gecko/20100101 Firefox/{}",
- version, gecko_version, gecko_version
- )
- };
- format!("Mozilla/5.0 {}", platform)
-}
-
fn main() {
println!("cargo:rerun-if-env-changed=src/parser.rs");
- if env::var("DOCS_RS").is_ok() {
+ if std::env::var("DOCS_RS").is_ok() {
return; // only build when we're not generating docs
}
@@ -113,20 +83,4 @@ fn main() {
eprintln!("Couldn't copy example config into config directory");
}
}
-
- let user_agents = (0..20)
- .map(|_| generate_randomua())
- .collect::>();
-
- let mut definition = String::from("pub static USER_AGENTS:[&'static str; ");
-
- definition.push_str(user_agents.len().to_string().as_str());
- definition.push_str("] = [");
- for user_agent in user_agents {
- definition.push_str(&format!("\"{}\",", user_agent));
- }
- definition.push_str("];");
-
- let out_file = format!("{}/user-agents.rs", env::var("OUT_DIR").unwrap());
- write(out_file, definition);
}
diff --git a/src/lib.rs b/src/lib.rs
index 02e50e4..7d21910 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -91,9 +91,20 @@ pub const DEFAULT_STATUS_CODES: [StatusCode; 10] = [
///
/// Expected location is in the same directory as the feroxbuster binary.
pub const DEFAULT_CONFIG_NAME: &str = "ferox-config.toml";
-
-// includes user agents generated at build time
-include!(concat!(env!("OUT_DIR"), "/user-agents.rs"));
+pub const USER_AGENTS: [&str; 12] = [
+ "Mozilla/5.0 (Linux; Android 8.0.0; SM-G960F Build/R16NW) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.84 Mobile Safari/537.36",
+ "Mozilla/5.0 (iPhone; CPU iPhone OS 12_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Mobile/15E148 Safari/604.1",
+ "Mozilla/5.0 (Windows Phone 10.0; Android 6.0.1; Microsoft; RM-1152) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Mobile Safari/537.36 Edge/15.15254",
+ "Mozilla/5.0 (Linux; Android 7.0; Pixel C Build/NRD90M; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/52.0.2743.98 Safari/537.36",
+ "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.246",
+ "Mozilla/5.0 (X11; CrOS x86_64 8172.45.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.64 Safari/537.36",
+ "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/601.3.9 (KHTML, like Gecko) Version/9.0.2 Safari/601.3.9",
+ "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36",
+ "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:15.0) Gecko/20100101 Firefox/15.0.1",
+ "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)",
+ "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)",
+ "Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)",
+];
#[cfg(test)]
mod tests {
From 6de087ae79d0cb883eca66fcf9a1f40df25e9ffe Mon Sep 17 00:00:00 2001
From: epi <43392618+epi052@users.noreply.github.com>
Date: Sun, 3 Oct 2021 11:26:48 -0500
Subject: [PATCH 17/91] Update cicd-to-dockerhub.yml
---
.github/workflows/cicd-to-dockerhub.yml | 2 --
1 file changed, 2 deletions(-)
diff --git a/.github/workflows/cicd-to-dockerhub.yml b/.github/workflows/cicd-to-dockerhub.yml
index a7cfbf9..863c508 100644
--- a/.github/workflows/cicd-to-dockerhub.yml
+++ b/.github/workflows/cicd-to-dockerhub.yml
@@ -3,8 +3,6 @@ name: ci-to-dockerhub
on:
push:
branches: [ main ]
- pull_request:
- branches: [ main ]
jobs:
build:
From e48a462471ca9163a1e012c9224e71a42e54f61a Mon Sep 17 00:00:00 2001
From: epi <43392618+epi052@users.noreply.github.com>
Date: Thu, 7 Oct 2021 06:40:40 -0500
Subject: [PATCH 18/91] added confirmed tag to stale-bot
---
.github/stale.yml | 1 +
1 file changed, 1 insertion(+)
diff --git a/.github/stale.yml b/.github/stale.yml
index cd6e1b8..07ec901 100644
--- a/.github/stale.yml
+++ b/.github/stale.yml
@@ -6,6 +6,7 @@ daysUntilClose: 7
exemptLabels:
- pinned
- security
+ - confirmed
# Label to use when marking an issue as stale
staleLabel: stale
# Comment to post when marking an issue as stale. Set to `false` to disable
From ef7fc7a8a3891b6b4257b5b3efdf237624080adf Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Thu, 7 Oct 2021 11:45:26 +0000
Subject: [PATCH 19/91] docs: update README.md [skip ci]
---
README.md | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)
diff --git a/README.md b/README.md
index 27812dd..187edcf 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,7 @@
+
+[](#contributors-)
+
@@ -164,3 +167,23 @@ cat targets | ./feroxbuster --stdin --silent -s 200 301 302 --redirects -x js |
For realsies, there used to be over 1300 lines in this README, but it's all been moved to the [new documentation site](https://epi052.github.io/feroxbuster-docs/docs/). Go check it out!
✨🎉👉 DOCUMENTATION 👈🎉✨
+
+## Contributors ✨
+
+Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
+
+
+
+
+
+
+
+
+
+
+
+This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!
\ No newline at end of file
From 2d5825556f7b155e2309c64c9080813a5c1c5f25 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Thu, 7 Oct 2021 11:45:27 +0000
Subject: [PATCH 20/91] docs: create .all-contributorsrc [skip ci]
---
.all-contributorsrc | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
create mode 100644 .all-contributorsrc
diff --git a/.all-contributorsrc b/.all-contributorsrc
new file mode 100644
index 0000000..34c3269
--- /dev/null
+++ b/.all-contributorsrc
@@ -0,0 +1,24 @@
+{
+ "files": [
+ "README.md"
+ ],
+ "imageSize": 100,
+ "commit": false,
+ "contributors": [
+ {
+ "login": "joohoi",
+ "name": "Joona Hoikkala",
+ "avatar_url": "https://avatars.githubusercontent.com/u/5235109?v=4",
+ "profile": "https://io.fi",
+ "contributions": [
+ "doc"
+ ]
+ }
+ ],
+ "contributorsPerLine": 7,
+ "projectName": "feroxbuster",
+ "projectOwner": "epi052",
+ "repoType": "github",
+ "repoHost": "https://github.com",
+ "skipCi": true
+}
From 5c32fab4cbfec7398558b87af8c7841b44aba94a Mon Sep 17 00:00:00 2001
From: epi
Date: Thu, 7 Oct 2021 06:54:26 -0500
Subject: [PATCH 21/91] fixed badge
---
README.md | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/README.md b/README.md
index 187edcf..0178a04 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,4 @@
-
-[](#contributors-)
-
@@ -33,6 +30,12 @@
+
+
+
+
+
+

From 653117bda6ef0caf374b5a41f1a581874c13d36b Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Thu, 7 Oct 2021 12:12:28 +0000
Subject: [PATCH 22/91] docs: update README.md [skip ci]
---
README.md | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/README.md b/README.md
index 0178a04..e1d729e 100644
--- a/README.md
+++ b/README.md
@@ -32,10 +32,8 @@
-
-
-
-
+[](#contributors-)
+

@@ -181,6 +179,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
From 0d1cb25b69ad423bf4ea8ee4c9f72d53a00ac91d Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Thu, 7 Oct 2021 12:12:29 +0000
Subject: [PATCH 23/91] docs: update .all-contributorsrc [skip ci]
---
.all-contributorsrc | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/.all-contributorsrc b/.all-contributorsrc
index 34c3269..65bbeb7 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -13,6 +13,16 @@
"contributions": [
"doc"
]
+ },
+ {
+ "login": "jsav0",
+ "name": "J Savage",
+ "avatar_url": "https://avatars.githubusercontent.com/u/20546041?v=4",
+ "profile": "https://github.com/jsav0",
+ "contributions": [
+ "infra",
+ "doc"
+ ]
}
],
"contributorsPerLine": 7,
From e5fe9bb36015dcda7a9a012216ef7431c0ca0f40 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Thu, 7 Oct 2021 12:13:29 +0000
Subject: [PATCH 24/91] docs: update README.md [skip ci]
---
README.md | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/README.md b/README.md
index e1d729e..285772c 100644
--- a/README.md
+++ b/README.md
@@ -32,7 +32,7 @@
-[](#contributors-)
+[](#contributors-)
@@ -180,6 +180,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
 Joona Hoikkala 📖 |
 J Savage 🚇 📖 |
+  Thomas Gotwig 🚇 📖 |
From 092515cf3aeb9ff38a86b2e615208bbcf77402b3 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Thu, 7 Oct 2021 12:13:30 +0000
Subject: [PATCH 25/91] docs: update .all-contributorsrc [skip ci]
---
.all-contributorsrc | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/.all-contributorsrc b/.all-contributorsrc
index 65bbeb7..3e79040 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -23,6 +23,16 @@
"infra",
"doc"
]
+ },
+ {
+ "login": "TGotwig",
+ "name": "Thomas Gotwig",
+ "avatar_url": "https://avatars.githubusercontent.com/u/30773779?v=4",
+ "profile": "http://www.tgotwig.dev",
+ "contributions": [
+ "infra",
+ "doc"
+ ]
}
],
"contributorsPerLine": 7,
From c33d3973603556ca39f17209098ac4174c8f20c3 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Thu, 7 Oct 2021 12:14:01 +0000
Subject: [PATCH 26/91] docs: update README.md [skip ci]
---
README.md | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 285772c..38532e8 100644
--- a/README.md
+++ b/README.md
@@ -32,7 +32,7 @@
-[](#contributors-)
+[](#contributors-)
@@ -181,6 +181,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
 Joona Hoikkala 📖 |
 J Savage 🚇 📖 |
 Thomas Gotwig 🚇 📖 |
+  Spike 🚇 📖 |
From b508dcce8d4817bb19f17a98baf786219bc9b8de Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Thu, 7 Oct 2021 12:14:02 +0000
Subject: [PATCH 27/91] docs: update .all-contributorsrc [skip ci]
---
.all-contributorsrc | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/.all-contributorsrc b/.all-contributorsrc
index 3e79040..1fbef72 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -33,6 +33,16 @@
"infra",
"doc"
]
+ },
+ {
+ "login": "spikecodes",
+ "name": "Spike",
+ "avatar_url": "https://avatars.githubusercontent.com/u/19519553?v=4",
+ "profile": "https://github.com/spikecodes",
+ "contributions": [
+ "infra",
+ "doc"
+ ]
}
],
"contributorsPerLine": 7,
From 36994d208df230b0238342ba56005dd7c3d8598d Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Thu, 7 Oct 2021 12:14:41 +0000
Subject: [PATCH 28/91] docs: update README.md [skip ci]
---
README.md | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 38532e8..ba9aa7b 100644
--- a/README.md
+++ b/README.md
@@ -32,7 +32,7 @@
-[](#contributors-)
+[](#contributors-)
@@ -182,6 +182,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
 J Savage 🚇 📖 |
 Thomas Gotwig 🚇 📖 |
 Spike 🚇 📖 |
+  Evan Richter 💻 📖 |
From a439be0305576e7e5a2faa45908921b8573fc374 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Thu, 7 Oct 2021 12:14:42 +0000
Subject: [PATCH 29/91] docs: update .all-contributorsrc [skip ci]
---
.all-contributorsrc | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/.all-contributorsrc b/.all-contributorsrc
index 1fbef72..4f66a99 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -43,6 +43,16 @@
"infra",
"doc"
]
+ },
+ {
+ "login": "evanrichter",
+ "name": "Evan Richter",
+ "avatar_url": "https://avatars.githubusercontent.com/u/330292?v=4",
+ "profile": "https://github.com/evanrichter",
+ "contributions": [
+ "code",
+ "doc"
+ ]
}
],
"contributorsPerLine": 7,
From 831ae011e21155b959c6cf8843c1da71f26f91b3 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Thu, 7 Oct 2021 12:15:06 +0000
Subject: [PATCH 30/91] docs: update README.md [skip ci]
---
README.md | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/README.md b/README.md
index ba9aa7b..f3c5770 100644
--- a/README.md
+++ b/README.md
@@ -32,7 +32,7 @@
-[](#contributors-)
+[](#contributors-)
@@ -183,6 +183,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
 Thomas Gotwig 🚇 📖 |
 Spike 🚇 📖 |
 Evan Richter 💻 📖 |
+  AG 🤔 📖 |
From c65e2f02b372e1e791359d7db8f678be12724fc8 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Thu, 7 Oct 2021 12:15:06 +0000
Subject: [PATCH 31/91] docs: update .all-contributorsrc [skip ci]
---
.all-contributorsrc | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/.all-contributorsrc b/.all-contributorsrc
index 4f66a99..3941124 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -53,6 +53,16 @@
"code",
"doc"
]
+ },
+ {
+ "login": "mzpqnxow",
+ "name": "AG",
+ "avatar_url": "https://avatars.githubusercontent.com/u/8016228?v=4",
+ "profile": "https://github.com/mzpqnxow",
+ "contributions": [
+ "ideas",
+ "doc"
+ ]
}
],
"contributorsPerLine": 7,
From e39f6cf16d46e72e662587aee8e13f078c6e15d1 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Thu, 7 Oct 2021 12:15:34 +0000
Subject: [PATCH 32/91] docs: update README.md [skip ci]
---
README.md | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/README.md b/README.md
index f3c5770..b867c02 100644
--- a/README.md
+++ b/README.md
@@ -32,7 +32,7 @@
-[](#contributors-)
+[](#contributors-)
@@ -184,6 +184,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
 Spike 🚇 📖 |
 Evan Richter 💻 📖 |
 AG 🤔 📖 |
+  Nicolas Thumann 💻 📖 |
From cc1dc94459ad6ec8b005fc9c39f1d2a972483d30 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Thu, 7 Oct 2021 12:15:35 +0000
Subject: [PATCH 33/91] docs: update .all-contributorsrc [skip ci]
---
.all-contributorsrc | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/.all-contributorsrc b/.all-contributorsrc
index 3941124..97ce697 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -63,6 +63,16 @@
"ideas",
"doc"
]
+ },
+ {
+ "login": "n-thumann",
+ "name": "Nicolas Thumann",
+ "avatar_url": "https://avatars.githubusercontent.com/u/46975855?v=4",
+ "profile": "https://n-thumann.de/",
+ "contributions": [
+ "code",
+ "doc"
+ ]
}
],
"contributorsPerLine": 7,
From f260a981cab456477ae325bc6b67344d07fbd3be Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Thu, 7 Oct 2021 12:16:04 +0000
Subject: [PATCH 34/91] docs: update README.md [skip ci]
---
README.md | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/README.md b/README.md
index b867c02..0835aa7 100644
--- a/README.md
+++ b/README.md
@@ -32,7 +32,7 @@
-[](#contributors-)
+[](#contributors-)
@@ -186,6 +186,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
 AG 🤔 📖 |
 Nicolas Thumann 💻 📖 |
+
+  Tom Matthews 📖 |
+
From 00b0c3c62d6ee6c079d5d9f1ebfa6244f40e2a4f Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Thu, 7 Oct 2021 12:16:05 +0000
Subject: [PATCH 35/91] docs: update .all-contributorsrc [skip ci]
---
.all-contributorsrc | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/.all-contributorsrc b/.all-contributorsrc
index 97ce697..49cbb00 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -73,6 +73,15 @@
"code",
"doc"
]
+ },
+ {
+ "login": "tomtastic",
+ "name": "Tom Matthews",
+ "avatar_url": "https://avatars.githubusercontent.com/u/302127?v=4",
+ "profile": "https://github.com/tomtastic",
+ "contributions": [
+ "doc"
+ ]
}
],
"contributorsPerLine": 7,
From 672d17ec2737b314f504edd4111ee790ba486512 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Thu, 7 Oct 2021 12:16:28 +0000
Subject: [PATCH 36/91] docs: update README.md [skip ci]
---
README.md | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 0835aa7..0719592 100644
--- a/README.md
+++ b/README.md
@@ -32,7 +32,7 @@
-[](#contributors-)
+[](#contributors-)
@@ -188,6 +188,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
 Tom Matthews 📖 |
+  bsysop 📖 |
From a035f0eeaf4621616e4d9ad5464868da6fd70d3a Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Thu, 7 Oct 2021 12:16:28 +0000
Subject: [PATCH 37/91] docs: update .all-contributorsrc [skip ci]
---
.all-contributorsrc | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/.all-contributorsrc b/.all-contributorsrc
index 49cbb00..ea62350 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -82,6 +82,15 @@
"contributions": [
"doc"
]
+ },
+ {
+ "login": "bsysop",
+ "name": "bsysop",
+ "avatar_url": "https://avatars.githubusercontent.com/u/9998303?v=4",
+ "profile": "https://github.com/bsysop",
+ "contributions": [
+ "doc"
+ ]
}
],
"contributorsPerLine": 7,
From b6c41ae2d35063951dc68772dbcc25b909703bfe Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Thu, 7 Oct 2021 12:16:46 +0000
Subject: [PATCH 38/91] docs: update README.md [skip ci]
---
README.md | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 0719592..d83782a 100644
--- a/README.md
+++ b/README.md
@@ -32,7 +32,7 @@
-[](#contributors-)
+[](#contributors-)
@@ -189,6 +189,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
 Tom Matthews 📖 |
 bsysop 📖 |
+  Brian Sizemore 💻 |
From 7d314c7bac6861d6f4dc21f6082166cc209edeb6 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Thu, 7 Oct 2021 12:16:47 +0000
Subject: [PATCH 39/91] docs: update .all-contributorsrc [skip ci]
---
.all-contributorsrc | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/.all-contributorsrc b/.all-contributorsrc
index ea62350..518e134 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -91,6 +91,15 @@
"contributions": [
"doc"
]
+ },
+ {
+ "login": "bpsizemore",
+ "name": "Brian Sizemore",
+ "avatar_url": "https://avatars.githubusercontent.com/u/11645898?v=4",
+ "profile": "http://bpsizemore.me",
+ "contributions": [
+ "code"
+ ]
}
],
"contributorsPerLine": 7,
From 74b23141e01ef5811b3eda1ba63a61c8673af3c1 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Thu, 7 Oct 2021 12:17:07 +0000
Subject: [PATCH 40/91] docs: update README.md [skip ci]
---
README.md | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/README.md b/README.md
index d83782a..852d21e 100644
--- a/README.md
+++ b/README.md
@@ -32,7 +32,7 @@
-[](#contributors-)
+[](#contributors-)
@@ -190,6 +190,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
 Tom Matthews 📖 |
 bsysop 📖 |
 Brian Sizemore 💻 |
+  Alexandre ZANNI 🚇 📖 |
From 6d5235ab0a24183a53799f393185b5695f1d67b7 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Thu, 7 Oct 2021 12:17:08 +0000
Subject: [PATCH 41/91] docs: update .all-contributorsrc [skip ci]
---
.all-contributorsrc | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/.all-contributorsrc b/.all-contributorsrc
index 518e134..c92834f 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -100,6 +100,16 @@
"contributions": [
"code"
]
+ },
+ {
+ "login": "noraj",
+ "name": "Alexandre ZANNI",
+ "avatar_url": "https://avatars.githubusercontent.com/u/16578570?v=4",
+ "profile": "https://pwn.by/noraj",
+ "contributions": [
+ "infra",
+ "doc"
+ ]
}
],
"contributorsPerLine": 7,
From d9718d0d6af6eb73997a2a0c31e95467d93732cb Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Thu, 7 Oct 2021 12:17:34 +0000
Subject: [PATCH 42/91] docs: update README.md [skip ci]
---
README.md | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 852d21e..34e618b 100644
--- a/README.md
+++ b/README.md
@@ -32,7 +32,7 @@
-[](#contributors-)
+[](#contributors-)
@@ -191,6 +191,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
 bsysop 📖 |
 Brian Sizemore 💻 |
 Alexandre ZANNI 🚇 📖 |
+  Craig 🚇 |
From 542db19180d1f521e9ae786cc9c0e4b19facc946 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Thu, 7 Oct 2021 12:17:35 +0000
Subject: [PATCH 43/91] docs: update .all-contributorsrc [skip ci]
---
.all-contributorsrc | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/.all-contributorsrc b/.all-contributorsrc
index c92834f..f3bfc45 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -110,6 +110,15 @@
"infra",
"doc"
]
+ },
+ {
+ "login": "craig",
+ "name": "Craig",
+ "avatar_url": "https://avatars.githubusercontent.com/u/99729?v=4",
+ "profile": "https://github.com/craig",
+ "contributions": [
+ "infra"
+ ]
}
],
"contributorsPerLine": 7,
From cc18dfc7d44c7027dc96b2875720a4fdad164a36 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Thu, 7 Oct 2021 12:17:59 +0000
Subject: [PATCH 44/91] docs: update README.md [skip ci]
---
README.md | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 34e618b..02b1e8e 100644
--- a/README.md
+++ b/README.md
@@ -32,7 +32,7 @@
-[](#contributors-)
+[](#contributors-)
@@ -192,6 +192,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
 Brian Sizemore 💻 |
 Alexandre ZANNI 🚇 📖 |
 Craig 🚇 |
+  EONRaider 🚇 |
From 14023f7e05bc272334dd825a5a04df401547f458 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Thu, 7 Oct 2021 12:18:00 +0000
Subject: [PATCH 45/91] docs: update .all-contributorsrc [skip ci]
---
.all-contributorsrc | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/.all-contributorsrc b/.all-contributorsrc
index f3bfc45..0837d66 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -119,6 +119,15 @@
"contributions": [
"infra"
]
+ },
+ {
+ "login": "EONRaider",
+ "name": "EONRaider",
+ "avatar_url": "https://avatars.githubusercontent.com/u/15611424?v=4",
+ "profile": "https://www.reddit.com/u/EONRaider",
+ "contributions": [
+ "infra"
+ ]
}
],
"contributorsPerLine": 7,
From ece220263b992dadeadabed7b8fb760aba14a960 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Thu, 7 Oct 2021 12:18:19 +0000
Subject: [PATCH 46/91] docs: update README.md [skip ci]
---
README.md | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 02b1e8e..b625aa5 100644
--- a/README.md
+++ b/README.md
@@ -32,7 +32,7 @@
-[](#contributors-)
+[](#contributors-)
@@ -193,6 +193,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
 Alexandre ZANNI 🚇 📖 |
 Craig 🚇 |
 EONRaider 🚇 |
+  wtwver 🚇 |
From 9f93c2381a56658f0d2c5d1fb5c46bacbdb0522d Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Thu, 7 Oct 2021 12:18:20 +0000
Subject: [PATCH 47/91] docs: update .all-contributorsrc [skip ci]
---
.all-contributorsrc | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/.all-contributorsrc b/.all-contributorsrc
index 0837d66..4fcc578 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -128,6 +128,15 @@
"contributions": [
"infra"
]
+ },
+ {
+ "login": "wtwver",
+ "name": "wtwver",
+ "avatar_url": "https://avatars.githubusercontent.com/u/53866088?v=4",
+ "profile": "https://github.com/wtwver",
+ "contributions": [
+ "infra"
+ ]
}
],
"contributorsPerLine": 7,
From ea5180555272402e48495c3d2d063deedad78d58 Mon Sep 17 00:00:00 2001
From: epi
Date: Thu, 7 Oct 2021 07:20:34 -0500
Subject: [PATCH 48/91] fixed badge
---
README.md | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/README.md b/README.md
index b625aa5..38b87ea 100644
--- a/README.md
+++ b/README.md
@@ -32,8 +32,10 @@
-[](#contributors-)
-
+
+
+
+

From fe5612ce71558b826a9f1f6535de309dea117db2 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Sat, 9 Oct 2021 21:18:39 +0000
Subject: [PATCH 49/91] docs: update README.md [skip ci]
---
README.md | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/README.md b/README.md
index 38b87ea..dffa05b 100644
--- a/README.md
+++ b/README.md
@@ -32,10 +32,8 @@
-
-
-
-
+[](#contributors-)
+

@@ -197,6 +195,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
 EONRaider 🚇 |
 wtwver 🚇 |
+
+  Tib3rius 🐛 |
+
From 4b0b26da0283b9550af65f834b067f310f9209a5 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Sat, 9 Oct 2021 21:18:40 +0000
Subject: [PATCH 50/91] docs: update .all-contributorsrc [skip ci]
---
.all-contributorsrc | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/.all-contributorsrc b/.all-contributorsrc
index 4fcc578..8b2a3c5 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -137,6 +137,15 @@
"contributions": [
"infra"
]
+ },
+ {
+ "login": "Tib3rius",
+ "name": "Tib3rius",
+ "avatar_url": "https://avatars.githubusercontent.com/u/48113936?v=4",
+ "profile": "https://tib3rius.com",
+ "contributions": [
+ "bug"
+ ]
}
],
"contributorsPerLine": 7,
From 1e4d3802f809e544af8ae9a5de8d452547559301 Mon Sep 17 00:00:00 2001
From: epi
Date: Sat, 9 Oct 2021 16:21:58 -0500
Subject: [PATCH 51/91] updated readme
---
README.md | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/README.md b/README.md
index dffa05b..fb1227b 100644
--- a/README.md
+++ b/README.md
@@ -30,10 +30,15 @@
-
+
-[](#contributors-)
-
+ [](#contributors-)
+
+ -->
+
+
+
+

From b1d33f4f7dc6a062f582918945c8b1d418db0c29 Mon Sep 17 00:00:00 2001
From: epi
Date: Sat, 9 Oct 2021 16:23:16 -0500
Subject: [PATCH 52/91] updated readme
---
README.md | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/README.md b/README.md
index fb1227b..76e7c0a 100644
--- a/README.md
+++ b/README.md
@@ -31,10 +31,9 @@
+
- -->
From 46366291f1c5a475edeada52aa0123f5edae4017 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Sat, 9 Oct 2021 21:25:06 +0000
Subject: [PATCH 53/91] docs: update README.md [skip ci]
---
README.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/README.md b/README.md
index 76e7c0a..92b885a 100644
--- a/README.md
+++ b/README.md
@@ -201,6 +201,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
 Tib3rius 🐛 |
+  0xdf 🐛 |
From d0cdf5766bf98cf5e99615549523b1b0f9b58d13 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Sat, 9 Oct 2021 21:25:07 +0000
Subject: [PATCH 54/91] docs: update .all-contributorsrc [skip ci]
---
.all-contributorsrc | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/.all-contributorsrc b/.all-contributorsrc
index 8b2a3c5..bca1284 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -146,6 +146,15 @@
"contributions": [
"bug"
]
+ },
+ {
+ "login": "0xdf",
+ "name": "0xdf",
+ "avatar_url": "https://avatars.githubusercontent.com/u/1489045?v=4",
+ "profile": "https://github.com/0xdf",
+ "contributions": [
+ "bug"
+ ]
}
],
"contributorsPerLine": 7,
From 98d6fdf536eef5a7c82dc14fd33ea9663fc68f02 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Sat, 9 Oct 2021 21:26:28 +0000
Subject: [PATCH 55/91] docs: update README.md [skip ci]
---
README.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/README.md b/README.md
index 92b885a..29d565a 100644
--- a/README.md
+++ b/README.md
@@ -202,6 +202,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
 Tib3rius 🐛 |
 0xdf 🐛 |
+  Muhammad Ahsan 🐛 |
From 073291360a0dc6a43710b21673c5e6ff6a67ee8f Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Sat, 9 Oct 2021 21:26:29 +0000
Subject: [PATCH 56/91] docs: update .all-contributorsrc [skip ci]
---
.all-contributorsrc | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/.all-contributorsrc b/.all-contributorsrc
index bca1284..3bbe28e 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -155,6 +155,15 @@
"contributions": [
"bug"
]
+ },
+ {
+ "login": "hunter0x8",
+ "name": "Muhammad Ahsan",
+ "avatar_url": "https://avatars.githubusercontent.com/u/46222314?v=4",
+ "profile": "https://github.com/hunter0x8",
+ "contributions": [
+ "bug"
+ ]
}
],
"contributorsPerLine": 7,
From 0b2d77605ed468ca0c056ea73431005c5acf3cc2 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Sat, 9 Oct 2021 21:27:16 +0000
Subject: [PATCH 57/91] docs: update README.md [skip ci]
---
README.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/README.md b/README.md
index 92b885a..7cab87a 100644
--- a/README.md
+++ b/README.md
@@ -202,6 +202,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
 Tib3rius 🐛 |
 0xdf 🐛 |
+  secure-77 🐛 |
From 7afb26120671822680b328afe08e1363d592e454 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Sat, 9 Oct 2021 21:27:17 +0000
Subject: [PATCH 58/91] docs: update .all-contributorsrc [skip ci]
---
.all-contributorsrc | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/.all-contributorsrc b/.all-contributorsrc
index bca1284..72f994b 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -155,6 +155,15 @@
"contributions": [
"bug"
]
+ },
+ {
+ "login": "secure-77",
+ "name": "secure-77",
+ "avatar_url": "https://avatars.githubusercontent.com/u/31564517?v=4",
+ "profile": "http://secure77.de",
+ "contributions": [
+ "bug"
+ ]
}
],
"contributorsPerLine": 7,
From b36c3e0318aff777b0cf91b941f9d03024d1d286 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Sat, 9 Oct 2021 21:27:49 +0000
Subject: [PATCH 59/91] docs: update README.md [skip ci]
---
README.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/README.md b/README.md
index 7cab87a..9c7d2c1 100644
--- a/README.md
+++ b/README.md
@@ -203,6 +203,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
 Tib3rius 🐛 |
 0xdf 🐛 |
 secure-77 🐛 |
+  Sophie Brun 🚇 |
From 82f8f687fd18f46b21e81f31ea189dc9fe29a1cc Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Sat, 9 Oct 2021 21:27:49 +0000
Subject: [PATCH 60/91] docs: update .all-contributorsrc [skip ci]
---
.all-contributorsrc | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/.all-contributorsrc b/.all-contributorsrc
index 72f994b..c6f45bf 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -164,6 +164,15 @@
"contributions": [
"bug"
]
+ },
+ {
+ "login": "sbrun",
+ "name": "Sophie Brun",
+ "avatar_url": "https://avatars.githubusercontent.com/u/7712154?v=4",
+ "profile": "https://github.com/sbrun",
+ "contributions": [
+ "infra"
+ ]
}
],
"contributorsPerLine": 7,
From 5350724e5f06a836f6f0bb249522c3d500d37867 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Sat, 9 Oct 2021 21:29:15 +0000
Subject: [PATCH 61/91] docs: update README.md [skip ci]
---
README.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/README.md b/README.md
index 9c7d2c1..4620146 100644
--- a/README.md
+++ b/README.md
@@ -204,6 +204,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
 0xdf 🐛 |
 secure-77 🐛 |
 Sophie Brun 🚇 |
+  black-A 🤔 |
From 72fc0b026d233a4141eaec5c4eba152d8a7c26dd Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Sat, 9 Oct 2021 21:29:16 +0000
Subject: [PATCH 62/91] docs: update .all-contributorsrc [skip ci]
---
.all-contributorsrc | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/.all-contributorsrc b/.all-contributorsrc
index c6f45bf..8c6aec2 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -173,6 +173,15 @@
"contributions": [
"infra"
]
+ },
+ {
+ "login": "black-A",
+ "name": "black-A",
+ "avatar_url": "https://avatars.githubusercontent.com/u/30686803?v=4",
+ "profile": "https://github.com/black-A",
+ "contributions": [
+ "ideas"
+ ]
}
],
"contributorsPerLine": 7,
From 125a55f72bb172f12a2de0e68dd25c8155265c53 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Sat, 9 Oct 2021 21:31:47 +0000
Subject: [PATCH 63/91] docs: update README.md [skip ci]
---
README.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/README.md b/README.md
index 4620146..5a4b927 100644
--- a/README.md
+++ b/README.md
@@ -205,6 +205,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
 secure-77 🐛 |
 Sophie Brun 🚇 |
 black-A 🤔 |
+  Nicolas Krassas 🤔 |
From 1723847672b53755a52f45539002f879e227745d Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Sat, 9 Oct 2021 21:31:48 +0000
Subject: [PATCH 64/91] docs: update .all-contributorsrc [skip ci]
---
.all-contributorsrc | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/.all-contributorsrc b/.all-contributorsrc
index 8c6aec2..6937cca 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -182,6 +182,15 @@
"contributions": [
"ideas"
]
+ },
+ {
+ "login": "dinosn",
+ "name": "Nicolas Krassas",
+ "avatar_url": "https://avatars.githubusercontent.com/u/3851678?v=4",
+ "profile": "https://github.com/dinosn",
+ "contributions": [
+ "ideas"
+ ]
}
],
"contributorsPerLine": 7,
From 90dd18af2ea3fd682a3109219b289c838c98bdf4 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Sun, 10 Oct 2021 10:40:17 +0000
Subject: [PATCH 65/91] docs: update README.md [skip ci]
---
README.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/README.md b/README.md
index 5a4b927..e6df3f1 100644
--- a/README.md
+++ b/README.md
@@ -206,6 +206,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
 Sophie Brun 🚇 |
 black-A 🤔 |
 Nicolas Krassas 🤔 |
+  N0ur5 🤔 |
From 3ee6641a7df212427191bd3f683a14d0c8fc59e3 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Sun, 10 Oct 2021 10:40:18 +0000
Subject: [PATCH 66/91] docs: update .all-contributorsrc [skip ci]
---
.all-contributorsrc | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/.all-contributorsrc b/.all-contributorsrc
index 6937cca..e824214 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -191,6 +191,15 @@
"contributions": [
"ideas"
]
+ },
+ {
+ "login": "N0ur5",
+ "name": "N0ur5",
+ "avatar_url": "https://avatars.githubusercontent.com/u/24260009?v=4",
+ "profile": "https://github.com/N0ur5",
+ "contributions": [
+ "ideas"
+ ]
}
],
"contributorsPerLine": 7,
From 0281057944df70c83c782b21b2570431787ec964 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Sun, 10 Oct 2021 10:41:26 +0000
Subject: [PATCH 67/91] docs: update README.md [skip ci]
---
README.md | 3 +++
1 file changed, 3 insertions(+)
diff --git a/README.md b/README.md
index e6df3f1..5f22a7e 100644
--- a/README.md
+++ b/README.md
@@ -208,6 +208,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
 Nicolas Krassas 🤔 |
 N0ur5 🤔 |
+
+  mchill 🐛 |
+
From 86dc8edd3d7e9905db87b09b144f5e5c6c554cab Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Sun, 10 Oct 2021 10:41:27 +0000
Subject: [PATCH 68/91] docs: update .all-contributorsrc [skip ci]
---
.all-contributorsrc | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/.all-contributorsrc b/.all-contributorsrc
index e824214..da0a86e 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -200,6 +200,15 @@
"contributions": [
"ideas"
]
+ },
+ {
+ "login": "moscowchill",
+ "name": "mchill",
+ "avatar_url": "https://avatars.githubusercontent.com/u/72578879?v=4",
+ "profile": "https://github.com/moscowchill",
+ "contributions": [
+ "bug"
+ ]
}
],
"contributorsPerLine": 7,
From bb6146c18f331d305c131527f4bea25f5d56b013 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Sun, 10 Oct 2021 10:42:50 +0000
Subject: [PATCH 69/91] docs: update README.md [skip ci]
---
README.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/README.md b/README.md
index 5f22a7e..f680dc9 100644
--- a/README.md
+++ b/README.md
@@ -210,6 +210,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
 mchill 🐛 |
+  Naman 🐛 |
From c29abe4ec4af1db407a6605dc589086de460b8bc Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Sun, 10 Oct 2021 10:42:51 +0000
Subject: [PATCH 70/91] docs: update .all-contributorsrc [skip ci]
---
.all-contributorsrc | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/.all-contributorsrc b/.all-contributorsrc
index da0a86e..65099be 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -209,6 +209,15 @@
"contributions": [
"bug"
]
+ },
+ {
+ "login": "BitThr3at",
+ "name": "Naman",
+ "avatar_url": "https://avatars.githubusercontent.com/u/45028933?v=4",
+ "profile": "http://BitThr3at.github.io",
+ "contributions": [
+ "bug"
+ ]
}
],
"contributorsPerLine": 7,
From ac56225405d2e627b2613ee5aa4ab080e964d225 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Sun, 10 Oct 2021 10:44:03 +0000
Subject: [PATCH 71/91] docs: update README.md [skip ci]
---
README.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/README.md b/README.md
index f680dc9..7c3db90 100644
--- a/README.md
+++ b/README.md
@@ -211,6 +211,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
 mchill 🐛 |
 Naman 🐛 |
+  Ayoub Elaich 🐛 |
From 035a8c75c028f4a53423a11af0095889e59cd77d Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Sun, 10 Oct 2021 10:44:04 +0000
Subject: [PATCH 72/91] docs: update .all-contributorsrc [skip ci]
---
.all-contributorsrc | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/.all-contributorsrc b/.all-contributorsrc
index 65099be..74ae7f4 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -218,6 +218,15 @@
"contributions": [
"bug"
]
+ },
+ {
+ "login": "sicks3c",
+ "name": "Ayoub Elaich",
+ "avatar_url": "https://avatars.githubusercontent.com/u/32225186?v=4",
+ "profile": "https://github.com/Sicks3c",
+ "contributions": [
+ "bug"
+ ]
}
],
"contributorsPerLine": 7,
From da9bec5a674ba739f92d8eaa12d62a00684b1811 Mon Sep 17 00:00:00 2001
From: epi
Date: Sun, 10 Oct 2021 05:51:43 -0500
Subject: [PATCH 73/91] added henry hoggard
---
.all-contributorsrc | 9 +++++++++
README.md | 1 +
2 files changed, 10 insertions(+)
diff --git a/.all-contributorsrc b/.all-contributorsrc
index 74ae7f4..bd6817b 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -224,6 +224,15 @@
"name": "Ayoub Elaich",
"avatar_url": "https://avatars.githubusercontent.com/u/32225186?v=4",
"profile": "https://github.com/Sicks3c",
+ "contributions": [
+ "bug"
+ ]
+ },
+ {
+ "login": "HenryHoggard",
+ "name": "Henry",
+ "avatar_url": "https://avatars.githubusercontent.com/u/1208121?v=4",
+ "profile": "https://github.com/HenryHoggard",
"contributions": [
"bug"
]
diff --git a/README.md b/README.md
index 7c3db90..831f5df 100644
--- a/README.md
+++ b/README.md
@@ -212,6 +212,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
 mchill 🐛 |
 Naman 🐛 |
 Ayoub Elaich 🐛 |
+  Henry 🐛 |
From 93686acb48d33efea90ffedc84513ef6aed59ee8 Mon Sep 17 00:00:00 2001
From: epi
Date: Sun, 10 Oct 2021 06:02:36 -0500
Subject: [PATCH 74/91] updated contributor
---
.all-contributorsrc | 9 +++++++++
README.md | 1 +
2 files changed, 10 insertions(+)
diff --git a/.all-contributorsrc b/.all-contributorsrc
index bd6817b..4cdebc6 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -236,6 +236,15 @@
"contributions": [
"bug"
]
+ },
+ {
+ "login": "HenryHoggard",
+ "name": "Henry",
+ "avatar_url": "https://avatars.githubusercontent.com/u/6428561?v=4",
+ "profile": "https://github.com/SleepiPanda",
+ "contributions": [
+ "bug"
+ ]
}
],
"contributorsPerLine": 7,
diff --git a/README.md b/README.md
index 831f5df..36ce8b3 100644
--- a/README.md
+++ b/README.md
@@ -213,6 +213,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
 Naman 🐛 |
 Ayoub Elaich 🐛 |
 Henry 🐛 |
+  SleepiPanda 🐛 |
From 9ca48fe877da36947ab2335042566d9bda4a0e13 Mon Sep 17 00:00:00 2001
From: epi
Date: Sun, 10 Oct 2021 06:06:51 -0500
Subject: [PATCH 75/91] updated contributor
---
.all-contributorsrc | 13 +++++++++++--
README.md | 1 +
2 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/.all-contributorsrc b/.all-contributorsrc
index 4cdebc6..9429e14 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -238,13 +238,22 @@
]
},
{
- "login": "HenryHoggard",
- "name": "Henry",
+ "login": "SleepiPanda",
+ "name": "SleepiPanda",
"avatar_url": "https://avatars.githubusercontent.com/u/6428561?v=4",
"profile": "https://github.com/SleepiPanda",
"contributions": [
"bug"
]
+ },
+ {
+ "login": "uBadRequest",
+ "name": "Bad Requests",
+ "avatar_url": "https://avatars.githubusercontent.com/u/47282747?v=4",
+ "profile": "https://github.com/uBadRequest",
+ "contributions": [
+ "bug"
+ ]
}
],
"contributorsPerLine": 7,
diff --git a/README.md b/README.md
index 36ce8b3..b4aa137 100644
--- a/README.md
+++ b/README.md
@@ -214,6 +214,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
 Ayoub Elaich 🐛 |
 Henry 🐛 |
 SleepiPanda 🐛 |
+  Bad Requests 🐛 |
From 15bd50dc24b547e1c9ee6afac23e6586644e37b1 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Sun, 10 Oct 2021 19:20:44 +0000
Subject: [PATCH 76/91] docs: update README.md [skip ci]
---
README.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/README.md b/README.md
index b4aa137..223a449 100644
--- a/README.md
+++ b/README.md
@@ -215,6 +215,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
 Henry 🐛 |
 SleepiPanda 🐛 |
 Bad Requests 🐛 |
+  Dominik Nakamura 🚇 |
From 2132ceadd582f5295569c07f5616d961ba6a296b Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
<46447321+allcontributors[bot]@users.noreply.github.com>
Date: Sun, 10 Oct 2021 19:20:45 +0000
Subject: [PATCH 77/91] docs: update .all-contributorsrc [skip ci]
---
.all-contributorsrc | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/.all-contributorsrc b/.all-contributorsrc
index 9429e14..ab91851 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -227,7 +227,7 @@
"contributions": [
"bug"
]
- },
+ },
{
"login": "HenryHoggard",
"name": "Henry",
@@ -254,6 +254,15 @@
"contributions": [
"bug"
]
+ },
+ {
+ "login": "dnaka91",
+ "name": "Dominik Nakamura",
+ "avatar_url": "https://avatars.githubusercontent.com/u/36804488?v=4",
+ "profile": "https://home.dnaka91.rocks",
+ "contributions": [
+ "infra"
+ ]
}
],
"contributorsPerLine": 7,
From 4eebacb0779042e040fc356881ed47b1a8b903f1 Mon Sep 17 00:00:00 2001
From: Ikko Ashimine
Date: Tue, 12 Oct 2021 02:53:29 +0900
Subject: [PATCH 78/91] fix typo in parser.rs
initalize -> initialize
---
src/parser.rs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/parser.rs b/src/parser.rs
index d241a73..d260dce 100644
--- a/src/parser.rs
+++ b/src/parser.rs
@@ -458,7 +458,7 @@ mod tests {
use super::*;
#[test]
- /// initalize parser, expect a clap::App returned
+ /// initialize parser, expect a clap::App returned
fn parser_initialize_gives_defaults() {
let app = initialize();
assert_eq!(app.get_name(), "feroxbuster");
From 87aaa84f1ef7817582670eac8f53fef84149a7dd Mon Sep 17 00:00:00 2001
From: epi
Date: Tue, 12 Oct 2021 18:21:05 -0500
Subject: [PATCH 79/91] added user-agent logic
---
src/event_handlers/outputs.rs | 1 +
src/extractor/container.rs | 1 +
src/utils.rs | 26 ++++++++++++++++++++++++--
3 files changed, 26 insertions(+), 2 deletions(-)
diff --git a/src/event_handlers/outputs.rs b/src/event_handlers/outputs.rs
index d94cb90..7d70b7e 100644
--- a/src/event_handlers/outputs.rs
+++ b/src/event_handlers/outputs.rs
@@ -215,6 +215,7 @@ impl TermOutHandler {
self.config.replay_client.as_ref().unwrap(),
resp.url(),
self.config.output_level,
+ &self.config,
tx_stats.clone(),
)
.await
diff --git a/src/extractor/container.rs b/src/extractor/container.rs
index d86ab60..4e84ea4 100644
--- a/src/extractor/container.rs
+++ b/src/extractor/container.rs
@@ -402,6 +402,7 @@ impl<'a> Extractor<'a> {
&client,
&url,
self.handles.config.output_level,
+ &self.handles.config,
self.handles.stats.tx.clone(),
)
.await?;
diff --git a/src/utils.rs b/src/utils.rs
index a58662a..85ee145 100644
--- a/src/utils.rs
+++ b/src/utils.rs
@@ -5,7 +5,9 @@ use reqwest::{Client, Response, StatusCode, Url};
#[cfg(not(target_os = "windows"))]
use rlimit::{getrlimit, setrlimit, Resource};
use std::{
+ thread_local,
fs,
+ cell::RefCell,
io::{self, BufWriter, Write},
sync::Arc,
time::Duration,
@@ -21,9 +23,17 @@ use crate::{
},
progress::PROGRESS_PRINTER,
send_command,
+ USER_AGENTS,
statistics::StatError::{Connection, Other, Redirection, Request, Timeout},
traits::FeroxSerialize,
};
+use crate::config::Configuration;
+
+thread_local! {
+ /// simple counter for grabbing 'random' user agents
+ static USER_AGENT_CTR: RefCell = RefCell::new(0);
+}
+
/// Given the path to a file, open the file in append mode (create it if it doesn't exist) and
/// return a reference to the buffered file
@@ -94,7 +104,7 @@ pub async fn logged_request(url: &Url, handles: Arc) -> Result,
) -> Result {
log::trace!(
@@ -130,7 +141,18 @@ pub async fn make_request(
tx_stats
);
- match client.get(url.to_owned()).send().await {
+ let mut request = client.get(url.to_owned());
+
+ if config.random_agent {
+ let user_agent = USER_AGENT_CTR.with(|ua_ctr| {
+ let mut inner = ua_ctr.borrow_mut();
+ *inner += 1;
+ USER_AGENTS[*inner % USER_AGENTS.len()]
+ });
+ request = request.header("User-Agent", user_agent);
+ }
+
+ match request.send().await {
Err(e) => {
log::trace!("exit: make_request -> {}", e);
From 39b2da9735be646cfe5b31e93cb1fcc6398842f6 Mon Sep 17 00:00:00 2001
From: epi
Date: Tue, 12 Oct 2021 20:22:01 -0500
Subject: [PATCH 80/91] changed counter type
---
src/utils.rs | 21 ++++++++++-----------
1 file changed, 10 insertions(+), 11 deletions(-)
diff --git a/src/utils.rs b/src/utils.rs
index 85ee145..2adf12f 100644
--- a/src/utils.rs
+++ b/src/utils.rs
@@ -5,9 +5,7 @@ use reqwest::{Client, Response, StatusCode, Url};
#[cfg(not(target_os = "windows"))]
use rlimit::{getrlimit, setrlimit, Resource};
use std::{
- thread_local,
fs,
- cell::RefCell,
io::{self, BufWriter, Write},
sync::Arc,
time::Duration,
@@ -29,10 +27,9 @@ use crate::{
};
use crate::config::Configuration;
-thread_local! {
- /// simple counter for grabbing 'random' user agents
- static USER_AGENT_CTR: RefCell = RefCell::new(0);
-}
+/// simple counter for grabbing 'random' user agents
+static mut USER_AGENT_CTR: usize = 0;
+
/// Given the path to a file, open the file in append mode (create it if it doesn't exist) and
@@ -144,11 +141,13 @@ pub async fn make_request(
let mut request = client.get(url.to_owned());
if config.random_agent {
- let user_agent = USER_AGENT_CTR.with(|ua_ctr| {
- let mut inner = ua_ctr.borrow_mut();
- *inner += 1;
- USER_AGENTS[*inner % USER_AGENTS.len()]
- });
+ let index = unsafe {
+ USER_AGENT_CTR += 1;
+ USER_AGENT_CTR % USER_AGENTS.len()
+ };
+
+ let user_agent = USER_AGENTS[index];
+
request = request.header("User-Agent", user_agent);
}
From 2a4a150598d4dd5f46821886c216b7c7edf37423 Mon Sep 17 00:00:00 2001
From: epi
Date: Tue, 12 Oct 2021 20:24:05 -0500
Subject: [PATCH 81/91] changed counter type
---
src/utils.rs | 6 ++----
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/src/utils.rs b/src/utils.rs
index 2adf12f..6ab38e9 100644
--- a/src/utils.rs
+++ b/src/utils.rs
@@ -13,6 +13,7 @@ use std::{
};
use tokio::sync::mpsc::UnboundedSender;
+use crate::config::Configuration;
use crate::{
config::OutputLevel,
event_handlers::{
@@ -21,17 +22,14 @@ use crate::{
},
progress::PROGRESS_PRINTER,
send_command,
- USER_AGENTS,
statistics::StatError::{Connection, Other, Redirection, Request, Timeout},
traits::FeroxSerialize,
+ USER_AGENTS,
};
-use crate::config::Configuration;
/// simple counter for grabbing 'random' user agents
static mut USER_AGENT_CTR: usize = 0;
-
-
/// Given the path to a file, open the file in append mode (create it if it doesn't exist) and
/// return a reference to the buffered file
pub fn open_file(filename: &str) -> Result> {
From 3f3b24b26f31cef37ee8b0084d6a933be5729ae7 Mon Sep 17 00:00:00 2001
From: epi
Date: Wed, 13 Oct 2021 06:38:26 -0500
Subject: [PATCH 82/91] reverted add-slash change in heuristics
---
src/heuristics.rs | 9 +--------
1 file changed, 1 insertion(+), 8 deletions(-)
diff --git a/src/heuristics.rs b/src/heuristics.rs
index ec7b5c0..a0db61a 100644
--- a/src/heuristics.rs
+++ b/src/heuristics.rs
@@ -157,14 +157,7 @@ impl HeuristicTests {
let unique_str = self.unique_string(length);
- // To take care of slash when needed
- let slash = if self.handles.config.add_slash {
- Some("/")
- } else {
- None
- };
-
- let nonexistent_url = target.format(&unique_str, slash)?;
+ let nonexistent_url = target.format(&unique_str, None)?;
let response = logged_request(&nonexistent_url.to_owned(), self.handles.clone()).await?;
From 521d341e3633c74b57e7e510136ce14be445c423 Mon Sep 17 00:00:00 2001
From: Daniel Saxton
Date: Wed, 13 Oct 2021 16:03:32 -0500
Subject: [PATCH 83/91] Remove unused and update make_request call
---
Cargo.lock | 1 -
Cargo.toml | 1 -
src/extractor/tests.rs | 15 +++++++++++----
src/main.rs | 3 ---
4 files changed, 11 insertions(+), 9 deletions(-)
diff --git a/Cargo.lock b/Cargo.lock
index dc46f48..596dc0c 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -615,7 +615,6 @@ dependencies = [
"log",
"openssl",
"predicates",
- "rand",
"regex",
"reqwest",
"rlimit",
diff --git a/Cargo.toml b/Cargo.toml
index 22ccb07..0eddae1 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -20,7 +20,6 @@ clap = "2.33"
regex = "1"
lazy_static = "1.4"
dirs = "4.0"
-rand = "0.8"
[dependencies]
futures = { version = "0.3"}
diff --git a/src/extractor/tests.rs b/src/extractor/tests.rs
index 477eb01..94b4d2f 100644
--- a/src/extractor/tests.rs
+++ b/src/extractor/tests.rs
@@ -211,16 +211,23 @@ async fn extractor_get_links_with_absolute_url_that_differs_from_target_domain()
let mock = srv.mock(|when, then| {
when.method(GET).path("/some-path");
then.status(200).body(
- "\"http://defintely.not.a.thing.probably.com/homepage/assets/img/icons/handshake.svg\"",
+ "\"http://definitely.not.a.thing.probably.com/homepage/assets/img/icons/handshake.svg\"",
);
});
let client = Client::new();
let url = Url::parse(&srv.url("/some-path")).unwrap();
+ let config = Configuration::new().unwrap();
- let response = make_request(&client, &url, OutputLevel::Default, tx_stats.clone())
- .await
- .unwrap();
+ let response = make_request(
+ &client,
+ &url,
+ OutputLevel::Default,
+ &config,
+ tx_stats.clone(),
+ )
+ .await
+ .unwrap();
let (handles, _rx) = Handles::for_testing(None, None);
let handles = Arc::new(handles);
diff --git a/src/main.rs b/src/main.rs
index 56fa8a1..3fb96ea 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -29,7 +29,6 @@ use feroxbuster::{
scan_manager::{self},
scanner,
utils::{fmt_err, slugify_filename},
- USER_AGENTS,
};
#[cfg(not(target_os = "windows"))]
use feroxbuster::{utils::set_open_file_limit, DEFAULT_OPEN_FILE_LIMIT};
@@ -176,8 +175,6 @@ async fn wrapped_main(config: Arc) -> Result<()> {
PROGRESS_BAR.join().unwrap();
});
- PROGRESS_PRINTER.println(USER_AGENTS[0]);
-
// spawn all event handlers, expect back a JoinHandle and a *Handle to the specific event
let (stats_task, stats_handle) = StatsHandler::initialize(config.clone());
let (filters_task, filters_handle) = FiltersHandler::initialize();
From 7b3201f2f8826cce19d74f071dad18901b90c70d Mon Sep 17 00:00:00 2001
From: Daniel Saxton
Date: Wed, 13 Oct 2021 16:14:42 -0500
Subject: [PATCH 84/91] Fix test
---
ferox-stdin-1634159598.state | 1 +
src/scan_manager/tests.rs | 2 +-
2 files changed, 2 insertions(+), 1 deletion(-)
create mode 100644 ferox-stdin-1634159598.state
diff --git a/ferox-stdin-1634159598.state b/ferox-stdin-1634159598.state
new file mode 100644
index 0000000..b4e824a
--- /dev/null
+++ b/ferox-stdin-1634159598.state
@@ -0,0 +1 @@
+{"scans":[{"id":"812b1971bcde441f8b5b7c21c72e7067","url":"http://127.0.0.1:46075/","scan_type":"Directory","status":"Running","num_requests":102774},{"id":"c2e3579de1cb4f67bae2c959ea3dfc61","url":"http://127.0.0.1:32907/","scan_type":"Directory","status":"Running","num_requests":102774}],"config":{"type":"configuration","wordlist":"/tmp/.tmpusrADA/wordlist","config":"/home/dsaxton/.config/feroxbuster/ferox-config.toml","proxy":"","replay_proxy":"","target_url":"","status_codes":[200,204,301,302,307,308,401,403,405,500],"replay_codes":[200,204,301,302,307,308,401,403,405,500],"filter_status":[],"threads":50,"timeout":7,"verbosity":0,"silent":false,"quiet":false,"auto_bail":false,"auto_tune":false,"json":false,"output":"","debug_log":"","user_agent":"feroxbuster/2.4.0","random_agent":false,"redirects":false,"insecure":false,"extensions":[],"headers":{},"queries":[],"no_recursion":false,"extract_links":false,"add_slash":false,"stdin":true,"depth":4,"scan_limit":0,"parallel":0,"rate_limit":0,"filter_size":[],"filter_line_count":[],"filter_word_count":[],"filter_regex":[],"dont_filter":false,"resumed":false,"resume_from":"","save_state":true,"time_limit":"5s","filter_similar":[],"url_denylist":[]},"responses":[],"statistics":{"type":"statistics","timeouts":0,"requests":7249,"expected_per_scan":102774,"total_expected":205548,"errors":0,"successes":0,"redirects":0,"client_errors":7249,"server_errors":0,"total_scans":2,"initial_targets":0,"links_extracted":0,"status_200s":0,"status_301s":0,"status_302s":0,"status_401s":0,"status_403s":1,"status_429s":0,"status_500s":0,"status_503s":0,"status_504s":0,"status_508s":0,"wildcards_filtered":0,"responses_filtered":0,"resources_discovered":0,"url_format_errors":0,"redirection_errors":0,"connection_errors":0,"request_errors":0,"directory_scan_times":[],"total_runtime":[0.0]}}
\ No newline at end of file
diff --git a/src/scan_manager/tests.rs b/src/scan_manager/tests.rs
index 40bfd8e..bbdab7b 100644
--- a/src/scan_manager/tests.rs
+++ b/src/scan_manager/tests.rs
@@ -379,7 +379,7 @@ fn feroxstates_feroxserialize_implementation() {
let json_state = ferox_state.as_json().unwrap();
let expected = format!(
- r#"{{"scans":[{{"id":"{}","url":"https://spiritanimal.com","scan_type":"Directory","status":"NotStarted","num_requests":0}}],"config":{{"type":"configuration","wordlist":"/usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt","config":"","proxy":"","replay_proxy":"","target_url":"","status_codes":[200,204,301,302,307,308,401,403,405,500],"replay_codes":[200,204,301,302,307,308,401,403,405,500],"filter_status":[],"threads":50,"timeout":7,"verbosity":0,"silent":false,"quiet":false,"auto_bail":false,"auto_tune":false,"json":false,"output":"","debug_log":"","user_agent":"feroxbuster/{}","redirects":false,"insecure":false,"extensions":[],"headers":{{}},"queries":[],"no_recursion":false,"extract_links":false,"add_slash":false,"stdin":false,"depth":4,"scan_limit":0,"parallel":0,"rate_limit":0,"filter_size":[],"filter_line_count":[],"filter_word_count":[],"filter_regex":[],"dont_filter":false,"resumed":false,"resume_from":"","save_state":false,"time_limit":"","filter_similar":[],"url_denylist":[]}},"responses":[{{"type":"response","url":"https://nerdcore.com/css","path":"/css","wildcard":true,"status":301,"content_length":173,"line_count":10,"word_count":16,"headers":{{"server":"nginx/1.16.1"}}}}]"#,
+ r#"{{"scans":[{{"id":"{}","url":"https://spiritanimal.com","scan_type":"Directory","status":"NotStarted","num_requests":0}}],"config":{{"type":"configuration","wordlist":"/usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt","config":"","proxy":"","replay_proxy":"","target_url":"","status_codes":[200,204,301,302,307,308,401,403,405,500],"replay_codes":[200,204,301,302,307,308,401,403,405,500],"filter_status":[],"threads":50,"timeout":7,"verbosity":0,"silent":false,"quiet":false,"auto_bail":false,"auto_tune":false,"json":false,"output":"","debug_log":"","user_agent":"feroxbuster/{}","random_agent":false,"redirects":false,"insecure":false,"extensions":[],"headers":{{}},"queries":[],"no_recursion":false,"extract_links":false,"add_slash":false,"stdin":false,"depth":4,"scan_limit":0,"parallel":0,"rate_limit":0,"filter_size":[],"filter_line_count":[],"filter_word_count":[],"filter_regex":[],"dont_filter":false,"resumed":false,"resume_from":"","save_state":false,"time_limit":"","filter_similar":[],"url_denylist":[]}},"responses":[{{"type":"response","url":"https://nerdcore.com/css","path":"/css","wildcard":true,"status":301,"content_length":173,"line_count":10,"word_count":16,"headers":{{"server":"nginx/1.16.1"}}}}]"#,
saved_id, VERSION
);
println!("{}\n{}", expected, json_state);
From 0a3130934c4cf2035e3bd71940525ac7ad170b53 Mon Sep 17 00:00:00 2001
From: Daniel Saxton
Date: Wed, 13 Oct 2021 16:30:20 -0500
Subject: [PATCH 85/91] Ignore
---
.gitignore | 1 +
ferox-stdin-1634159598.state | 1 -
2 files changed, 1 insertion(+), 1 deletion(-)
delete mode 100644 ferox-stdin-1634159598.state
diff --git a/.gitignore b/.gitignore
index a6b9e1e..31567f9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -24,6 +24,7 @@ lcov_cobertura.py
# state file created during tests
ferox-http*
+ferox-stdin*
# python stuff cuz reasons
Pipfile*
diff --git a/ferox-stdin-1634159598.state b/ferox-stdin-1634159598.state
deleted file mode 100644
index b4e824a..0000000
--- a/ferox-stdin-1634159598.state
+++ /dev/null
@@ -1 +0,0 @@
-{"scans":[{"id":"812b1971bcde441f8b5b7c21c72e7067","url":"http://127.0.0.1:46075/","scan_type":"Directory","status":"Running","num_requests":102774},{"id":"c2e3579de1cb4f67bae2c959ea3dfc61","url":"http://127.0.0.1:32907/","scan_type":"Directory","status":"Running","num_requests":102774}],"config":{"type":"configuration","wordlist":"/tmp/.tmpusrADA/wordlist","config":"/home/dsaxton/.config/feroxbuster/ferox-config.toml","proxy":"","replay_proxy":"","target_url":"","status_codes":[200,204,301,302,307,308,401,403,405,500],"replay_codes":[200,204,301,302,307,308,401,403,405,500],"filter_status":[],"threads":50,"timeout":7,"verbosity":0,"silent":false,"quiet":false,"auto_bail":false,"auto_tune":false,"json":false,"output":"","debug_log":"","user_agent":"feroxbuster/2.4.0","random_agent":false,"redirects":false,"insecure":false,"extensions":[],"headers":{},"queries":[],"no_recursion":false,"extract_links":false,"add_slash":false,"stdin":true,"depth":4,"scan_limit":0,"parallel":0,"rate_limit":0,"filter_size":[],"filter_line_count":[],"filter_word_count":[],"filter_regex":[],"dont_filter":false,"resumed":false,"resume_from":"","save_state":true,"time_limit":"5s","filter_similar":[],"url_denylist":[]},"responses":[],"statistics":{"type":"statistics","timeouts":0,"requests":7249,"expected_per_scan":102774,"total_expected":205548,"errors":0,"successes":0,"redirects":0,"client_errors":7249,"server_errors":0,"total_scans":2,"initial_targets":0,"links_extracted":0,"status_200s":0,"status_301s":0,"status_302s":0,"status_401s":0,"status_403s":1,"status_429s":0,"status_500s":0,"status_503s":0,"status_504s":0,"status_508s":0,"wildcards_filtered":0,"responses_filtered":0,"resources_discovered":0,"url_format_errors":0,"redirection_errors":0,"connection_errors":0,"request_errors":0,"directory_scan_times":[],"total_runtime":[0.0]}}
\ No newline at end of file
From b8bfbb09f3ba5ec3913214c52c585e5d6f0f24e2 Mon Sep 17 00:00:00 2001
From: Daniel Saxton
Date: Wed, 13 Oct 2021 16:32:39 -0500
Subject: [PATCH 86/91] Oops
---
.gitignore | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/.gitignore b/.gitignore
index 31567f9..cfcc7f9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -23,8 +23,7 @@ lcov_cobertura.py
.dockerignore
# state file created during tests
-ferox-http*
-ferox-stdin*
+ferox-*.state
# python stuff cuz reasons
Pipfile*
From 19cd5c910a1acc446b7d7fa5bf65690ea3da3e0c Mon Sep 17 00:00:00 2001
From: Daniel Saxton
Date: Wed, 13 Oct 2021 20:08:28 -0500
Subject: [PATCH 87/91] Try a test refactor
---
src/scan_manager/tests.rs | 79 ++++++++++++++++++++++++++++++++++++---
1 file changed, 73 insertions(+), 6 deletions(-)
diff --git a/src/scan_manager/tests.rs b/src/scan_manager/tests.rs
index bbdab7b..93fa9c0 100644
--- a/src/scan_manager/tests.rs
+++ b/src/scan_manager/tests.rs
@@ -378,12 +378,79 @@ fn feroxstates_feroxserialize_implementation() {
assert!(expected_strs.eval(&ferox_state.as_str()));
let json_state = ferox_state.as_json().unwrap();
- let expected = format!(
- r#"{{"scans":[{{"id":"{}","url":"https://spiritanimal.com","scan_type":"Directory","status":"NotStarted","num_requests":0}}],"config":{{"type":"configuration","wordlist":"/usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt","config":"","proxy":"","replay_proxy":"","target_url":"","status_codes":[200,204,301,302,307,308,401,403,405,500],"replay_codes":[200,204,301,302,307,308,401,403,405,500],"filter_status":[],"threads":50,"timeout":7,"verbosity":0,"silent":false,"quiet":false,"auto_bail":false,"auto_tune":false,"json":false,"output":"","debug_log":"","user_agent":"feroxbuster/{}","random_agent":false,"redirects":false,"insecure":false,"extensions":[],"headers":{{}},"queries":[],"no_recursion":false,"extract_links":false,"add_slash":false,"stdin":false,"depth":4,"scan_limit":0,"parallel":0,"rate_limit":0,"filter_size":[],"filter_line_count":[],"filter_word_count":[],"filter_regex":[],"dont_filter":false,"resumed":false,"resume_from":"","save_state":false,"time_limit":"","filter_similar":[],"url_denylist":[]}},"responses":[{{"type":"response","url":"https://nerdcore.com/css","path":"/css","wildcard":true,"status":301,"content_length":173,"line_count":10,"word_count":16,"headers":{{"server":"nginx/1.16.1"}}}}]"#,
- saved_id, VERSION
- );
- println!("{}\n{}", expected, json_state);
- assert!(predicates::str::contains(expected).eval(&json_state));
+ for expected in [
+ r#""scans""#,
+ &format!(r#""id":"{}""#, saved_id),
+ r#""url":"https://spiritanimal.com""#,
+ r#""scan_type":"Directory""#,
+ r#""status":"NotStarted""#,
+ r#""num_requests":0"#,
+ r#""config""#,
+ r#""type":"configuration""#,
+ r#""wordlist":"/usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt""#,
+ r#""config""#,
+ r#""proxy":"""#,
+ r#""replay_proxy":"""#,
+ r#""target_url":"""#,
+ r#""status_codes":[200,204,301,302,307,308,401,403,405,500]"#,
+ r#""replay_codes":[200,204,301,302,307,308,401,403,405,500]"#,
+ r#""filter_status":[]"#,
+ r#""threads":50"#,
+ r#""timeout":7"#,
+ r#""verbosity":0"#,
+ r#""silent":false"#,
+ r#""quiet":false"#,
+ r#""auto_bail":false"#,
+ r#""auto_tune":false"#,
+ r#""json":false"#,
+ r#""output":"""#,
+ r#""debug_log":"""#,
+ &format!(r#""user_agent":"feroxbuster/{}""#, VERSION),
+ r#""random_agent":false"#,
+ r#""redirects":false"#,
+ r#""insecure":false"#,
+ r#""extensions":[]"#,
+ r#""headers""#,
+ r#""queries":[]"#,
+ r#""no_recursion":false"#,
+ r#""extract_links":false"#,
+ r#""add_slash":false"#,
+ r#""stdin":false"#,
+ r#""depth":4"#,
+ r#""scan_limit":0"#,
+ r#""parallel":0"#,
+ r#""rate_limit":0"#,
+ r#""filter_size":[]"#,
+ r#""filter_line_count":[]"#,
+ r#""filter_word_count":[]"#,
+ r#""filter_regex":[]"#,
+ r#""dont_filter":false"#,
+ r#""resumed":false"#,
+ r#""resume_from":"""#,
+ r#""save_state":false"#,
+ r#""time_limit":"""#,
+ r#""filter_similar":[]"#,
+ r#""url_denylist":["#,
+ r#""responses""#,
+ r#""type":"response""#,
+ r#""url":"https://nerdcore.com/css""#,
+ r#""path":"/css""#,
+ r#""wildcard":true"#,
+ r#""status":301"#,
+ r#""content_length":173"#,
+ r#""line_count":10"#,
+ r#""word_count":16"#,
+ r#""headers""#,
+ r#""server":"nginx/1.16.1"#,
+ ]
+ .iter()
+ {
+ assert!(
+ predicates::str::contains(*expected).eval(&json_state),
+ "{}",
+ expected
+ )
+ }
}
#[should_panic]
From 3536587260358d6cabf8f1a68edaaa283434f321 Mon Sep 17 00:00:00 2001
From: Daniel Saxton
Date: Wed, 13 Oct 2021 20:11:02 -0500
Subject: [PATCH 88/91] Update banner
---
src/banner/container.rs | 2 +-
tests/test_banner.rs | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/banner/container.rs b/src/banner/container.rs
index 92d35cf..9d8ec12 100644
--- a/src/banner/container.rs
+++ b/src/banner/container.rs
@@ -279,7 +279,7 @@ impl Banner {
let wordlist = BannerEntry::new("📖", "Wordlist", &config.wordlist);
let timeout = BannerEntry::new("💥", "Timeout (secs)", &config.timeout.to_string());
let user_agent = BannerEntry::new("🦡", "User-Agent", &config.user_agent);
- let random_agent = BannerEntry::new("🦡", "User-Agent", "(Random)");
+ let random_agent = BannerEntry::new("🦡", "User-Agent", "Random");
let extract_links =
BannerEntry::new("🔎", "Extract Links", &config.extract_links.to_string());
let json = BannerEntry::new("🧔", "JSON Output", &config.json.to_string());
diff --git a/tests/test_banner.rs b/tests/test_banner.rs
index 1f4b373..bcfbc56 100644
--- a/tests/test_banner.rs
+++ b/tests/test_banner.rs
@@ -163,7 +163,7 @@ fn banner_prints_random_agent() {
.and(predicate::str::contains("Status Codes"))
.and(predicate::str::contains("Timeout (secs)"))
.and(predicate::str::contains("User-Agent"))
- .and(predicate::str::contains("(Random)"))
+ .and(predicate::str::contains("Random"))
.and(predicate::str::contains("─┴─")),
);
}
From 1e3cd3a2091917565a77fe3b114ed575b9aba9df Mon Sep 17 00:00:00 2001
From: Daniel Saxton
Date: Wed, 13 Oct 2021 20:12:43 -0500
Subject: [PATCH 89/91] Doc
---
src/lib.rs | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/lib.rs b/src/lib.rs
index 7d21910..fc8ead6 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -91,6 +91,7 @@ pub const DEFAULT_STATUS_CODES: [StatusCode; 10] = [
///
/// Expected location is in the same directory as the feroxbuster binary.
pub const DEFAULT_CONFIG_NAME: &str = "ferox-config.toml";
+/// User agents to select from when random agent is being used
pub const USER_AGENTS: [&str; 12] = [
"Mozilla/5.0 (Linux; Android 8.0.0; SM-G960F Build/R16NW) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.84 Mobile Safari/537.36",
"Mozilla/5.0 (iPhone; CPU iPhone OS 12_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0 Mobile/15E148 Safari/604.1",
From 9c50038a25245236792e71375f65dc14b20977f9 Mon Sep 17 00:00:00 2001
From: Daniel Saxton
Date: Thu, 14 Oct 2021 15:15:32 -0500
Subject: [PATCH 90/91] Nit
---
src/scan_manager/tests.rs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/scan_manager/tests.rs b/src/scan_manager/tests.rs
index 93fa9c0..613e94e 100644
--- a/src/scan_manager/tests.rs
+++ b/src/scan_manager/tests.rs
@@ -430,7 +430,7 @@ fn feroxstates_feroxserialize_implementation() {
r#""save_state":false"#,
r#""time_limit":"""#,
r#""filter_similar":[]"#,
- r#""url_denylist":["#,
+ r#""url_denylist":[]"#,
r#""responses""#,
r#""type":"response""#,
r#""url":"https://nerdcore.com/css""#,
From 8116018b8b13023e464a8f39f9965e46a39417f8 Mon Sep 17 00:00:00 2001
From: epi
Date: Fri, 15 Oct 2021 16:16:13 -0500
Subject: [PATCH 91/91] reverted the revert
---
src/heuristics.rs | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/src/heuristics.rs b/src/heuristics.rs
index a0db61a..ec7b5c0 100644
--- a/src/heuristics.rs
+++ b/src/heuristics.rs
@@ -157,7 +157,14 @@ impl HeuristicTests {
let unique_str = self.unique_string(length);
- let nonexistent_url = target.format(&unique_str, None)?;
+ // To take care of slash when needed
+ let slash = if self.handles.config.add_slash {
+ Some("/")
+ } else {
+ None
+ };
+
+ let nonexistent_url = target.format(&unique_str, slash)?;
let response = logged_request(&nonexistent_url.to_owned(), self.handles.clone()).await?;