文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Web开发框架安全杂谈

Web开发框架安全杂谈

时间:2011-03-24  来源:wofeiwo

EMail: wofeiwo#80sec.com
Site: http://www.80sec.com
Date: 2011-03-14
From: http://www.80sec.com/

[ 目录 ]
0×00 起
0×01 承
0×02 转
0×03 合

 

0×00起

最近框架漏洞频发,struts任意代码执行、Django csrf token防御绕过、Cakephp代码执行等等各大语言编程框架都相继暴出高危漏洞,这说明对于编程框架的安全问题已经逐渐走入安全工作者的视线。
Web开发框架就相当于web应用程序的操作系统,他决定了一个应用程序的模型结构和编程风格。框架上出了漏洞,就如同当年一个rpc远程EXP就走遍全世界windows的时代。

然而挖掘深层原因,从应用的模型和架构上考虑问题,其实这些框架漏洞都不只是一种偶然,而是一种必然。正是因为框架的模型结构,正因为他们的这种编程风格,才极大的增加了漏洞产生的可能性。

 

0×01承

现代编程框架的几个大特点:

1、将程序代码分为不同层次,业务开发、前端开发、数据库开发人员各司其职,框架根据需要组装代码、调度执行
2、统一化自动化逻辑处理
3、常见功能的代码库封装并高度重用
4、脚手架功能,常见代码组件自动组装生成。如默认用户系统、默认后台。

然而就是以上几点广受好评的功能导致了安全薄弱点的产生。

1、代码调度
让我们来先回顾一下WEB应用框架所最常见的MVC模型。

用户发送一个HTTP请求过来,框架的入口点(一般是route,路由)分析用户请求的url。然后依照url中蕴含的信息分析出用户所要访问的controller、action,从而分发给相应的controller文件中的action函数,执行之;随后controller再将model中的数据结合用户输入数据依照view层中的代码逻辑填充模板,最后view、controller执行完毕,返回用户最后的HTML。
整个生命周期是这样的:

用户请求url->route分发->controller接管处理用户输入及业务逻辑->view层代码执行->controller返回展现结果

从上面的流程发现了什么?
MVC模型就是一个将程序员分散在M、C、V中的代码寻找并整合在一起执行的过程。那这必然就要牵涉到一个代码调度执行的问题。这里route就是一个非常明显的例子。一个框架这么多代码文件,route每一次调用controller,都需要根据用户输入的url进行匹配并执行用户指定的函数。这里就是一个薄弱点,一个必然绕不过去的问题。

对应到现实的例子,一个非常明显的例子就是:struts2框架的动态方法调用(DMI)
当你访问www.test.com/a!test.action时,struts会根据你的url帮你映射到名为a的controller中名为test的Action方法。而通过修改test的值,我们可以访问a这个类中的所有方法。如果恰好这个方法中含有敏感的信息,攻击者就获得了一切。结合其他技巧,攻击者能够做到的更多。但这就是框架的功能,框架总是要依靠URL中的内容去匹配执行程序代码。

那么对于PHP的框架呢?仔细想一下,如果PHP需要做分散在不同文件中的代码调度执行,唯一能够实现的方式就是使用require/include函数包含文件。文件名来源于哪里?来源于用户输入的URL。实际上目前市面上的大部分PHP框架也都是这么实现的,Yii,FleaPHP等等。如果对用户的输入没有做好验证,就很容易导致一个本地文件包含漏洞。笔者曾经就在某不知名框架中发现过这样的漏洞,在不涉及应用程序逻辑的情况下,直接获取了系统权限。

标签分类:

相关阅读 更多 +
排行榜 更多 +
2D反恐精英

2D反恐精英

飞行射击 下载
侏罗纪真实狩猎安卓版

侏罗纪真实狩猎安卓版

飞行射击 下载
直升机狙击手

直升机狙击手

飞行射击 下载