SpringBoot未授权访问漏洞实战:从探测到敏感信息提取

张开发
2026/6/10 10:18:10 15 分钟阅读
SpringBoot未授权访问漏洞实战:从探测到敏感信息提取
1. SpringBoot未授权访问漏洞初探第一次遇到SpringBoot未授权访问漏洞时我正帮朋友的公司做安全测试。当时随手输入了一个/actuator/env路径没想到直接返回了数据库连接字符串和Redis密码那种感觉就像在沙滩上捡到了保险箱钥匙。SpringBoot的Actuator模块本意是提供应用监控功能但配置不当就会变成黑客的自助信息台。这个漏洞的核心在于Actuator端点没有做权限控制。想象一下你家装了智能门锁但所有功能键都暴露在门外谁都能按。常见的危险端点包括/env环境变量、/heapdump内存快照、/trace请求记录等这些地方往往藏着数据库密码、API密钥、加密盐值等敏感信息。去年某电商平台就因此泄露了千万级用户数据。攻击者通过/actuator/heapdump下载内存镜像从中提取出了支付系统的加密密钥。这种漏洞利用成本极低不需要任何专业工具用浏览器就能完成初步探测。2. 漏洞探测实战指南2.1 手工探测技巧我习惯先用Burp Suite抓包观察响应特征。正常的SpringBoot应用会返回类似{_links:{self:{href:http://example/actuator}}}的JSON数据。如果直接访问/actuator返回404可以尝试这些经典路径组合/actuator/env/actuator/health/actuator/metrics/actuator/beans有个小技巧在Chrome地址栏输入chrome://net-export/开启网络日志记录然后用cat命令过滤包含actuator的请求cat chrome-net-export-log.json | grep -i actuator2.2 自动化扫描方案对于批量检测我推荐结合nmap和自定义脚本。先用nmap识别SpringBoot特征nmap -sV --scripthttp-title target然后使用这个Python脚本快速检测敏感端点import requests endpoints [env,heapdump,info,mappings] for ep in endpoints: resp requests.get(fhttp://target/actuator/{ep}) if resp.status_code 200: print(f[!] Found vulnerable endpoint: /actuator/{ep})3. 敏感信息提取全解析3.1 环境变量泄露利用/actuator/env端点就像应用的体检报告。有次我在其中发现了这样的字段spring.datasource.password: DBPassw0rd!123, aliyun.accessKeySecret: LTAI5t******实战中要注意这些关键字段包含password、secret、key的配置项云服务商AWS/Aliyun的凭证邮件服务器SMTP配置加密相关的salt、iv参数3.2 heapdump文件深度利用下载heapdump文件后先用JDK自带的jhat分析jhat -port 9999 heapdump.hprof但更高效的是使用heapdump_tool工具。最近遇到个案例内存中提取出了加密的JWT密钥java -jar heapdump_tool.jar heapdump.hprof | grep -E password|key|secret工具运行时会扫描这些关键区域String常量池中的敏感字段线程栈中的临时凭证缓存中的用户会话信息4. 进阶利用与防御方案4.1 组合攻击路径把获取的数据库密码在/actuator/hystrix.stream测试连接有时能发现新的漏洞链。有次通过这种方式进入了内网Kubernetes集群从/env获取Redis密码通过Redis未授权访问写入SSH公钥横向移动到Jenkins服务器4.2 企业级防护建议给运维团队的安全配置清单在application.properties中添加management.endpoints.web.exposure.includehealth,info management.endpoint.health.show-detailsnever使用Spring Security配置端点权限Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http.requestMatcher(EndpointRequest.toAnyEndpoint()) .authorizeRequests(requests - requests.anyRequest().hasRole(ADMIN)); return http.build(); }最近帮某金融客户做加固时发现他们自定义了Actuator路径management.endpoints.web.base-path/internal-monitor这种隐蔽化处理能有效减少自动化扫描的命中率。

更多文章