在 spring-boot-actuator-logview 0.2.13 之前,该securityCheck()
方法存在于 中LogViewEndpoint
,但该securityCheck()
方法只过滤..
infileName
,忽略了 的安全检查basePath
,因此攻击者可以构建有效载荷,逃避 check inbasePath
。
启动SpringBoot项目的tomcat服务器,如果页面是这样,说明SpringBoot Actutor Logview运行良好。
securityCheck()
在PoC发送HTTP请求的同时设置break piont,http://localhost:8887/manage/log/view?filename=/etc/passwd&base=../../../../../
进入截图如下
首先进入 lggingPath()
然后进入streamContent
,
这里可以看到spring.log/../../../../../
文件夹,/etc/passwd
就是我们要读取的文件。
下一步进入toFile()
方法,文件夹spring.log/../../../../../
和文件/etc/passwd
将被连接为最终路径,不再进行保密检查。
因此,您可以检索文件的内容 /etc/passwd
概念证明
http://localhost:8887/manage/log/view?filename=/etc/passwd&base=../../../../../
从 spring-boot-actuator-logview 0.2.13 开始,basePath
有严格的安全检查,不再允许路径遍历。
参考
https://github.com/lukashinsch/spring-boot-actuator-logview/commit/760acbb939a8d1f7d1a7dfcd51ca848eea04e772