当前位置:首页 >> 网络通讯 >> 网络安全 >> 内容

从webshell浅析spring mvc的安全性

时间:2013/4/19 12:10:00 作者:平凡之路 来源:xuhantao.com 浏览:

 

by thanks

试想你是黑客,而我们使用spring mvc+velocity搭建系统,即使大门敞开允许上传jsp,你能拿shell?

 

我们知道,webshell能够运行的条件无非于1.能够解析 2.能够执行并完成一些功能性的事情,比如读取文件

现在来看web mvc,mvc的精髓在于“分权”(这个词是我乱编的),www.xuhantao.com,我想表达的意思是:他能将数据访问逻辑、流程控制逻辑、业务逻辑、视图显示逻辑全部剥离开,这对开发者来说,好处在于使得系统更加清晰、便于维护;而以安全的角度来看,使用mvc也大大提高安全性,即在view层你没有“权利”做更多事情。我们就拿jsp webshell来举例子。

 

先说jsp为什么能写出webshell?

jsp与其他模板技术有一个重大的区别就是他最终是编译为servlet来运行的。简单来说,你可以理解为,jsp就是一个servlet。这个特性使得jsp拥有比其他模板技术更大的能量。只要你愿意,我们可以完全可以在jsp中直接写java代码、执行任何想要的东西,不用配置web.xml,jsp直接通过链接完成servlet所有的事情,这种“超频”这使得jsp基本跟php、asp无异了,java严谨的mvc“分权”完全被破坏,这时jsp webshell自然应运而生。

 

spring mvc的出现很好的解决了这个问题,我们通过分权重新让渲染层的东西继续做渲染的事情,于是开发乐了,安全工程师也乐了

一个完整的交互过程是这样的

1.用户请求

2.web容器匹配映射,如抓出*.htm的送到第三步

3.匹配的映射送到对应的controller里做处理

4.视图解析(包括获取模型,获取vm\jsp\xls这种模板文件),一般框架会统一配置viewResolver,如配置一个bean使用vm做渲染

5.输出

 

来看这个过程安全在哪里

1.我们成功上传了一个jsp webshell,访问这个地址(假设拿到这个地址,只是假设),配置里没有*.jsp,第2步找不到映射,失败

2.我们成功上传了一个jsp webshell,访问这个地址,配置里有*.jsp,第3步找不到controller,失败

3.我们成功上传了一个jsp webshell,访问这个地址,配置里有*.jsp,第3步有对应controller,第4步viewResolver里没有配jsp,失败

 

能实现以上3步骤的可能性基本没有,因为你要能改我配置、修改java文件,那你根本不需要webshell了:)

 

此时你可能会想,那我不一定要用jsp写shell啊,vm是不是也能写?

首先vm相比jsp弱小很多,可以说,他从出生就是一个纯粹的渲染层的东西。

kxlzx大牛提出过可以使用#set ($exec = 

"kxlzx")$exec.class.forName("java.lang.Runtime").getRuntime().exec("calc")这类语句来执行系统级命令,

,但是同样的,他的解析依靠controller,你没有java文件的支持,就不会解析这个vm,就只能是以文本形式输出这句话,这一点我做过测试。

 

在测试中我发现,直接访问不经过解析的vm文件有一个特性

Chrome下

 

IE下



 

本人水平有限,如果讲得不对,欢迎讨论指正

,涛涛电脑知识

相关文章
  • 没有相关文章
  • 徐汉涛(www.xuhantao.com) © 2024 版权所有 All Rights Reserved.
  • 部分内容来自网络,如有侵权请联系站长尽快处理 站长QQ:965898558(广告及站内业务受理) 网站备案号:蒙ICP备15000590号-1