29 个稳定版本 (4 个主要版本)

4.3.2 2023 年 6 月 30 日
4.2.2 2023 年 3 月 16 日
3.4.0 2022 年 7 月 24 日
3.2.1 2022 年 1 月 31 日
0.2.0 2021 年 5 月 8 日

命令行实用工具 中排名第 397

Download history 151/week @ 2024-03-11 59/week @ 2024-03-18 47/week @ 2024-03-25 82/week @ 2024-04-01 69/week @ 2024-04-08 49/week @ 2024-04-15 97/week @ 2024-04-22 49/week @ 2024-04-29 50/week @ 2024-05-06 88/week @ 2024-05-13 79/week @ 2024-05-20 44/week @ 2024-05-27 62/week @ 2024-06-03 111/week @ 2024-06-10 75/week @ 2024-06-17 46/week @ 2024-06-24

每月下载量 300

GPL-3.0 或更高版本

165KB
3.5K SLoC

Twitter stars issues

Latest Version crates.io crates_downloads github_downloads

x8

用 Rust 编写的隐藏参数发现套件。

该工具有助于识别可能存在漏洞或可能被其他测试人员忽略的有趣功能的隐藏参数。它通过逐行比较页面、比较响应代码和反射来实现高精度。

文档

解释每个功能的文档可在 https://sh1yo.art/x8docs/ 获取。文档的源代码位于 /docs.md

功能

  • 快速。
  • 通过使用模板和注入点提供灵活的请求配置。
  • 高度可扩展,每次运行可检查数千个 URL。
  • 与类似工具相比,特别是在困难情况下,提供更高的准确性。
  • 能够发现具有非随机值(如 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", ...}}

并行检查多个URL

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" -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 https://127.0.0.1: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 集成

burpsuite集成是通过发送到扩展完成的。

设置

  1. 启动Burp Suite并导航到“扩展”选项卡。
  2. 从BApp Store中找到并安装“自定义发送到”扩展。
  3. 打开“发送到”选项卡,然后单击“添加”按钮以配置扩展。

给条目命名,并在命令中插入以下行

/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的值。

从“在后台运行”切换到“在终端运行”。

image

如果您在终端中遇到字体渲染问题,您可以在“发送到其他选项”中调整xterm选项。只需将现有内容替换为xterm -rv -fa 'Monospace' -fs 10 -hold -e %C,或者用您喜欢的终端模拟器替换xterm

现在您可以转到代理/重复器选项卡并将请求发送到该工具

image

在下一个对话框中,您可以修改命令并在新的终端窗口中执行它。

image

执行命令后,将出现一个新的终端窗口,显示正在运行的工具。

image

安装

注意:从v4.0.0版本开始,使用cargo install安装时使用crate分支而不是main分支。此分支包括执行HTTP规范化并防止发送无效请求的原始reqwest库。如果您想使用不受这些限制的修改过的reqwest版本,我建议通过Releases页面或构建源代码进行安装。

  • Docker

    • 安装
      git clone https://github.com/Sh1Yo/x8
      cd x8
      docker build -t x8 .
      
    • 使用方法
  • Linux

    • 从发行版中获取
    • 来自Blackarch仓库(仓库需要已安装)
      # pacman -Sy x8
      
    • 来自源代码(需要安装Rust)
      git clone https://github.com/Sh1Yo/x8
      cd x8
      cargo build --release
      
    • 通过cargo install
      cargo install x8
      
  • Mac

    • 来自源代码(需要安装Rust)
      git clone https://github.com/Sh1Yo/x8
      cd x8
      cargo build --release
      
    • 通过cargo install
      cargo install x8
      
  • Windows

    • 从发行版中获取

依赖项

约11-25MB
约389K SLoC