程序员

注册

 

发新话题 回复该主题

PHP代码审计基础思维导图审计代码 [复制链接]

1#
复方白芷酊是不是治白癜风的药物 http://pf.39.net/bdfyy/bdfyc/140813/4447663.html

0x00Preface

大多数漏洞都是由[可控变量]+[特定功能]产生的(对于用户可传入的变量缺少过滤或过滤不严)。比如SQL注入,我们通过闭合、注释等方式插入payload以获取敏感数据。比如文件上传,我们写入一句话木马以获得web权限。这样的例子数不胜数,同时也给我们提供了一个思路,在我们进行代码审计时,可以根据特定功能,查看是否存在可控变量,可控变量是否存在过滤,过滤是否存在绕过,从而检验是否存在漏洞。

渗透测试分为黑盒测试和白盒测试,黑盒测试仅给出门户网站,白盒测试不仅会给出网站,还会给出项目源码。黑盒测试时,我们只能正常的访问该网站,通常只能从网站的业务逻辑出发,对网站上存在的功能点逐个抓包,然后验证其是否存在漏洞。当然,也可以判断网站是否采用了cms,搜索cms爆出过的安全漏洞,查看是否能够利用。白盒测试时,我们不仅能够正常访问该网站,还可以对网站进行代码审计。因此,我们既可以效仿黑盒测试,根据功能点,抓包查找到对应的代码进行分析(黑盒测试只能抓包测试,无法分析代码),也可以直接在项目源码中搜索select、_FILE、eval等关键字,对附近代码进行分析。

总的来说,黑盒测试更加贴近于黑客攻击时的情形,而白盒测试则更易发现安全问题。

0x01MVC框架

MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,它把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)。PHP中MVC模式也称WebMVC,是从上世纪70年代进化而来。

MVC的目的是实现一种动态的程序设计,便于后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能。除此之外,此模式通过对复杂度的简化,使程序结构更加直观。

MVC各部分的职能:

模型Model–管理大部分的业务逻辑和所有的数据库逻辑,模型提供了连接和操作数据库的抽象层。

控制器Controller-负责响应用户请求、准备数据,以及决定如何展示数据。

视图View–负责渲染数据,通过HTML方式呈现给用户。

一个典型的WebMVC流程:

Controller截获用户发出的请求

Controller调用Model完成状态的读写操作

Controller把数据传递给View

View渲染最终结果并呈献给用户

MVC框架的好处有:

1、允许更改视图层代码而不用重新编译模型和控制器代码;2、允许使用各种不同样式的视图来访问同一个服务器端的代码;3、使降低开发和维护用户接口的技术含量成为可能;4、使开发时间得到相当大的缩减等。

其实可以把MVC理解为一个规则,这么多网站,纷繁杂乱,如果大家都遵循这个规则,那么网站将变得更加容易管理和维护。此外,也可以把它理解为一个模板,增强了复用性,能够大量减少开发的工作量。同时,它将复杂的底层细节封装了起来(类与对象),使得网站的各个模块相对更加独立,不仅使得维护用户接口更加方便,而且使开发时间得到了相当大的缩减(开发人员集中精力于业务逻辑,界面程序员集中精力于表现形式)。

我们要探讨的是代码审计,与MVC框架又有什么关系呢?MVC框架有其特有的目录结构和路由规则,它与未使用该框架的网站不同,URL路径并不对应其代码文件所在位置。所以在白盒测试中,了解MVC框架有助于我们更加快速、准确地定位到网页功能点所对应的代码段,后面会有相关演示。

0x02ThinkPHP框架

Thinkphp框架就是MVC框架的一种,如果说MVC框架是类的话,Thinkphp框架就是其实例化后的对象。

ThinkPHP是一个免费开源的,快速、简单的面向对象的轻量级PHP开发框架,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。遵循Apache2开源许可协议发布,意味着你可以免费使用ThinkPHP,甚至允许把你基于ThinkPHP开发的应用开源或商业产品发布/销售。

Thinkphp教程资源:

分享 转发
TOP
发新话题 回复该主题