游客发表
别跟我扯什么理论,直接看结果。环境我拿一个真实的信息泄露Spring Boot 2.5.4应用做测试,就发了三个HTTP请求,漏洞数据库密码、集成Redis连接串、环境甚至AWS密钥对,信息泄露全躺平在响应里。漏洞这不是集成危言耸听,是环境/actuator/env端点没做权限控制时,默认就有的信息泄露"福利"。
先说最简单的漏洞POC。目标开了Actuator,集成且没配Spring Security。环境那你直接访问:
GET /actuator/env
响应JSON里,信息泄露propertySources数组会列出所有环境变量。我测试的那个应用,spring.datasource.password就明晃晃地躺在application.properties这个source里。更狠的是,它还会把操作系统环境变量也带出来,比如JAVA_HOME、PATH,甚至服务器上自定义的MY_SECRET_TOKEN。
但光看还不够,得会"提权"。Spring Boot有个特性——如果你知道配置项的key,可以用POST请求直接改它。试试这个:
POST /actuator/env
Body: { "name":"spring.datasource.password","value":"Pwned!"}
如果返回201,恭喜,你在运行时把数据库密码改了。别急着高兴,这只是把内存里的值改了,重启就失效。但配合另一个端点/actuator/refresh,很多配置是支持热更新的。我试过改logging.level.root为DEBUG,瞬间日志暴涨,间接泄露业务数据流。
真正的高危链是/actuator/heapdump。这玩意儿直接导出一个JVM堆转储文件,大小几十到几百MB。用Eclipse MAT或者VisualVM打开,搜关键词password,或者直接找char[]类型的字段。我曾在某甲方系统里,从堆里扒出明文支付回调密钥——那个应用压根没做脱敏,密钥直接放在一个DTO里。注意,heapdump不需要任何POST操作,GET请求就完事,而且很多WAF不会拦它,因为后缀是.bin或者无后缀,不像.sql那样敏感。
还有个偏门但实用的点:/actuator/mappings。它列出所有URL路径到处理方法的映射。攻击者拿到这个,能精准找到未授权接口。比如我见过一个内部管理后台,路径是/admin/resetUserPassword,但Spring Security只拦了/admin/**,结果这个接口实际映射到/internal/user/pwd/reset,mappings一泄露,绕过就变得极其简单。
防护手段其实老生常谈,但执行率低得吓人。第一,Actuator端点只暴露health和info,其他全禁。第二,如果必须开env,用Spring Security做IP白名单。第三,别把management.endpoints.web.exposure.include=*写进生产配置,那等于给攻击者递刀子。我见过太多团队图省事,把开发环境的配置直接复制到生产,结果heapdump裸奔了半年没人发现。
最后提醒一句,POC测试时别在未授权系统上乱搞,这玩意儿是双刃剑。你拿自己搭的靶场练,怎么玩都行;但对着线上系统发POST改配置,那可是实打实的破坏行为。技术无罪,但手要干净。
友情链接