首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【T00ls十年庆】Spring视图注入

点击T00ls关注 查看更多

首先恭喜T00LS十周年:)

背景

在一次对某客户的检测过程中,发现了一个由Spring应用开发程序员错误书写代码导致的安全问题。过后对该漏洞进行相应的研究,了解此漏洞背景知识是要先了解基础的MVC开发模式。

具体相关依赖知识在此就不进行赘述。

1. Spring MVC的报错页面

在对客户网站的参数进行常规异常输入时,遇见了一个非常让人困惑的HTTP 500错误页面。 为什么一个参数能导致/Spring提供View的功能错误?

2.Debug回溯

以下为Exception回溯内容:

于是下载了Spring的源代码进行分析,此串字符在Spring中只有3至4次出现的地方,所以较好定位报错地点。

而且报错页面没有被关闭,所以通过上图也能直接找到引发错误的原因为以下代码行。

render()函数源代码:

最终调用到的就是render函数。

先需要了解一下Spring MVC的整个调用流程。

在render()函数中,最终会追踪到函数createView()。

createView()函数原型:

可以看到Spring对两种前缀(forward:与redirect)进行了特殊处理。

根据视图名到指定的位置获取对应的模板文件

根据视图名跳转

在处理时会再调用一次InternalResourceView,而InternalResourceView是Spring中用来加载Jar包中内部资源用的,所以可以用来做Jar包内的任意文件读取。

不过以上InternalResourceView受配置影响:

例:

如果此时调用InternalResourceView实际上会在前面加上前缀,所以在配置suffix的情况下,可能就不能读取任意Jar包内的文件了。

3、危 害

所以如上所述的这些东西到底能造成什么危害呢?

初步想法为:

写了一个本地测试有漏洞的代码Demo验证以上想法。

(1) 权限认证Bypass [成功]

假设采用了装饰器(Decorator)来进行敏感功能的统一权限认证,直接使用view的是能够直接绕过权限认证装饰器,对敏感功能进行直接访问。

(2) 文件读取 [成功]

测试URL:http://127.0.0.1:8080/login?username=admin&password=111&view=forward:/database.properties

(3) HTTP Header Injection [失败]

由于Spring对传入程序的CRLF进行了处理。将其转化为了空格,所以该漏洞没有成功实现。

4、限 制

该漏洞有以下两点限制

无法读取Jar外的文件

如果加了suffix可能,无法读取想要的文件

对于第1点限制,有一个未经验证的想法。是否能组合CVE-2018-1271在Windows环境下对目录外的文件进行读取呢?但是由于手头边Windows环境还没有搭建好,可能需要过段时间才能进行测试:p

5、Exploit!

References

https://o2platform.files.wordpress.com/2011/07/ounce_springframework_vulnerabilities.pdf

https://danielmiessler.com/study/mvc/

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180920B1TLQ000?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券