
숨겨진 파라미터 탐지 스위트
이 도구는 다른 테스터가 놓칠 수 있는, 취약하거나 흥미로운 기능을 드러낼 수 있는 숨겨진 파라미터를 식별하는 데 도움을 줍니다. 페이지의 줄 단위 비교, 응답 코드 비교, 반사(reflection) 비교를 통해 높은 정확도를 달성합니다.
모든 기능을 설명하는 문서는 https://sh1yo.art/x8docs/에서 확인할 수 있습니다. 문서의 원본은 /docs.md에 있습니다.
admin=true와 같이 무작위가 아닌 값을 가진 파라미터도 발견 가능.x8 -u "https://example.com/" -w <wordlist>
기본 파라미터 사용:
x8 -u "https://example.com/?something=1" -w <wordlist>
/?something=1은 /?something=1&%s와 동일합니다.
x8 -u "https://example.com/" -X POST -w <wordlist>
또는 사용자 정의 본문 사용:
x8 -u "https://example.com/" -X POST -b '{"x":{%s}}' -w <wordlist>
%s는 {"x":{"a":"b3a1a", "b":"ce03a", ...}}와 같이 다양한 파라미터로 대체됩니다.
x8 -u "https://example.com/" "https://4rt.one/" -W0
x8 -u "https://example.com/" --param-template "user[%k]=%v" -w <wordlist>
이제 모든 요청이 /?user[a]=hg2s4&user[b]=a34fa&... 형태가 됩니다.
때로는 파라미터를 인코딩해야 합니다. 다음도 가능합니다:
x8 -u "https://example.com/?path=..%2faction.php%3f%s%23" --encode -w <wordlist>
GET /?path=..%2faction.php%3fWTDa8%3Da7UOS%26rTIDA%3DexMFp...%23 HTTP/1.1
Host: example.com
x8 -u "https://example.com" --headers -w <wordlist>
개별 헤더를 대상으로 지정할 수도 있습니다:
x8 -u "https://example.com" --headers -H "Cookie: %s" -w <wordlist>
다음 URL에서 도구를 테스트하고 다른 도구와 비교할 수 있습니다:
https://4rt.one/level1 (GET)
https://4rt.one/level3 (GET)
USAGE:
x8 [FLAGS] [OPTIONS]
FLAGS:
--append Append to the output file instead of overwriting it.
-B Equal to -x http://localhost:8080
--check-binary Check the body of responses with binary content types
--disable-additional-checks Private
--disable-colors
--disable-custom-parameters Do not automatically check parameters like admin=true
--disable-progress-bar
--disable-trustdns Can solve some dns related problems
--encode Encodes query or body before making a request, i.e & -> %26, = -> %3D
List of chars to encode: ", `, , <, >, &, #, ;, /, =, %
-L, --follow-redirects Follow redirections
--force Force searching for parameters on pages > 25MB. Remove an error in case there's 1
worker with --one-worker-per-host option.
-h, --help Prints help information
--headers Switch to header discovery mode.
NOTE Content-Length and Host headers are automatically removed from the list
--invert By default, parameters are sent within the body only in case PUT or POST methods
are used.
It's possible to overwrite this behavior by specifying the option
--mimic-browser Add default headers that browsers usually set.
--one-worker-per-host Multiple urls with the same host will be checked one after another,
while urls with different hosts - are in parallel.
Doesn't increase the number of workers
--reflected-only Disable page comparison and search for reflected parameters only.
--remove-empty Skip writing to file outputs of url:method pairs without found parameters
--replay-once If a replay proxy is specified, send all found parameters within one request.
--strict Only report parameters that have changed the different parts of a page
--test Prints request and response
-V, --version Prints version information
--verify Verify found parameters.
OPTIONS:
-b, --body <body> Example: --body '{"x":{%s}}'
Available variables: {{random}}
-c <concurrency> The number of concurrent requests per url [default: 1]
--custom-parameters <custom-parameters>
Check these parameters with non-random values like true/false yes/no
(default is "admin bot captcha debug disable encryption env show sso test waf")
--custom-values <custom-values>
Values for custom parameters (default is "1 0 false off null true yes no")
-t, --data-type <data-type>
Available: urlencode, json
Can be detected automatically if --body is specified (default is "urlencode")
-d, --delay <Delay between requests in milliseconds> [default: 0]
-H <headers> Example: -H 'one:one' 'two:two'
--http <http> HTTP version. Supported versions: --http 1.1, --http 2
-j, --joiner <joiner>
How to join parameter templates. Example: --joiner '&'
Default: urlencoded - '&', json - ', ', header values - '; '
--learn-requests <learn-requests-count> Set the custom number of learn requests. [default: 9]
-m, --max <max>
Change the maximum number of parameters per request.
(default is <= 256 for query, 64 for headers and 512 for body)
-X, --method <methods> Multiple values are supported: -X GET POST
-o, --output <file>
-O, --output-format <output-format> standart, json, url, request [default: standart]
-P, --param-template <parameter-template>
%k - key, %v - value. Example: --param-template 'user[%k]=%v'
Default: urlencoded - <%k=%v>, json - <"%k":%v>, headers - <%k=%v>
-p, --port <port> Port to use with request file
--progress-bar-len <progress-bar-len> [default: 26]
--proto <proto> Protocol to use with request file (default is "https")
-x, --proxy <proxy>
--recursion-depth <recursion-depth>
Check the same list of parameters with the found parameters until there are no new parameters to be found.
Conflicts with --verify for now.
--replay-proxy <replay-proxy>
Request target with every found parameter via the replay proxy at the end.
-r, --request <request> The file with the raw http request
--save-responses <save-responses>
Save request and response to a directory when a parameter is found
--split-by <split-by>
Split the request into lines by the provided sequence. By default splits by \r, \n and \r\n
--timeout <timeout> HTTP request timeout in seconds. [default: 15]
-u, --url <url>
You can add a custom injection point with %s.
Multiple urls and filenames are supported:
-u filename.txt
-u https://url1 http://url2
-v, --verbose <verbose> Verbose level 0/1/2 [default: 1]
-w, --wordlist <wordlist>
The file with parameters (leave empty to read from stdin) [default: ]
-W, --workers <workers>
The number of concurrent url checks.
Use -W0 to run everything in parallel [default: 1]
파라미터:
헤더:
Burp Suite 통합은 send to 확장 기능을 통해 이루어집니다.
항목에 이름을 지정하고 다음 줄을 명령어에 삽입합니다:
/path/to/x8 --progress-bar-len 20 -c 3 -r %R -w /path/to/wordlist --proto %T --port %P
자주 사용하는 인수(예: --output-format, --replay-proxy, --recursion-depth 등)도 추가할 수 있습니다.
참고: 진행률 표시줄이 제대로 작동하지 않으면 --progress-bar-len 값을 줄여보세요.
백그라운드 실행 대신 터미널에서 실행으로 전환합니다.

