SpringBootActuator从未授权访问到getshell
前⾔
部门⼤佬在某src上挖到了这个漏洞,是⼀个⽐较⽼的洞了,我觉得有点意思,就动⼿在本地搭了个环境测试⼀下。
Actuator 是 springboot 提供的⽤来对应⽤系统进⾏⾃省和监控的功能模块,借助于 Actuator 开发者可以很⽅便地对应⽤系统某些监控指标进⾏查看、统计等。在 Actuator 启⽤的情况下,如果没有做好相关权限控制,⾮法⽤户可通过访问默认的执⾏器端点(endpoints)来获取应⽤系统中的监控信息,从⽽导致信息泄露甚⾄服务器被接管的事件发⽣。
如上所⽰,actuator 是 springboot 提供的⽤来对应⽤系统进⾏⾃省和监控的功能模块。其提供的执⾏器端点分为两类:原⽣端点和⽤户⾃定义扩展端点,原⽣端点主要有:
利⽤思路
① 利⽤env加refresh进⾏getshell
② 利⽤mappings,寻未授权接⼝
③利⽤trace,获取认证信息(Cookie、tooken、Session),利⽤认证信息访问接⼝。
④ env有可能泄露的数据库账号密码(mangodb),当然得开放外⽹,可能性较⼩。
⑤ ⽼外说可以执⾏sql语句,⽬前没搞明⽩
漏洞发现
通常识别当前 web 应⽤使⽤的框架为 springboot 框架。主要有两个⽅法判断:
① 通过 web 应⽤程序⽹页标签的图标(favicon.ico);如果 web 应⽤开发者没有修改 springboot web 应⽤的默认图标,那么进⼊应⽤⾸页后可以看到如下默认的绿⾊⼩图标:
②通过 springboot 框架默认报错页⾯;如果 web 应⽤开发者没有修改 springboot web 应⽤的默认 4xx、5xx 报错页⾯,那么当 web 应⽤程序出现 4xx、5xx 错误时,会报错如下(此处仅以 404 报错页
⾯为例):springboot架构图
访问⼀个随便构造的路径,⽐如:http:/172.26.2.24:8090/index,出现如下报错页⾯说明web⽹站使⽤了springboot框架(在实际中遇到的⼤多数都是此类情况)。
综合以上两个途径来判断当前 web 应⽤是否是 springboot 框架,就是通过访问不同的⽬录,看是否有⼩绿叶图标,然后就是想办法在不同⽬录下触发应⽤程序的 4xx 或 5xx 错误,看是否有 Whitelabel Error Page 报错。
漏洞利⽤
访问/trace端点获取基本的 HTTP 请求跟踪信息(时间戳、HTTP 头等),如果存在登录⽤户的操作请求,可以伪造cookie进⾏登录。
访问/env端点获取全部环境属性,由于 actuator 会监控站点 mysql、mangodb 之类的数据库服务,所以通过监控信息有时可以mysql、mangodb 数据库信息,如果数据库正好开放在公⽹,那么造成的危害是巨⼤的,
/env端点配置不当造成RCE,前置条件:Eureka-Client <1.8.7(多见于Spring Cloud Netflix)⽐如测试前台json报错泄露包名就是使⽤netflix
需要以下两个包
spring-boot-starter-actuator(/refresh刷新配置需要)
spring-cloud-starter-netflix-eureka-client(功能依赖)
利⽤python3启动脚本,需要注意两个地⽅,⼀个为接收shell的ip和端⼝,另⼀个为我们脚本启动的端⼝,
Nc监听⼀个端⼝⽤以接收反弹shell,
写⼊配置,访问/env端点,抓包将get请求改为post请求,post内容为
(该ip为脚本启动的机器的ip)
然后再访问/refresh,抓包将get请求更改为post请求,post数据随意,
然后在我们nc的窗⼝可以看到成功反弹了⼀个shell回来。
漏洞修复
作为⼀名安全dog,不能只挖不修,在项⽬的l⽂件下引⼊spring-boot-starter-security依赖
然后在application.properties中开启security功能,配置访问账号密码,重启应⽤即可弹出。
禁⽤接⼝,则可设置如下(如禁⽤env接⼝):
问题
⽼外说可以执⾏sql语句发现执⾏不了,可能⽅法没⽤对,截了个他的图,希望有执⾏成功的⼤佬分享下。
实际环境中,发现很多⽆refresh ,导致⽆法执⾏命令⽬前还没突破
参考

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。