dirsearch – Web path discovery——目录遍历

dirsearch – Web path discovery——目录遍历

目录

安装和使用

要求:python 3.9 或更高版本

选择以下安装选项之一:

  • 使用git安装:(git clone https://github.com/maurosoria/dirsearch.git --depth 1推荐
  • 使用 ZIP 文件安装:点​​击此处下载
  • 使用 Docker 安装:(更多信息可以在这里docker build -t "dirsearch:v0.4.3" .找到)
  • 使用 PyPi 安装:pip3 install dirsearch或者pip install dirsearch
  • 使用 Kali Linux 安装:(sudo apt-get install dirsearch已弃用)

单词表(重要)

概括:

  • Wordlist是一个文本文件,每行是一个路径。
  • 关于扩展,与其他工具不同,dirsearch 仅用-e%EXT%标志中的扩展名替换关键字。
  • 对于没有的单词列表%EXT%(例如SecLists),需要使用-f | –force-extensions开关将扩展名附加到单词列表中的每个单词以及/
  • 要将扩展名应用于已有扩展名的单词列表条目,请使用-O | –overwrite-extensions(注意:某些扩展名不会被覆盖,例如.log.json.xml …… 或媒体扩展名,如.jpg.png
  • 要使用多个单词列表,您可以用逗号分隔单词列表。例如:wordlist1.txt,wordlist2.txt

例子:

  • 正常扩展
index.%EXT%

传递aspaspx作为扩展名将生成以下字典:

index
index.asp
index.aspx
  • 强制扩展
admin

使用-f / –force-extensions标志将phphtml作为扩展传递将生成以下字典:

admin
admin.php
admin.html
admin/
  • 覆盖扩展
login.html

使用-O / –overwrite-extensions标志将jspjspa作为扩展传递将生成以下字典:

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

配置

默认情况下,config.ini您的 dirsearch 目录内用作配置文件,但您可以通过--config标志或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

[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″ tabindex=”0″ role=”button” style=”box-sizing: border-box; position: relative; display: flex !important; padding: 0px !important; font-size: 14px; font-weight: var(–base-text-weight-medium, 500); line-height: 20px; white-space: nowrap; vertical-align: middle; cursor: pointer; user-select: none; border: 0px; border-radius: 6px; appearance: none; color: var(–fgColor-accent, var(–color-accent-fg)); background-color: transparent; box-shadow: none; transition: color 80ms cubic-bezier(0.33, 1, 0.68, 1), background-color, box-shadow, border-color; justify-content: center !important; align-items: center !important; margin: var(–base-size-8, 8px) !important; width: var(–control-small-size, 28px); height: var(–control-small-size, 28px);”>

如何使用

Dirsearch 演示

以下是一些如何使用 dirsearch 的示例 – 这些是最常见的参数。如果您需要全部,只需使用-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 允许您使用 CTRL+C 暂停扫描进度,从这里,您可以保存进度(稍后继续)、跳过当前目标或跳过当前子目录。

暂停目录搜索

递归

  • 递归暴力破解是指对找到的目录进行连续暴力破解。例如,如果 dirsearch 找到admin/,它将暴力破解admin/**是它暴力破解的位置)。要启用此功能,请使用-r(或–recursive)标志
python3 dirsearch.py -e php,html,js -u https://target -r
  • 您可以使用–max-recursion-depth设置最大递归深度,并使用–recursion-status 设置递归的状态代码
python3 dirsearch.py -e php,html,js -u https://target -r --max-recursion-depth 3 --recursion-status 200-399
  • 还有两个选项:–force-recursive–deep-recursive
    • 强制递归:强制递归所有找到的路径,而不仅仅是以 结尾的路径/
    • 深度递归:递归强力搜索路径的所有深度(a/b/c=> 添加a/a/b/
  • 如果你不想以递归方式强制执行某些子目录,请使用--exclude-subdirs
python3 dirsearch.py -e php,html,js -u https://target -r --exclude-subdirs image/,media/,css/

线程

线程数(-t | –threads)反映了分离的暴力破解进程的数量。因此线程数越大,dirsearch 运行得越快。默认情况下,线程数为 25,但如果您想加快进度,可以增加它。

尽管如此,速度仍然很大程度上取决于服务器的响应时间。作为警告,我们建议您不要将线程数设置得太大,因为这可能会导致 DoS(拒绝服务)。

python3 dirsearch.py -e php,htm,js,bak,zip,tgz,txt -u https://target -t 20

异步

您可以通过 切换到异步模式--async,让 dirsearch 使用协程而不是线程来处理并发请求。

理论上,异步模式可提供更好的性能和更低的 CPU 使用率,因为它不需要在不同的线程上下文之间切换。此外,按 CTRL+C 将立即暂停进度,而无需等待线程暂停。


前缀 / 后缀

  • –prefixes:为所有条目添加自定义前缀
python3 dirsearch.py -e php -u https://target --prefixes .,admin,_

单词表:

tools

使用前缀生成:

tools
.tools
admintools
_tools
  • –suffixes:为所有条目添加自定义后缀
python3 dirsearch.py -e php -u https://target --suffixes ~

单词表:

index.php
internal

生成后缀:

index.php
internal
index.php~
internal~

黑名单

文件夹内db/有多个“黑名单文件”,如果这些文件中的路径与文件名中提到的状态相同,则会从扫描结果中过滤掉。

例如:如果您添加admin.phpdb/403_blacklist.txt,每当您执行返回 403 的扫描时admin.php,它将从结果中被过滤掉。


筛选器

使用-i | –include-status-x | –exclude-status选择允许和不允许的响应状态代码

对于更高级的过滤器:–exclude-sizes–exclude-texts–exclude-regexps–exclude-redirects–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 允许您从文件导入原始请求。内容如下所示:

GET /admin HTTP/1.1
Host: admin.example.com
Cache-Control: max-age=0
Accept: */*

由于 dirsearch 无法知道 URI 方案是什么,因此您需要使用--scheme标志进行设置。默认情况下,dirsearch 会自动检测方案。


单词表格式

支持的单词列表格式:大写、小写、大写

小写:

admin
index.html

大写:

ADMIN
INDEX.HTML

首都:

Admin
Index.html

排除扩展

使用带有扩展名列表的-X | –exclude-extensions将删除单词列表中包含给定扩展名的所有路径

python3 dirsearch.py -u https://target -X jsp

单词表:

admin.php
test.jsp

后:

admin.php

扫描子目录

  • 从 URL 中,您可以使用–subdirs扫描子目录列表。
python3 dirsearch.py -e php,html,js -u https://target --subdirs /,admin/,folder/

代理

dirsearch 支持 SOCKS 和 HTTP 代理,有两个选项:代理服务器或代理服务器列表。

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

报告

支持的报告格式:简单纯文本jsonxmlmdcsv、 htmlsqlitemysqlpostgresql

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

还有更多等待发现,自己尝试一下吧!

支持Docker

安装 Docker Linux

安装 Docker

curl -fsSL https://get.docker.com | bash

要使用 docker,你需要超级用户权限

构建图像目录搜索

创建图像

docker build -t "dirsearch:v0.4.3" .

dirsearch是图像的名称,v0.4.3是版本

使用 dirsearch

对于使用

docker run -it --rm "dirsearch:v0.4.3" -u target -e php,html,js,zip

参考

尖端

  • 服务器有请求限制?这很糟糕,但你可以通过使用随机代理来绕过它--proxy-list
  • 想要查找配置文件或备份?--suffixes ~尝试--prefixes .
  • 只想查找文件夹/目录?为什么不结合--remove-extensions--suffixes /
  • --cidr-F和的混合-q将减少使用 CIDR 进行暴力破解时的大部分噪音和误报
  • 扫描 URL 列表,但不想看到 429 洪水?--skip-on-status 429将帮助您在返回 429 时跳过目标
  • 服务器包含大文件,导致扫描速度变慢?您可能希望使用HEADHTTP 方法代替GET
  • 暴力破解 CIDR 很慢?可能你忘了减少请求超时和请求重试次数。建议:--timeout 3 --retries 1

国内下载链接

© 版权声明
THE END
喜欢就支持一下吧
点赞678 分享