터미널의 글꼴 렌더링에 문제가 발생하면 Send to Miscellaneous Options에서 xterm 옵션을 조정할 수 있습니다. 기존 내용을 xterm -rv -fa 'Monospace' -fs 10 -hold -e %C로 바꾸거나, xterm을 선호하는 터미널 에뮬레이터로 대체하세요.
이제 프록시/리피터 탭으로 이동하여 요청을 도구로 보낼 수 있습니다:

다음 대화상자에서 명령어를 수정하고 새 터미널 창에서 실행할 수 있습니다.

명령어를 실행하면 새 터미널 창이 열리고 실행 중인 도구가 표시됩니다.

참고: v4.0.0부터 cargo install을 통한 설치는 main 대신 crate 브랜치를 사용합니다. 이 브랜치에는 HTTP 정규화를 수행하고 유효하지 않은 요청 전송을 방지하는 원본 reqwest 라이브러리가 포함되어 있습니다. 이러한 제한 없이 수정된 reqwest 버전을 사용하려면 'Releases' 페이지에서 설치하거나 소스를 빌드하는 것을 권장합니다.
Docker
git clone https://github.com/Sh1Yo/x8
cd x8
docker build -t x8 .
Linux
# pacman -Sy x8
git clone https://github.com/sh1yo/x8
cd x8
cargo build --release
# 바이너리를 $PATH로 이동하여 전체 경로 없이 사용할 수 있도록 함
cp ./target/release/x8 /usr/local/bin
# /usr/local/bin이 없다고 나오면 다음을 시도
# sudo cp ./target/release/x8 /usr/bin
cargo install x8
Mac
git clone https://github.com/sh1yo/x8
cd x8
cargo build --release
# 바이너리를 $PATH로 이동하여 전체 경로 없이 사용할 수 있도록 함
cp ./target/release/x8 /usr/local/bin
cargo install x8
Windows