目录导航
什么是Arjun
Arjun 可以找到 URL 端点的查询参数。如果你不明白这意味着什么,没关系,请继续阅读。
Web 应用程序使用参数(或查询)来接受用户输入,考虑以下示例
http://api.example.com/v1/userinfo?id=751634589
这个 URL 似乎加载了特定用户 id 的用户信息,但是如果存在一个名为admin
当设置为True
使端点提供有关用户的更多信息的参数怎么办?
这就是 Arjun 所做的,它使用包含 10,985 个参数名称的巨大默认字典找到有效的 HTTP 参数。
通过这个庞大的列表只需不到 10 秒的时间,同时向目标发出 20-30 个请求。方法如下。

为什么使用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数据集中提取顶级参数名称并将SecLists和param-miner词表中的最佳词合并到其中来创建的。

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

指定 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
nano
用作提示的默认编辑器,但您可以通过调整来更改它/core/prompt.py
。
项目地址
GitHub:https://github.com/s0md3v/Arjun
转载请注明出处及链接