Ein fortschrittlicher Webpfad-Bruteforcer
dirsearch wird aktiv von @maurosoria und @shelld3v weiterentwickelt
Besuchen Sie unseren Discord-Server, um optimal mit dem Team zu kommunizieren
Voraussetzung: Python 3.9 oder höher
Wählen Sie eine dieser Installationsoptionen:
git clone https://github.com/maurosoria/dirsearch.git --depth 1
( EMPFOHLEN )docker build -t "dirsearch:v0.4.3" .
(Weitere Informationen finden Sie hier)pip3 install dirsearch
oder pip install dirsearch
sudo apt-get install dirsearch
(veraltet) Zusammenfassung:
%EXT%
durch Erweiterungen aus dem Flag -e .%EXT%
(wie SecLists), -f | Der Schalter --force-extensions ist erforderlich, um Erweiterungen an jedes Wort in der Wortliste sowie an /
anzuhängen.wordlist1.txt,wordlist2.txt
.Beispiele:
index.%EXT%
Durch die Übergabe von asp und aspx als Erweiterungen wird das folgende Wörterbuch generiert:
index
index.asp
index.aspx
admin
Durch die Übergabe von PHP und HTML als Erweiterungen mit dem Flag -f / --force-extensions wird das folgende Wörterbuch generiert:
admin
admin.php
admin.html
admin/
login.html
Durch die Übergabe von jsp und jspa als Erweiterungen mit dem Flag -O / --overwrite-extensions wird das folgende Wörterbuch generiert:
login.html
login.jsp
login.jspa
Usage: dirsearch.py [-u|--url] target [-e|--extensions] extensions [options]
Options:
--version show program's version number and exit
-h, --help show this help message and exit
Mandatory:
-u URL, --url=URL Target URL(s), can use multiple flags
-l PATH, --urls-file=PATH
URL list file
--stdin Read URL(s) from STDIN
--cidr=CIDR Target CIDR
--raw=PATH Load raw HTTP request from file (use '--scheme' flag
to set the scheme)
--nmap-report=PATH Load targets from nmap report (Ensure the inclusion of
the -sV flag during nmap scan for comprehensive
results)
-s SESSION_FILE, --session=SESSION_FILE
Session file
--config=PATH Path to configuration file (Default:
'DIRSEARCH_CONFIG' environment variable, otherwise
'config.ini')
Dictionary Settings:
-w WORDLISTS, --wordlists=WORDLISTS
Wordlist files or directories contain wordlists
(separated by commas)
-e EXTENSIONS, --extensions=EXTENSIONS
Extension list separated by commas (e.g. php,asp)
-f, --force-extensions
Add extensions to the end of every wordlist entry. By
default dirsearch only replaces the %EXT% keyword with
extensions
-O, --overwrite-extensions
Overwrite other extensions in the wordlist with your
extensions (selected via `-e`)
--exclude-extensions=EXTENSIONS
Exclude extension list separated by commas (e.g.
asp,jsp)
--remove-extensions
Remove extensions in all paths (e.g. admin.php ->
admin)
--prefixes=PREFIXES
Add custom prefixes to all wordlist entries (separated
by commas)
--suffixes=SUFFIXES
Add custom suffixes to all wordlist entries, ignore
directories (separated by commas)
-U, --uppercase Uppercase wordlist
-L, --lowercase Lowercase wordlist
-C, --capital Capital wordlist
General Settings:
-t THREADS, --threads=THREADS
Number of threads
--async Enable asynchronous mode
-r, --recursive Brute-force recursively
--deep-recursive Perform recursive scan on every directory depth (e.g.
api/users -> api/)
--force-recursive Do recursive brute-force for every found path, not
only directories
-R DEPTH, --max-recursion-depth=DEPTH
Maximum recursion depth
--recursion-status=CODES
Valid status codes to perform recursive scan, support
ranges (separated by commas)
--subdirs=SUBDIRS Scan sub-directories of the given URL[s] (separated by
commas)
--exclude-subdirs=SUBDIRS
Exclude the following subdirectories during recursive
scan (separated by commas)
-i CODES, --include-status=CODES
Include status codes, separated by commas, support
ranges (e.g. 200,300-399)
-x CODES, --exclude-status=CODES
Exclude status codes, separated by commas, support
ranges (e.g. 301,500-599)
--exclude-sizes=SIZES
Exclude responses by sizes, separated by commas (e.g.
0B,4KB)
--exclude-text=TEXTS
Exclude responses by text, can use multiple flags
--exclude-regex=REGEX
Exclude responses by regular expression
--exclude-redirect=STRING
Exclude responses if this regex (or text) matches
redirect URL (e.g. '/index.html')
--exclude-response=PATH
Exclude responses similar to response of this page,
path as input (e.g. 404.html)
--skip-on-status=CODES
Skip target whenever hit one of these status codes,
separated by commas, support ranges
--min-response-size=LENGTH
Minimum response length
--max-response-size=LENGTH
Maximum response length
--max-time=SECONDS Maximum runtime for the scan
--exit-on-error Exit whenever an error occurs
Request Settings:
-m METHOD, --http-method=METHOD
HTTP method (default: GET)
-d DATA, --data=DATA
HTTP request data
--data-file=PATH File contains HTTP request data
-H HEADERS, --header=HEADERS
HTTP request header, can use multiple flags
--headers-file=PATH
File contains HTTP request headers
-F, --follow-redirects
Follow HTTP redirects
--random-agent Choose a random User-Agent for each request
--auth=CREDENTIAL Authentication credential (e.g. user:password or
bearer token)
--auth-type=TYPE Authentication type (basic, digest, bearer, ntlm, jwt)
--cert-file=PATH File contains client-side certificate
--key-file=PATH File contains client-side certificate private key
(unencrypted)
--user-agent=USER_AGENT
--cookie=COOKIE
Connection Settings:
--timeout=TIMEOUT Connection timeout
--delay=DELAY Delay between requests
-p PROXY, --proxy=PROXY
Proxy URL (HTTP/SOCKS), can use multiple flags
--proxies-file=PATH
File contains proxy servers
--proxy-auth=CREDENTIAL
Proxy authentication credential
--replay-proxy=PROXY
Proxy to replay with found paths
--tor Use Tor network as proxy
--scheme=SCHEME Scheme for raw request or if there is no scheme in the
URL (Default: auto-detect)
--max-rate=RATE Max requests per second
--retries=RETRIES Number of retries for failed requests
--ip=IP Server IP address
--interface=NETWORK_INTERFACE
Network interface to use
Advanced Settings:
--crawl Crawl for new paths in responses
View Settings:
--full-url Full URLs in the output (enabled automatically in
quiet mode)
--redirects-history
Show redirects history
--no-color No colored output
-q, --quiet-mode Quiet mode
Output Settings:
-o PATH/URL, --output=PATH/URL
Output file or MySQL/PostgreSQL URL (Format:
scheme://[username:password@]host[:port]/database-
name)
--format=FORMAT Report format (Available: simple, plain, json, xml,
md, csv, html, sqlite, mysql, postgresql)
--log=PATH Log file
Standardmäßig wird config.ini
in Ihrem dirsearch-Verzeichnis als Konfigurationsdatei verwendet, Sie können jedoch über das Flag --config
oder die Umgebungsvariable DIRSEARCH_CONFIG
eine andere Datei auswählen.
# If you want to edit dirsearch default configurations, you can
# edit values in this file. Everything after `#` is a comment
# and won't be applied
[general]
threads = 25
async = False
recursive = False
deep-recursive = False
force-recursive = False
recursion-status = 200-399,401,403
max-recursion-depth = 0
exclude-subdirs = %%ff/,. ; /,..;/,;/,./,../,%%2e/,%%2e%%2e/
random-user-agents = False
max-time = 0
exit-on-error = False
# subdirs = /,api/
# include-status = 200-299,401
# exclude-status = 400,500-999
# exclude-sizes = 0b,123gb
# exclude-text = "Not found"
# exclude-regex = "^403$"
# exclude-redirect = "*/error.html"
# exclude-response = 404.html
# skip-on-status = 429,999
[dictionary]
default-extensions = php,aspx,jsp,html,js
force-extensions = False
overwrite-extensions = False
lowercase = False
uppercase = False
capitalization = False
# exclude-extensions = old,log
# prefixes = .,admin
# suffixes = ~,.bak
# wordlists = /path/to/wordlist1.txt,/path/to/wordlist2.txt
[request]
http-method = get
follow-redirects = False
# headers-file = /path/to/headers.txt
# user-agent = MyUserAgent
# cookie = SESSIONID=123
[connection]
timeout = 7.5
delay = 0
max-rate = 0
max-retries = 1
# # By disabling `scheme` variable, dirsearch will automatically identify the URI scheme
# scheme = http
# proxy = localhost:8080
# proxy-file = /path/to/proxies.txt
# replay-proxy = localhost:8000
[advanced]
crawl = False
[view]
full-url = False
quiet-mode = False
color = True
show-redirects-history = False
[output]
# # Support: plain, simple, json, xml, md, csv, html, sqlite
report-format = plain
autosave-report = True
autosave-report-folder = reports/
# log-file = /path/to/dirsearch.log
# log-file-size = 50000000
Einige Beispiele für die Verwendung von dirsearch – das sind die häufigsten Argumente. Wenn Sie alles benötigen, verwenden Sie einfach das Argument -h .
python3 dirsearch.py -u https://target
python3 dirsearch.py -e php,html,js -u https://target
python3 dirsearch.py -e php,html,js -u https://target -w /path/to/wordlist
Mit dirsearch können Sie den Scanvorgang mit STRG+C anhalten. Von hier aus können Sie den Fortschritt speichern (und später fortfahren), das aktuelle Ziel oder das aktuelle Unterverzeichnis überspringen.
admin/
findet, führt es Brute-Force-Angriffe admin/*
durch ( *
ist der Ort, an dem es Brute-Force-Angriffe durchführt). Um diese Funktion zu aktivieren, verwenden Sie das Flag -r (oder --recursive ). python3 dirsearch.py -e php,html,js -u https://target -r
python3 dirsearch.py -e php,html,js -u https://target -r --max-recursion-depth 3 --recursion-status 200-399
Es gibt zwei weitere Optionen: --force-recursive und --deep-recursive
/
endena/b/c
=> add a/
, a/b/
) Wenn es Unterverzeichnisse gibt, die Sie nicht rekursiv brutal erzwingen möchten, verwenden Sie --exclude-subdirs
python3 dirsearch.py -e php,html,js -u https://target -r --exclude-subdirs image/,media/,css/
Die Thread-Nummer ( -t | --threads ) spiegelt die Anzahl der getrennten Brute-Force-Prozesse wider. Je größer also die Thread-Nummer ist, desto schneller wird dirsearch ausgeführt. Standardmäßig beträgt die Anzahl der Threads 25, Sie können sie jedoch erhöhen, wenn Sie den Fortschritt beschleunigen möchten.
Trotzdem hängt die Geschwindigkeit immer noch stark von der Antwortzeit des Servers ab. Und als Warnung empfehlen wir Ihnen, die Anzahl der Threads nicht zu groß zu halten, da dies zu DoS (Denial of Service) führen kann.
python3 dirsearch.py -e php,htm,js,bak,zip,tgz,txt -u https://target -t 20
Sie können mit --async
in den asynchronen Modus wechseln und dirsearch die Verwendung von Coroutinen anstelle von Threads ermöglichen, um gleichzeitige Anforderungen zu verarbeiten.
Theoretisch bietet der asynchrone Modus eine bessere Leistung und eine geringere CPU-Auslastung, da kein Wechsel zwischen verschiedenen Thread-Kontexten erforderlich ist. Darüber hinaus wird durch Drücken von STRG+C der Fortschritt sofort angehalten, ohne dass auf das Anhalten der Threads gewartet werden muss.
python3 dirsearch.py -e php -u https://target --prefixes .,admin,_
Wortliste:
tools
Mit Präfixen generiert:
tools
.tools
admintools
_tools
python3 dirsearch.py -e php -u https://target --suffixes ~
Wortliste:
index.php
internal
Mit Suffixen generiert:
index.php
internal
index.php~
internal~
Im Ordner db/
befinden sich mehrere „Blacklist-Dateien“. Pfade in diesen Dateien werden aus dem Scanergebnis herausgefiltert, wenn sie denselben Status haben, wie im Dateinamen angegeben.
Beispiel: Wenn Sie admin.php
zu db/403_blacklist.txt
hinzufügen, wird jedes Mal, wenn Sie einen Scan durchführen, bei dem admin.php
403 zurückgibt, aus dem Ergebnis gefiltert.
Verwenden Sie -i | --include-status und -x | --exclude-status, um zulässige und nicht zulässige Antwortstatuscodes auszuwählen
Für erweiterte Filter: --exclude-sizes , --exclude-texts , --exclude-regexps , --exclude-redirects und --exclude-response
python3 dirsearch.py -e php,html,js -u https://target --exclude-sizes 1B,243KB
python3 dirsearch.py -e php,html,js -u https://target --exclude-texts "403 Forbidden"
python3 dirsearch.py -e php,html,js -u https://target --exclude-regexps "^Error$"
python3 dirsearch.py -e php,html,js -u https://target --exclude-redirects "https://(.*).okta.com/*"
python3 dirsearch.py -e php,html,js -u https://target --exclude-response /error.html
Mit dirsearch können Sie die Rohanfrage aus einer Datei importieren. Der Inhalt würde etwa so aussehen:
GET /admin HTTP/1.1
Host: admin.example.com
Cache-Control: max-age=0
Accept: */*
Da es für dirsearch keine Möglichkeit gibt, das URI-Schema zu kennen, müssen Sie es mit dem Flag --scheme
festlegen. Standardmäßig erkennt dirsearch das Schema automatisch.
Unterstützte Wortlistenformate: Großbuchstaben, Kleinbuchstaben, Großschreibung
admin
index.html
ADMIN
INDEX.HTML
Admin
Index.html
Verwenden Sie -X | --exclude-extensions mit einer Erweiterungsliste entfernt alle Pfade in der Wortliste, die die angegebenen Erweiterungen enthalten
python3 dirsearch.py -u https://target -X jsp
Wortliste:
admin.php
test.jsp
Nach:
admin.php
python3 dirsearch.py -e php,html,js -u https://target --subdirs /,admin/,folder/
dirsearch unterstützt SOCKS und HTTP-Proxy mit zwei Optionen: einem Proxyserver oder einer Liste von Proxyservern.
python3 dirsearch.py -e php,html,js -u https://target --proxy 127.0.0.1:8080
python3 dirsearch.py -e php,html,js -u https://target --proxy socks5://10.10.0.1:8080
python3 dirsearch.py -e php,html,js -u https://target --proxylist proxyservers.txt
Unterstützte Berichtsformate: einfach , einfach , JSON , XML , MD , CSV , HTML , SQLite , MySQL , Postgresql
python3 dirsearch.py -e php -l URLs.txt --format plain -o report.txt
python3 dirsearch.py -e php -u https://target --format html -o target.json
cat urls.txt | python3 dirsearch.py --stdin
python3 dirsearch.py -u https://target --max-time 360
python3 dirsearch.py -u https://target --auth admin:pass --auth-type basic
python3 dirsearch.py -u https://target --header-list rate-limit-bypasses.txt
Es gibt noch mehr zu entdecken, probieren Sie es selbst aus!
Installieren Sie Docker
curl -fsSL https://get.docker.com | bash
Um Docker nutzen zu können, benötigen Sie Superuser-Power
Bild erstellen
docker build -t " dirsearch:v0.4.3 " .
dirsearch ist der Name des Bildes und v0.4.3 ist die Version
Zum Benutzen
docker run -it --rm " dirsearch:v0.4.3 " -u target -e php,html,js,zip
--proxy-list
randomisieren--suffixes ~
und --prefixes .
--remove-extensions
und --suffixes /
kombinieren!--cidr
, -F
, -q
und reduziert die meisten Geräusche und falschen Negative beim Brute-Force mit einem CIDR--skip-on-status 429
hilft Ihnen, ein Ziel zu überspringen, wenn es 429 zurückgibtHEAD
anstelle von GET
verwenden--timeout 3 --retries 1
Wir haben von vielen Menschen auf der ganzen Welt viel Hilfe erhalten, um dieses Tool zu verbessern. Vielen Dank an alle, die uns bisher geholfen haben! Unter CONTRIBUTORS.md erfahren Sie, wer sie sind.
Urheberrecht (C) Mauro Soria ([email protected])
Lizenz: GNU General Public License, Version 2