고급 웹 경로 무차별 대입 공격
dirsearch는 @maurosoria 및 @shelld3v에 의해 활발히 개발되고 있습니다.
팀과 최대한 소통하려면 Discord 서버에 접속하세요.
요구 사항: Python 3.9 이상
다음 설치 옵션 중 하나를 선택하십시오.
git clone https://github.com/maurosoria/dirsearch.git --depth 1
( 권장 )docker build -t "dirsearch:v0.4.3" .
(자세한 정보는 여기에서 확인할 수 있습니다)pip3 install dirsearch
또는 pip install dirsearch
sudo apt-get install dirsearch
(더 이상 사용되지 않음) 요약:
%EXT%
키워드를 -e 플래그의 확장으로만 바꿉니다.%EXT%
가 없는 단어 목록(SecList와 같은)의 경우 -f | --force-extensions 스위치는 단어 목록의 모든 단어와 /
에 확장자를 추가하는 데 필요합니다.wordlist1.txt,wordlist2.txt
.예:
index.%EXT%
asp 및 aspx를 확장으로 전달하면 다음 사전이 생성됩니다.
index
index.asp
index.aspx
admin
-f / --force-extensions 플래그를 사용하여 php 및 html을 확장으로 전달하면 다음 사전이 생성됩니다.
admin
admin.php
admin.html
admin/
login.html
-O / --overwrite-extensions 플래그를 사용하여 jsp 및 jspa를 확장으로 전달하면 다음 사전이 생성됩니다.
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
기본적으로 dirsearch 디렉토리 내의 config.ini
구성 파일로 사용되지만 --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
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를 사용하여 스캔 진행을 일시 중지할 수 있습니다. 여기에서 진행을 저장하고(나중에 계속) 현재 대상을 건너뛰거나 현재 하위 디렉터리를 건너뛸 수 있습니다.
admin/
찾으면 무차별 대입 admin/*
수행합니다( *
는 무차별 대입을 수행하는 곳입니다). 이 기능을 활성화하려면 -r (또는 --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
--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를 누르면 스레드가 일시 중단될 때까지 기다릴 필요 없이 진행이 즉시 일시 중지됩니다.
python3 dirsearch.py -e php -u https://target --prefixes .,admin,_
단어 목록:
tools
접두어로 생성됨:
tools
.tools
admintools
_tools
python3 dirsearch.py -e php -u https://target --suffixes ~
단어 목록:
index.php
internal
접미사로 생성됨:
index.php
internal
index.php~
internal~
db/
폴더 안에는 여러 개의 "블랙리스트 파일"이 있습니다. 해당 파일의 경로가 파일 이름에 언급된 것과 동일한 상태인 경우 검사 결과에서 필터링됩니다.
예: db/403_blacklist.txt
에 admin.php
추가하면 admin.php
403을 반환하는 스캔을 수행할 때마다 결과에서 필터링됩니다.
-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
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
지원되는 보고서 형식: 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
더 많은 것을 발견할 수 있습니다. 직접 시도해 보세요!
도커 설치
curl -fsSL https://get.docker.com | bash
도커를 사용하려면 슈퍼유저 권한이 필요합니다.
이미지를 생성하려면
docker build -t " dirsearch:v0.4.3 " .
dirsearch 는 이미지 이름이고 v0.4.3 은 버전입니다.
사용을 위해
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을 사용한 무차별 대입 시 대부분의 노이즈 + 거짓 부정이 줄어듭니다.--skip-on-status 429
429가 반환될 때마다 대상을 건너뛰는 데 도움이 됩니다.GET
대신 HEAD
HTTP 메소드를 사용하고 싶을 수도 있습니다 .--timeout 3 --retries 1
우리는 이 도구를 개선하기 위해 전 세계 많은 사람들로부터 많은 도움을 받아왔습니다. 지금까지 우리를 도와주신 모든 분들께 정말 감사드립니다! CONTRIBUTORS.md를 참조하여 그들이 누구인지 알아보세요.
저작권(C) 마우로소리아([email protected])
라이센스: GNU 일반 공중 사용 허가서, 버전 2