Arjun HTTP参数发现套件 扫描URL端点的查询参数

Arjun HTTP参数发现套件 扫描URL端点的查询参数

什么是Arjun

Arjun 可以找到 URL 端点的查询参数。如果你不明白这意味着什么,没关系,请继续阅读。

Web 应用程序使用参数(或查询)来接受用户输入,考虑以下示例

http://api.example.com/v1/userinfo?id=751634589

这个 URL 似乎加载了特定用户 id 的用户信息,但是如果存在一个名为admin当设置为True使端点提供有关用户的更多信息的参数怎么办?
这就是 Arjun 所做的,它使用包含 10,985 个参数名称的巨大默认字典找到有效的 HTTP 参数。

通过这个庞大的列表只需不到 10 秒的时间,同时向目标发出 20-30 个请求。方法如下

Arjun HTTP参数发现套件 扫描URL端点的查询参数

为什么使用Arjun?

  • 支持GET/POST/POST-JSON/POST-XML请求
  • 自动处理速率限制和超时
  • 可以将结果导出到:BurpSuite,文本或 JSON 文件
  • 从以下位置导入目标:BurpSuite、文本文件或原始请求文件
  • 可以被动地从 JS 或 3 个外部源中提取参数

Arjun工作原理

第1步

对 URL 发出两个具有不同查询参数的 HTTP 请求,并存储响应长度、返回次数、响应代码和其他此类因素,以便在以后的步骤中进行比较。
如果在响应中找到任何 HTML 表单,Arjun 会从中提取字段名称并将其添加到参数名称列表中以供进一步检查。

第2步

25,980 个参数名称列表的巨大列表被加载并分为 25 个不同的部分。一个部件的所有参数名称都在一个请求中发送,随机生成的值,因此总共发出 25 个请求。
将这些请求的响应与之前的数据进行比较,拒绝没有导致响应发生任何变化的部分。

步骤3

导致响应偏差的每个部分都分为两部分,并分别发出请求。
不引起任何变化的部分再次被拒绝,引起变化的部分进一步分为两部分。这个过程一直持续到每个部分只剩下一个参数或没有参数。空部分显然被拒绝,单个参数名称被标记为有效。

注意:反射是单独跟踪的,这意味着如果发现某个参数的值被反射,Arjun 会立即将其拾取并标记为可能有效。

参数字典截图

参数名称词表是通过从CommonCrawl数据集中提取顶级参数名称并将SecListsparam-miner词表中的最佳词合并到其中来创建的。

Arjun HTTP参数发现套件 扫描URL端点的查询参数

Arjun下载地址

①GitHub:Arjun.zip

②云中转网盘:

https://www.yunzhongzhuan.com/#sharefile=oKWiNRUO_47092
解压密码:www.ddosi.org

安装 Arjun

您可以arjun使用 pip 安装,如下所示:

pip3 install arjun

或者,通过下载此存储库Arjun.zip并运行如下命令

python3 setup.py install

Arjun使用方法

扫描单个 URL

选项:-u

针对单个 URL 运行 Arjun。

arjun -u https://api.example.com/endpoint
Arjun HTTP参数发现套件 扫描URL端点的查询参数

指定 HTTP 方法

选项:-m

默认情况下,Arjun 会查找GET方法参数。所有可用的方法是:GET/POST/JSON/XML

arjun -u https://api.example.com/endpoint -m POST

导入目标

选项:-i

Arjun 支持从 BurpSuite、简单文本文件和原始请求文件导入目标。Arjun 可以自动识别输入文件的类型,因此您只需要指定路径即可。

arjun -i targets.txt

注意:在 Burp Suite 中导出项目时取消选中“base64”选项。

导出结果

选项:-oJ/-oB/-oT

您可以使用相应的选项将结果导出到 BurpSuite 或 txt/JSON 文件。

arjun -u https://api.example.com/endpoint -oJ result.json
-oJ result.json
-oT result.txt
-oB 127.0.0.1:8080

指定注入点

JSON默认情况下,使用或XML方法参数时,arjun可以检测指定位置的参数。所有可用的方法是:GET/POST/JSON/XML

arjun -u https://api.example.com/endpoint -m JSON --include='{"root":{"a":"b",$arjun$}}'

或者

arjun -u https://api.example.com/endpoint -m XML --include='<?xml><root>$arjun$</root>'

多线程

选项:-t

Arjun 默认使用 2 个线程,但您可以根据您的网络连接和目标限额调整其性能。

arjun -u https://api.example.com/endpoint -t 10

请求之间的延迟

选项:-d

您可以使用该-d选项延迟请求,但它也会将线程数设置为1.

arjun  -u https://api.example.com/endpoint -d 2

请求超时

选项:-T

您可以使用选项指定 HTTP 请求的超时时间-T,默认为15.

arjun  -u https://api.example.com/endpoint -T 10

处理速率限制

选项:--stable

--stable将线程数设置为1并在请求之间引入 6 到 12 秒的随机延迟。

arjun  -u https://api.example.com/endpoint --stable

包括持久数据

选项:--include

假设您有一个 API 密钥,需要随每个请求一起发送,要告诉 Arjun 这样做,您可以使用--include如下选项:

arjun  -u https://api.example.com/endpoint --include 'api_key=xxxxx'

或者

arjun  -u https://api.example.com/endpoint --include '{"api_key":"xxxxx"}'

要包含多个参数,请使用&分隔它们或将它们作为有效的 JSON 对象传递。

控制查询/块大小

选项:-c

默认情况下,Arjun 在请求中包含 500 个参数,这些参数有时会超过某些服务器的最大 URL 长度限制。-c您可以通过指定一次发送的参数数量来处理此类情况。

arjun -u https://api.example.com/endpoint -c 250

禁用重定向

选项:--disable-redirects

此开关将阻止 Arjun 跟踪目标 URL 上的重定向。建议仅在您知道自己在做什么时才使用它。

arjun -u https://api.example.com/redirects_to_api2 --disable-redirects

从被动源收集参数名称

选项:--passive

您可以从 CommonCrawl、Open Threat Exchange 和 WaybackMachine 收集域(不是子域)的参数名称,并检查它们是否存在于您的目标上。

arjun https://api.example.com/endpoint --passive example.com

如果要使用目标 URL 中的域,请使用--passive -. 它仅适用于单个目标。

使用自定义 HTTP 标头

选项:--headers

您可以简单地从命令行添加自定义标题,\n如下所示:

arjun -u https://api.example.com/endpoint --headers "Accept-Language: en-US\nCookie: null"

使用--headers不带任何参数的选项将打开您的文本编辑器(默认为“nano”),您只需将 HTTP 标头粘贴到那里并按Ctrl + S保存即可。

Arjun HTTP参数发现套件 扫描URL端点的查询参数

注意: Arjunnano用作提示的默认编辑器,但您可以通过调整来更改它/core/prompt.py

项目地址

GitHub:https://github.com/s0md3v/Arjun

转载请注明出处及链接

Leave a Reply

您的电子邮箱地址不会被公开。