今天的文章主要跟大家聊一下关于springboot环境下的渗透。Springboot现如今可以说是java开发的一个入门框架,深受各个公司亲赖,现有java站点springboot还是有一定比例的,所以说还是有必要对springboot渗透有一定了解。
对于springboot框架,常见的攻击思路主要是监控端点以及swagger-ui接口的一些利用,已有的文章算是比较多了,这里给一个GitHub的地址:https://github.com/LandGrey/SpringBootVulExploit,其中对于漏洞的介绍算是比较详细,所以在这里主要介绍一些经验之谈以及一些新东西。
对于springboot框架识别,大部分师傅可能已经了解,这里稍微提一下,可以根据图中的两个特征或者cookie中的springboot标识等确定目标站点是否为springboot。
springboot大版本可以分为1.x和2.x,通过暴露的监控端点可以区分其版本。1.x版本在监控端点未授权的情况下,默认是监控端点是全部打开的,而在2.x版本,可能是官方为了安全着想,默认仅开启了几个无伤大雅的端点。
下图为Springboot 1.x启动时开启的监控端点
下图为Springboot 2.x启动时开启的监控端点
只有当Endpoint. Shutdown. enabled属性设置为true时才会暴露出其他敏感端点
env端点是在渗透时候比较重要的一个端点,一些历史rce漏洞基本都需要依赖该端点post数据给服务器,并且改端点还会暴露系统一些比较敏感的信息。
该端点对敏感信息会进行脱敏处理,对于获取脱敏敏感信息,主要分为远程请求vps和heapdump内存中查找。我建议从内存中查找,这样可以避免vps地址暴露。其次敏感信息不局限于数据库密码等,还有可能存在邮箱账号,企业微信apikey,微信小程序apikey等,这些都是在项目中确切获取到过的。
如下为某企业微信apikey,微信有公开的api文档,通过这些可以获取目标大量人员信息,甚至是加入到目标的企业微信中。
如下为某小程序微信apikey,使用官方api查看该小程序存在大量用户,拥有该小程序的某些控制权限危害还是比较大的。
对于获取到的数据库连接信息都是内网的,不要认为没有用处,密码和端口还是有一定作用,对于非随机的密码,可以在目标所属ip段进行碰撞或者组合密码规则获取数据库权限也是有可能的,在《记一次hw打点》文章中也确实获取了外网redis的权限。微信apikey、邮箱账号等权限都是重要信息,可以更加贴近目标,对于接下来的攻击做铺垫。
历史rce在github项目中已经提及七七八八,各位师傅可以下载项目中的靶场环境进行复现,需要注意的一点就是1.x和2.x中提交数据时的Content-Type分别为application/x-www-form-urlencoded和application/json,否则会提交数据失败。
httptrace端点可以获取当前web访问的请求信息,可能找到未销毁的管理员cookie信息,在这里建议判断到一个web为springboot开发时候不要扫描目录,别问我是怎么知道的(/(ㄒoㄒ)/~~,因为这个端点的记录是有上限的,有一次扫描目录后发现所有的记录都是我扫描的记录,可能把有些有用的东西给覆盖了)。
gateway端点的利用主要是ssrf,现有文章可能比较少,这边做一个复现。当gateway端点存在未授权时,直接访问gateway是一个404的状态。
访问actuator/gateway/routes路由,可以看到系统的所有口接口信息
我们可以为该接口添加路由,比如添加个index路由,将路由地址设置为百度,状态回显201则路由创建成功。
访问/actuator/gateway/refresh刷新配置
刷新成功后我们可以再次请求actuator/gateway/routes看到index路由被添加
访问index路由
当然我们也可以删除掉路由,delete /actuator/gateway/routes/index接口
再次进行刷新配置
查看路由,发现index路由已经不在了
对于gateway端点的利用,很多师傅可能脑中会有很多自己的攻击思路,比如钓鱼,如果一个目标域名的站点存在漏洞,那么该钓鱼的可信程度会大大增加。ssrf基于伪协议的利用暂未实现成功。
关于springboot的总结暂时就是这些,仅是个人的浅显经验,如有其他思路或者文章内有纰漏的地方希望各位师傅可以在公众号下方留言沟通。
如有侵权,请联系删除
推荐阅读