Un outil de force brute avancé pour les chemins Web
dirsearch est activement développé par @maurosoria et @shelld3v
Accédez à notre serveur Discord pour communiquer au mieux avec l'équipe
Exigence : python 3.9 ou supérieur
Choisissez l'une de ces options d'installation :
git clone https://github.com/maurosoria/dirsearch.git --depth 1
( RECOMMANDÉ )docker build -t "dirsearch:v0.4.3" .
(plus d'informations peuvent être trouvées ici)pip3 install dirsearch
ou pip install dirsearch
sudo apt-get install dirsearch
(obsolète) Résumé:
%EXT%
par les extensions de l'indicateur -e .%EXT%
(comme SecLists), -f | Le commutateur --force-extensions est requis pour ajouter des extensions à chaque mot de la liste de mots, ainsi qu'au /
.wordlist1.txt,wordlist2.txt
.Exemples :
index.%EXT%
Passer asp et aspx comme extensions générera le dictionnaire suivant :
index
index.asp
index.aspx
admin
Passer php et html en tant qu'extensions avec l'indicateur -f / --force-extensions générera le dictionnaire suivant :
admin
admin.php
admin.html
admin/
login.html
Passer jsp et jspa en tant qu'extensions avec l'indicateur -O / --overwrite-extensions générera le dictionnaire suivant :
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
Par défaut, config.ini
dans votre répertoire dirsearch est utilisé comme fichier de configuration mais vous pouvez sélectionner un autre fichier via l'indicateur --config
ou la variable d'environnement DIRSEARCH_CONFIG
.
# 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
Quelques exemples d'utilisation de la recherche directe - ce sont les arguments les plus courants. Si vous avez besoin de tout, utilisez simplement l'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
dirsearch vous permet de suspendre la progression de l'analyse avec CTRL+C, à partir de là, vous pouvez enregistrer la progression (et continuer plus tard), ignorer la cible actuelle ou ignorer le sous-répertoire actuel.
admin/
, il forcera brutalement admin/*
( *
est l'endroit où il force brutalement). Pour activer cette fonctionnalité, utilisez l'indicateur -r (ou --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
Il existe 2 autres options : --force-recursive et --deep-recursive
/
a/b/c
=> ajouter a/
, a/b/
) S'il y a des sous-répertoires que vous ne souhaitez pas forcer de manière récursive, utilisez --exclude-subdirs
python3 dirsearch.py -e php,html,js -u https://target -r --exclude-subdirs image/,media/,css/
Le numéro de thread ( -t | --threads ) reflète le nombre de processus de force brute séparés. Ainsi, plus le numéro de thread est grand, plus la recherche directe s'exécute rapidement. Par défaut, le nombre de threads est de 25, mais vous pouvez l'augmenter si vous souhaitez accélérer la progression.
Malgré cela, la vitesse dépend encore beaucoup du temps de réponse du serveur. Et à titre d'avertissement, nous vous conseillons de garder le nombre de threads pas trop grand car cela peut provoquer des DoS (Denial of Service).
python3 dirsearch.py -e php,htm,js,bak,zip,tgz,txt -u https://target -t 20
Vous pouvez passer en mode asynchrone en --async
, laisser dirsearch utiliser des coroutines au lieu de threads pour gérer les requêtes simultanées.
En théorie, le mode asynchrone offre de meilleures performances et une utilisation moindre du processeur car il ne nécessite pas de basculer entre différents contextes de thread. De plus, appuyer sur CTRL+C mettra immédiatement la progression en pause sans avoir à attendre la suspension des threads.
python3 dirsearch.py -e php -u https://target --prefixes .,admin,_
Liste de mots :
tools
Généré avec des préfixes :
tools
.tools
admintools
_tools
python3 dirsearch.py -e php -u https://target --suffixes ~
Liste de mots :
index.php
internal
Généré avec les suffixes :
index.php
internal
index.php~
internal~
Dans le dossier db/
, il y a plusieurs "fichiers de liste noire". Les chemins de ces fichiers seront filtrés du résultat de l'analyse s'ils ont le même statut que celui mentionné dans le nom du fichier.
Exemple : si vous ajoutez admin.php
dans db/403_blacklist.txt
, chaque fois que vous effectuez une analyse qui admin.php
renvoie 403, elle sera filtrée du résultat.
Utilisez -i | --include-status et -x | --exclude-status pour sélectionner les codes d'état de réponse autorisés et non autorisés
Pour des filtres plus avancés : --exclude-sizes , --exclude-texts , --exclude-regexps , --exclude-redirects et --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
dirsearch vous permet d'importer la requête brute à partir d'un fichier. Le contenu ressemblerait à ceci :
GET /admin HTTP/1.1
Host: admin.example.com
Cache-Control: max-age=0
Accept: */*
Puisqu'il n'y a aucun moyen pour Dirsearch de savoir quel est le schéma d'URI, vous devez le définir à l'aide de l'indicateur --scheme
. Par défaut, dirsearch détecte automatiquement le schéma.
Formats de liste de mots pris en charge : majuscules, minuscules, majuscules
admin
index.html
ADMIN
INDEX.HTML
Admin
Index.html
Utilisez -X | --exclude-extensions avec une liste d'extensions supprimera tous les chemins de la liste de mots contenant les extensions données
python3 dirsearch.py -u https://target -X jsp
Liste de mots :
admin.php
test.jsp
Après:
admin.php
python3 dirsearch.py -e php,html,js -u https://target --subdirs /,admin/,folder/
dirsearch prend en charge les proxy SOCKS et HTTP, avec deux options : un serveur proxy ou une liste de serveurs proxy.
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
Formats de rapport pris en charge : simple , plain , 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
Il y a d'autres choses à découvrir, essayez-vous !
Installer Docker
curl -fsSL https://get.docker.com | bash
Pour utiliser Docker, vous avez besoin du pouvoir du superutilisateur
Pour créer une image
docker build -t " dirsearch:v0.4.3 " .
dirsearch est le nom de l'image et v0.4.3 est la version
Pour utiliser
docker run -it --rm " dirsearch:v0.4.3 " -u target -e php,html,js,zip
--proxy-list
--suffixes ~
et --prefixes .
--remove-extensions
et --suffixes /
!--cidr
, -F
, -q
et réduira la plupart des bruits + faux négatifs lors du forçage brutal avec un CIDR--skip-on-status 429
vous aidera à sauter une cible chaque fois qu'elle renvoie 429HEAD
au lieu de GET
--timeout 3 --retries 1
Nous avons reçu beaucoup d'aide de nombreuses personnes à travers le monde pour améliorer cet outil. Merci beaucoup à tous ceux qui nous ont aidé jusqu'à présent ! Voir CONTRIBUTORS.md pour savoir qui ils sont.
Copyright (C) Mauro Soria ([email protected])
Licence : Licence publique générale GNU, version 2