Un avanzado forzador de ruta web
dirsearch está siendo desarrollado activamente por @maurosoria y @shelld3v
Accede a nuestro servidor de Discord para comunicarte con el equipo de la mejor manera.
Requisito: Python 3.9 o superior
Elija una de estas opciones de instalación:
git clone https://github.com/maurosoria/dirsearch.git --depth 1
( RECOMENDADO )docker build -t "dirsearch:v0.4.3" .
(puede encontrar más información aquí)pip3 install dirsearch
o pip install dirsearch
sudo apt-get install dirsearch
(obsoleto) Resumen:
%EXT%
con extensiones de -e flag.%EXT%
(como SecLists), -f | Se requiere el modificador --force-extensions para agregar extensiones a cada palabra en la lista de palabras, así como a /
.wordlist1.txt,wordlist2.txt
.Ejemplos:
index.%EXT%
Pasar asp y aspx como extensiones generará el siguiente diccionario:
index
index.asp
index.aspx
admin
Pasar php y html como extensiones con el indicador -f / --force-extensions generará el siguiente diccionario:
admin
admin.php
admin.html
admin/
login.html
Pasar jsp y jspa como extensiones con el indicador -O / --overwrite-extensions generará el siguiente diccionario:
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
De forma predeterminada, config.ini
dentro de su directorio dirsearch se usa como archivo de configuración, pero puede seleccionar otro archivo mediante el indicador --config
o la variable de entorno 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
Algunos ejemplos de cómo utilizar dirsearch: esos son los argumentos más comunes. Si necesita todo, simplemente use el argumento -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 le permite pausar el progreso del escaneo con CTRL+C, desde aquí, puede guardar el progreso (y continuar más tarde), omitir el objetivo actual u omitir el subdirectorio actual.
admin/
, aplicará fuerza bruta admin/*
( *
es donde aplica la fuerza bruta). Para habilitar esta función, use el indicador -r (o --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
Hay 2 opciones más: --force-recursive y --deep-recursive
/
a/b/c
=> add a/
, a/b/
) Si hay subdirectorios que no desea aplicar fuerza bruta de forma recursiva, utilice --exclude-subdirs
python3 dirsearch.py -e php,html,js -u https://target -r --exclude-subdirs image/,media/,css/
El número de hilo ( -t | --threads ) refleja el número de procesos de fuerza bruta separados. Y cuanto mayor sea el número de hilo, más rápido se ejecutará dirsearch. De forma predeterminada, el número de subprocesos es 25, pero puedes aumentarlo si quieres acelerar el progreso.
A pesar de eso, la velocidad todavía depende mucho del tiempo de respuesta del servidor. Y como advertencia, le recomendamos que no mantenga el número de subprocesos demasiado grande porque puede provocar DoS (Denegación de servicio).
python3 dirsearch.py -e php,htm,js,bak,zip,tgz,txt -u https://target -t 20
Puede cambiar al modo asincrónico mediante --async
, dejar que dirsearch use corrutinas en lugar de subprocesos para manejar solicitudes simultáneas.
En teoría, el modo asíncrono ofrece un mejor rendimiento y un menor uso de la CPU, ya que no requiere cambiar entre diferentes contextos de subprocesos. Además, al presionar CTRL+C se detendrá inmediatamente el progreso sin necesidad de esperar a que se suspendan los subprocesos.
python3 dirsearch.py -e php -u https://target --prefixes .,admin,_
Lista de palabras:
tools
Generado con prefijos:
tools
.tools
admintools
_tools
python3 dirsearch.py -e php -u https://target --suffixes ~
Lista de palabras:
index.php
internal
Generado con sufijos:
index.php
internal
index.php~
internal~
Dentro de la carpeta db/
, hay varios "archivos de lista negra". Las rutas de esos archivos se filtrarán del resultado del análisis si tienen el mismo estado que se menciona en el nombre del archivo.
Ejemplo: si agrega admin.php
a db/403_blacklist.txt
, cada vez que realice un escaneo y admin.php
devuelva 403, se filtrará del resultado.
Utilice -yo | --include-status y -x | --exclude-status para seleccionar códigos de estado de respuesta permitidos y no permitidos
Para filtros más avanzados: --exclude-sizes , --exclude-texts , --exclude-regexps , --exclude-redirects y --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 le permite importar la solicitud sin formato desde un archivo. El contenido sería algo parecido a esto:
GET /admin HTTP/1.1
Host: admin.example.com
Cache-Control: max-age=0
Accept: */*
Dado que no hay forma de que dirsearch sepa cuál es el esquema de URI, debe configurarlo usando el indicador --scheme
. De forma predeterminada, dirsearch detecta automáticamente el esquema.
Formatos de lista de palabras admitidos: mayúsculas, minúsculas y mayúsculas
admin
index.html
ADMIN
INDEX.HTML
Admin
Index.html
Utilice -X | --exclude-extensions con una lista de extensiones eliminará todas las rutas en la lista de palabras que contienen las extensiones dadas
python3 dirsearch.py -u https://target -X jsp
Lista de palabras:
admin.php
test.jsp
Después:
admin.php
python3 dirsearch.py -e php,html,js -u https://target --subdirs /,admin/,folder/
dirsearch admite SOCKS y proxy HTTP, con dos opciones: un servidor proxy o una lista de servidores 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
Formatos de informes admitidos: simple , simple , 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
Hay más por descubrir, ¡pruébalo tú mismo!
Instalar ventana acoplable
curl -fsSL https://get.docker.com | bash
Para usar Docker necesitas poder de superusuario
Para crear imagen
docker build -t " dirsearch:v0.4.3 " .
dirsearch es el nombre de la imagen y v0.4.3 es la versión
Para usar
docker run -it --rm " dirsearch:v0.4.3 " -u target -e php,html,js,zip
--proxy-list
--suffixes ~
y --prefixes .
--remove-extensions
y --suffixes /
?--cidr
, -F
, -q
y reducirá la mayoría de los ruidos + falsos negativos al aplicar fuerza bruta con un CIDR--skip-on-status 429
te ayudará a omitir un objetivo cada vez que regrese 429HEAD
HTTP en lugar de GET
--timeout 3 --retries 1
Hemos estado recibiendo mucha ayuda de muchas personas alrededor del mundo para mejorar esta herramienta. ¡Muchas gracias a todos los que nos han ayudado hasta ahora! Consulte CONTRIBUTORS.md para saber quiénes son.
Copyright (C) Mauro Soria ([email protected])
Licencia: Licencia Pública General GNU, versión 2