17

Extended ssrf search:一款功能强大的SSRF智能漏洞扫描工具

 4 years ago
source link: https://www.freebuf.com/sectool/228925.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Extended ssrf search

Extended ssrf search是一款功能强大的SSRF智能漏洞扫描工具,该工具可以通过在请求中设置不同的预定义参数来搜索SSRF漏洞,这些参数包括路径、主机、Header、POST和GET参数。

工具下载

广大研究人员可以使用下列命令将项目源码克隆至本地:

git clone https://github.com/Damian89/extended-ssrf-search.git

工具准备

将项目中的example.app-settings.conf文件重命名为app-settings.conf,然后调整相应设置。最重要的设置时回调URL地址,我建议大家使用Burp Collaborator。接下来,将你的URL添加到config/url-to-test.txt中。在这里,脚本将接收域名和URL以及响应的查询参数。你还可以将你自己的Cookie添加到config/cookie-jar.txt中,或给请求添加额外的Header。针对POST以及GET请求的爆破列表当前体积不大,因为我们认为应该把重点放在那些最有可能存在漏洞的地方。

工具执行

该工具可以直接在不需要任何参数的情况下通过命令行接口来运行,运行命令如下:

python3 extended-ssrf-search.py

工具配置

我们可以根据自己的需要来设置各种工具运行参数、设置以及选项。

文件

主配置文件为“app-settings.conf”,所有的工具配置都可以通过修改这个文件来实现。除此之外,该工具还有很多其他的文件可以帮助我们设置更加复杂的数据,例如Header、URL和Cookie。

config/cookie-jar.txt

使用此文件添加cookie字符串,我一般都直接拷贝Burp请求中的参数,你也可以拷贝”Cookie:”-header的值,默认文件中已提供了样本输入。

config/http-headers.txt

这个文件中定义了可以添加到请求和操作中的HTTP Header,每个Header都添加了Payload,最重要的参数已经在项目文件中给出了,但你可以根据需要来自行添加。

config/parameters.txt

该工具提供了用于对GET和POST请求进行爆破的选项,其中涉及到的每一个参数都有对应的Payload作为值。

config/static-request-headers.txt

这些Header会被添加至每一个请求中,但无法被修改,因为它们都是静态值。这是添加授权或承载Cookie的最佳位置,其中每一行为一个(键:值)对。

config/urls-to-test.txt

可在该文件中添加需要扫描的链接,允许的参数格式如下:

https://domain.com

https://domain.com/path

https://domain.com/path?param=value ¶m1=value1

domain.com

当检测到最后一个样例格式时,会在前面加上一个“http://”。该工具只能配合格式正确的url列表来进行操作,因为建议使用Burp来导出这种格式的列表文件,并根据需要来添加Cookie。

设置

app-settings.conf文件定义的是程序的工作流,它是最重要的项目文件,你可以在该文件中激活/禁用不同的功能模块。

CallbackHost

定义发送所有DNS和HTTP请求的URL/主机,我一般使用的是Burp Collaborator,但DNSBin也是可以的。

HTTPMethod

定义请求方法,可选参数有GET、POST、PUT、DELETE、PATCH、GET、OPTIONS,无效值将引起工具运行错误。

HTTPTimeout

有些请求可能需要很长时间,在这里你可以定义一个请求的最长执行时间,我建议这个值设置在2到6秒之间。

MaxThreads

线程越多,脚本就越快。但是由于我们处理的是大量的连接,所以我通常在我的个人计算机上设置小于10的值,在我的VPS上设置值大约为30。

ShuffleTests

尤其是在处理一个较大的URL列表时,如果将此设置为“true”,则会打乱所有创建的测试。这样一来,同一个主机就不会受到那么多的攻击。如果你只扫描一台主机,那就随意了。

GetChunkSize

在处理一个较大的参数列表时,这个参数也许可以帮到你,并防止出现较严重的实体错误。

InPath

下面的样例中显示了一个GET请求,但根据我们的设置,它也可以是POST、PUT和DELETE等等:

GET [INJECT HERE PAYLOAD] HTTP/1.1
...

InHost

下面的样例中显示了一个GET请求,但根据我们的设置,它也可以是POST、PUT和DELETE等等:

GET /path HTTP/1.1
Host: [INJECT HERE PAYLOAD]
...

InAdditionalHeaders

下面的样例中显示了一个GET请求,但根据我们的设置,它也可以是POST、PUT和DELETE等等:

GET /path HTTP/1.1
...
X-Forwarded-For: [INJECT HERE PAYLOAD]

InParamsGet

下面是一个针对GET请求的固定方法:

GET /path?[INJECT HERE PAYLOAD] HTTP/1.1
...

InParamsPost

下面是一个针对POST请求的固定方法:

POST /path HTTP/1.1
...
Content-Type: application/x-www-form-urlencoded
Content-Length: XXX
[INJECT HERE PAYLOAD]

InParamsPostAsJson

下面是一个针对POST请求的固定方法:

POST /path HTTP/1.1
...
Content-Type: application/json
Content-Length: XXX
[INJECT HERE JSON-PAYLOAD]

攻击

该工具的默认配置下,可以直接尝试通过SSRF来触发HTTP请求。与此同时,也可以使用DNS以及OS命令注入等方式来实现数据提取。

在这里,我们可以设置代理服务器,格式为“ip : port”。结果如下,我们可以在Burp中查看到捕捉到的HTTP历史记录:

Z326nqF.jpg!web

攻击运行截图

qeA3umF.jpg!web


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK