代码审计

小白的代码审计之路(一)

字号+ 作者:i春秋研习社 来源:转载 2017-03-09 14:06 我要评论( )

小白的 代码审计 之路 此文由猪八戒SRC,代码审计小鲜肉呆呆的骗子大婶倾情奉献~欢迎勾搭! 一、导语 从乙方转为做甲方后,安全将不再仅仅是利用工具、扫描等进行......

小白的代码审计之路



此文由猪八戒SRC,代码审计小鲜肉“呆呆的骗子大婶”倾情奉献~欢迎勾搭!






一、导语从乙方转为做甲方后,安全将不再仅仅是利用工具、扫描等进行黑盒测试了。还 涉及到白盒测试——对代码进行审计,作为小白的我虽然懂得一些PHP语法,但却并不了解框架,看着一大堆的目录,并不知道一个请求地址过来,是执行的哪个 文件中的哪一段代码。因此本文将带着大家一起来了解当我们访问一个页面时,框架是如何处理的,并执行的哪段代码。由此开启小白的代码审计之路。


二、MVC设计模式
在开始之前,我们需要先了解一下mvc设计模式的基本概念。

MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,通俗一点的理解就是把前端静态资源、数据库操作、业务逻辑代码分开的方式组织代码。其中:
Model(模型)一般用于放置对数据库进行存取等操作的代码
View(视图)一般用于放置静态资源如前端代码、css等
Controller(控制器)用于存放接受用户输入和业务逻辑处理的代码。


三、看框架入口文件本文将以ThinkPHP3.2框架为例来讲解,一个web项目文件如图1-1一样会存在很多的文件和文件夹。在原生PHP网站中,当我们访问一个url如http://127.0.0.1/aa/bb.php时,服务器执行的就是aa目录下的bb.php文件中的代码。但框架并不是如此。



图1-1

我们的每一次url请求都会先执行框架入口文件即index.php文件,它的主要作用主要有4点:1、定义框架路径、项目路径;2、定义框架运行模式;3、定义系统相关常量;4、载入框架类。框架入口文件(index.php)如图1-2:

图1-2

因此当我们在审计项目之前,应首先查看入口文件,查看框架运行模式(debug)是否开启,如果开启当程序出错时,将会 在页面返回详细的错误提示。其次是查看框架自动加载的函数或文件,有些程序员为了方便会把一些xss、sql注入过滤放在自动加载函数或文件里,这样就实 现了全局过滤,不用再每次获取参数时都进行一次安全过滤了。
在了解了上面两点之后,我们还需要查看他的应用目录配置,即define(APP_PATH,./Application/)配置。其实当我们一个请求过来时,我们执行的是此配置目录下的某一模块中的文件。Application目录结构如图1-3。

图1-3


四、配置文件
在了解了index.php的配置之后,我们就应该查看Application/Common目录下的 config.php文件。它是一个公共配置文件,主要会在此配置文件中写路由规则、数据库配置、模块配置等,如图1-4。在ThinkPHP框架中所有 配置文件的定义格式均采用返回PHP数组的方式。


图1-4

因此,当我们访问一个url地址为http://127.0.0.1/bb/Citystation/的时候其实执行的就是Application/Home/Controller下的bbController.class.php中的Controller方法。
还有一种就是当我们访问的是http://127.0.0.1/Admin/aa/Citystation/的 时候,其实是访问的Application/Admin/Controller下的aaController.class.php中的 Controller方法。有人会问了,为什么第一个没有加Home呢,那是在配置文件中,我们设置了默认的模块。框架的更多配置信息,可查看官方手册, 这里不多说啦~~~

五、框架访问控制
在知道了这些知识之后,我们就可以定位文件了,但还不一定能定位到某一段代码。如图1-5所示,当我们请求地址为http://127.0.0.1/bb/Citystation的时候,我们到底是执行的哪段代码呢?


图1-5

一般框架中可访问的方法都要求属性为public并且方法名要符合命名规范才能被浏览器访问到,在ThinkPHP中默 认的规则要求就是只要方法名为public就可以被访问。(如SlightPHP中不仅需要方法为public,还需要方法名前缀为page.具体可以参 考各框架说明)。这样我们就可以完美的定位文件和方法了。(框架小白的我真是开心O(∩_∩)O~~)

六、框架传参规则


在我们的日常测试中可能会遇到如下三种url请求类型:

http://127.0.0.1/?c=bb&a=Citystation&id=1
http://127.0.0.1/bb-Citystation-id-1
http://127.0.0.1/bb/Citystation/id/1
我们可以简单的理解为它们使用了不同的分隔符而已,第一二个参数都是告诉框架此次请求的是哪个文件中的哪个方法,而后面的参数就是我们的get传参了一个变量一个值.如本例中我们请求的是bb.page.php中的Citystation方法,get传递了一个id为1的值。




七、总结


1、当拿到一个框架开发的项目后,首先找入口文件,然后查看他的相应配置文件,看看它都加载了哪些东西,配置了哪些参数,是否有做全局安全过滤。
2、所有可以访问url页面逻辑,都会放在Controller目录里,除非遇到了搞怪的程序猿们。
3、如果找不到对应的文件,那一定是框架路由在作怪,那就去看看配置文件中的路由规则,一个应用目录下只有一个配置文件,每个应用目录下的模块也有一个配置文件。
    mvc框架中的这些概念都是万变不离其宗的,变的只是不同的名字,不同的调用方式。了解了这些基本概念后,我们就可以愉快的找到对应的代码进行审计了。但 这样还不能做到像大牛一样,从头到尾的全看代码来审计漏洞,因此在日常工作中,我们可以结合黑盒测试,每次发现有问题的点,就去看看有问题的代码都长什么 样。当有了一些灵感,能准确的看出代码哪里写的有问题后,在日常的测试中,就可以对每个地址,针对某一个功能抓一个包,看看请求的哪个文件,传递了哪些参 数,然后就可以直接审计代码是否有问题了。当你完全了解了业务逻辑和框架之后,就可以从头到尾只读代码来审计漏洞了。

八、本系列后续文章


1、框架超全局变量
2、代码审计之命令注入
3、代码审计之xss
4、代码审计之sql注入

本文来自: 蜗蜗侠's Blog-关注网络安全 http://blog.icxun.cn/hack/Code/594.html

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 代码审计——zcncms几处漏洞合集

    代码审计——zcncms几处漏洞合集

    2016-12-24 14:37

  • 铁人下载系统代码审计

    铁人下载系统代码审计

    2016-12-23 09:34

  • 实战讲解PHP代码审计入门

    实战讲解PHP代码审计入门

    2016-12-18 14:56

  • 如何用grep对PHP进行代码审计

    如何用grep对PHP进行代码审计

    2016-12-16 11:24

网友点评
暂时未开启评论功能~