Open wilco375 opened 4 months ago
hey there, thanks for submitting this!
What you're seeing is expected behavior (see logic below). forced recursion should be able to get the results you're after (the recursion logic is laid out in plain language on that page as well)
pub fn is_directory(&self) -> bool {
if self.status().is_redirection() {
...
} else if self.status().is_success() || matches!(self.status(), &StatusCode::FORBIDDEN) {
// status code is 2xx or 403, need to check if it ends in /
if self.url().as_str().ends_with('/') {
log::debug!("{} is directory suitable for recursion", self.url());
return true;
}
}
Hi @epi052, thanks for your response. As you can see from the command provided above, I am already using --force-recursion
. Is there anything else I should add?
Ooooh, missed that, my bad. Lemme take a look, iirc that should be recursing then.
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.
i started looking into this, but haven't arrived at a suitable solution yet. pinning for now
Describe the bug When Feroxbuster discovers a link with no trailing slash, it is not further enumerated.
To Reproduce
index.py
:app = Flask(name)
@app.route('/', methods=['GET']) def index(): return '
@app.route('/test', methods=['GET']) def test(): return 'Hello world', 200
@app.route('/test/a', methods=['GET']) def a(): return 'Hello world', 200
@app.route('/test/image.png', methods=['GET']) def image(): return base64.decodebytes(b'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg=='), 200
| | |) |) | / ` / \ _/ | | \ | | | | \ | \ | \, _/ / \ | |_/ | by Ben "epi" Risher π€ ver: 2.10.1 ββββββββββββββββββββββββββββ¬ββββββββββββββββββββββ π― Target Url β http://localhost:5000 π Threads β 50 π Wordlist β /dev/stdin π Status Codes β All Status Codes! π₯ Timeout (secs) β 7 𦑠User-Agent β feroxbuster/2.10.1 π Extract Links β true π HTTP methods β [GET] π Recursion Depth β 4 π€ Force Recursion β true ββββββββββββββββββββββββββββ΄ββββββββββββββββββββββ π Press [ENTER] to use the Scan Management Menuβ’ ββββββββββββββββββββββββββββββββββββββββββββββββββ DBG 0.198 feroxbuster sending ["http://localhost:5000"] to be scanned as initial targets INF 0.198 feroxbuster::event_handlers::scans scan handler received http://localhost:5000 - beginning scan INF 0.198 feroxbuster::scanner::ferox_scanner Starting scan against: http://localhost:5000 404 GET 4l 34w 232c Auto-filtering found 404-like response and created new filter; toggle off with --dont-filter DBG 0.238 feroxbuster::filters::wildcard filtered out http://localhost:5000/a DBG 0.238 feroxbuster::filters::container filtering response due to: WildcardFilter { content_length: Some(232), line_count: Some(4), word_count: Some(34), method: "GET", status_code: 404, dont_filter: false } INF 0.239 feroxbuster::event_handlers::scans Added new directory to recursive scan: http://localhost:5000/ DBG 0.240 feroxbuster::extractor::container Parsed link "/test/image.png" from http://localhost:5000/ DBG 0.241 feroxbuster::filters::wildcard filtered out http://localhost:5000/test/ DBG 0.241 feroxbuster::filters::container filtering response due to: WildcardFilter { content_length: Some(232), line_count: Some(4), word_count: Some(34), method: "GET", status_code: 404, dont_filter: false } DBG 0.242 feroxbuster::extractor::container Extracted File: FeroxResponse { url: http://localhost:5000/test/image.png, method: GET, status: 200 OK, content-length: 86 } 200 GET 3l 5w 86c http://localhost:5000/test/image.png 200 GET 1l 2w 54c http://localhost:5000/ INF 0.949 feroxbuster All scans complete!