目录导航
什么是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使用方法
命令参数
arjun -h
用法: arjun [-h] [-u URL] [-o JSON文件] [-oT 文本文件] [-oB [BURP代理]] [-d 延迟] [-t 线程数] [-w 字典文件] [-m 方法] [-i [导入文件]] [-T 超时时间]
[-c 分块数] [-q] [--rate-limit 速率限制] [--headers [请求头]] [--passive [被动模式]] [--stable] [--include 包含数据] [--disable-redirects]
[--casing 参数格式]
选项:
-h, --help 显示帮助信息
-u URL 目标URL
-o, -oJ JSON文件 JSON格式输出文件路径
-oT 文本文件 文本格式输出文件路径
-oB [BURP代理] 输出到Burp Suite代理 (默认: 127.0.0.1:8080)
-d 延迟 请求间隔延迟(秒) (默认: 0)
-t 线程数 并发线程数 (默认: 5)
-w 字典文件 字典文件路径 (默认: {arjundir}/db/large.txt)
-m 方法 请求方法: GET/POST/XML/JSON (默认: GET)
-i [导入文件] 从文件导入目标URL
-T 超时时间 HTTP请求超时时间(秒) (默认: 15)
-c 分块数 单次发送的参数块大小
-q 静默模式。无输出
--rate-limit 速率限制
每秒最大请求数 (默认: 9999)
--headers [请求头] 添加请求头。多个请求头用换行符分隔
--passive [被动模式] 从被动源(如wayback/commocrawl/otx)收集参数名
--stable 稳定性优先(降低速度)
--include 包含数据 在每个请求中包含此数据
--disable-redirects 禁用重定向
--casing 参数格式 参数命名格式(如: like_this, likeThis, likethis)
扫描单个 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
转载请注明出处及链接