Alibaba Sentinel的SSRF

admin 2025年4月18日15:16:00评论0 views字数 1745阅读5分49秒阅读模式

作者Github提交地址:https://github.com/alibaba/Sentinel/issues/2451

Alibaba Sentinel的SSRF

在 idea 进行部署,启动,访问:http://127.0.0.1:8080

Alibaba Sentinel的SSRF

默认登录账号和密码:sentinel/sentinel

1、漏洞代码分析

文章中已经给出了漏洞的触发点,以及漏洞利用的 POC,我们做参考分析。

首先漏洞的触发点在com.alibaba.csp.sentinel.dashboard.metric.MetricFetcher#fetchOnce

Alibaba Sentinel的SSRF

httpGetApacheHttpClient库中的一个类,用于创建Http Get请求,最终使用execute方法执行HTTP请求。

现在我们已经大致了解代码了,清楚漏洞触发点了,下面追踪一下参数传入的过程。

1、通过 HttpGet 传入了 url 参数。

2、追踪发现String url中从machine.getIp()machine.getPort()获取了 IP 地址和端口号。

3、接着判断了machine参数是否活着,是否健康。

4、而machine是从 for-each 循环中的machines获取值后将值赋予给machine

Alibaba Sentinel的SSRF

5、继续追踪machines,发现在第 182 行处从appInfo.getMachines()处获取值,然后中间判断了一下machines是否为空。

Alibaba Sentinel的SSRF

6、进入appInfo.getMachines()方法,在这段代码中getMachinesreturn了 machines,从注释翻译得到,这里就是获取当前机器,而变量machines使用了ConcurrentHashMap.newKeySet()方法来创建一个线程安全的 Set 集合,其中machines值是由addMachine方法添加进去的,ConcurrentHashMap的读取操作不会被写入操作所阻塞,这意味这在添加机器信息的同时,其他线程可以安全的读取machines中的信息,因此,在别的代码中可以安全地使用getMachines()获取添加地机器信息,如下图所示:

Alibaba Sentinel的SSRFAlibaba Sentinel的SSRF

这里做了一个移除操作,又返回做了一个添加操作。

7、下面就是追踪谁调用了addMachine方法,按住 Ctrl+鼠标左键,可以看到调用关系,SimpleMachineDiscovery类中的重写了addMachine()方法,如下图所示:

Alibaba Sentinel的SSRF
Alibaba Sentinel的SSRF

8、继续追踪addMachine()方法,查看调用关系,发现有两处调用,一处是MachineRegistryController,另一处是AppManagement,首先我们需要查看MachineRegistryController接口层,去寻找接口。

Alibaba Sentinel的SSRF

9、进入 Controller 层,其主要作用是,获取请求中的参数,并进行相应的处理和判断,最终将机器信息添加到应用管理中,并返回注册的结果。

Alibaba Sentinel的SSRF

10、下面通过 42 行道 76 行,通过代码可以得出接口地址为:/registry/machine,得到传入参数有 app,appType,v,hostname,ip,port,并对传入的 app,ip 和 port 参数进行了判断是否为 null 的操作。

Alibaba Sentinel的SSRF

11、继续分析,简单的说就是将从请求中获得的数据,分别设置成machineInfo的属性值,最后调用appManagement.addMachine(machineInfo);方法添加注册机机器信息。

Alibaba Sentinel的SSRF

至此,整个流程我们追踪完了,现在总结下大致流程就是,参数从MachineRegistryController传进来,其中涉及 IP 和 port,通过 appManagement.addMachine(machineInfo)方法添加机器信息,最终在 MetricFetcher 中使用了 start() 方法定时执行任务,其中有个任务是调用 fetchOnce 方法执行HTTP GET 请求。

12、接着构造 url:http://127.0.0.1:8080/registry/machine?app=0&ip=127.0.0.1&port=8000

Alibaba Sentinel的SSRF

python3 开启 http 服务:python -m http.server,收到回显。

Alibaba Sentinel的SSRF

原文始发于微信公众号(赤弋安全团队):Alibaba Sentinel的SSRF

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年4月18日15:16:00
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Alibaba Sentinel的SSRFhttps://cn-sec.com/archives/3974547.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息