PHP|代码审计思路之PHP代码审计( 二 )


4.1. ThinkPHP框架ThinkPHP这里需要区分TP3和TP5的差别 , 首先我们先来看看TP3的目录结构 。 (现在基于TP3的系统都很少了 。。。 了解一下就好

其中 , Application和Public目录下面都是空的 。
Application是存放项目中的重要的一些函数集 , Public是公共文件夹 , 供用户访问的 , 重要的函数集千万不能放在此文件夹下 。
Application目录默认是空的 , 但是第一次访问入口文件会自动生成 , 参考后面的入口文件部分 。 其中框架目录ThinkPHP的结构如下:

【PHP|代码审计思路之PHP代码审计】另外TP5和TP3实际上差距有点大 , 先看看TP5下载下来的默认文件结构 。 其中在public文件下有个route.php文件 , 它的作用是用于php自带webserver支持 , 可用于快速测试 , 启动命令:php -S localhost:8888 router.php 。 而它的相关网站功能目录也需要从根目录下的index.php入手 。
以下为TP5的目录结构 。
一般如果是审计基于框架的cms , 我不会去看框架系统目录 , 就是上面的ThinkPHP文件夹下的东西 , 第三方类库vendor也不会去先看 , 除非是在审计过程中流向了这些文件中 , 才会大概看一看 , 而重点在Application文件夹下做文章 。
既然是MVC框架的 , 那么我们真正关心的是其中的控制器(C) , 因为功能点大部分都在C上 , 我们能找到的大部分漏洞也都在C上
下图为基于TP6的ThinkAdmin项目目录

app(也就是application) , 下面有admin、data、index、wechat几个文件夹 , 每个文件夹代表了一个应用 , 比如admin一般来说都是后台的服务 , wechat为微信应用服务 , 每个应用下面都有Controller(控制器)、Module(模型)、View(视图 , 一般是html文件)
现在目录很明确 , 目标就很明确 , 拿到这样基于框架的cms , 就应该知道 , 该重点审计的地方在哪里 。
4.2. Laravel框架
目录怎么变 , MVC架构的重点还是在Controllers里
4.3. 如果没用框架没用框架的话 , 先搞明白目录结构 , 一般来说

审计过程中需要关注几个点:(在我们后面开始审计的过程中 , 自己要注意这些地方 , 经常想一想)
1)函数集文件 , 通常命名包含function或者common等关键字 , 这些文件里面是一些公共的函数 , 提供其他文件统一调用 , 所以大多数文件都会在文件头部包含到其他文件 。 寻找这些文件一个非常好用的技巧就是去打开index.php或者一些功能性文件 , 在头部一般都能找到 。
2)配置文件 , 通常命名中包括config关键字 , 配置文件包括web程序运行必须的功能性配置选项以及数据库等配置信息 。 从这个文件中可以了解程序的小部分功能 , 另外看这个文件的时候注意观察配置文件中参数值是单引号还是用双引号括起来 , 如果是双引号可能就存在代码执行的问题了 。
3)安全过滤文件 , 安全过滤文件对代码审计至关重要 , 这关系到我们挖掘到的可以点能否直接利用 , 通常命名中带有filter、safe、check等关键字 , 这类文件主要是对参数进行过滤 , 大多数的应用其实会在参数的输入做一下addslashes()函数的过滤 。
4)index文件 , index是一个程序的入口 , 所以通常我们只要读一读index文件就可以大致了解整个程序的架构、运行的流程、包含到的文件 , 其中核心的文件有哪些 。 而不同目录的index文件也有不同的实现方式 , 建议最好将几个核心目录的index文件都通读一遍 。
00×5 了解路由我很喜欢Thinkphp这类框架的原因是 , 他们的路由很好摸清 , 如果在哪个方法中找到了漏洞 , 我就能直接根据路由访问这个方法 , 直接利用 。