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


一般如果是审计基于框架的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这类框架的原因是 , 他们的路由很好摸清 , 如果在哪个方法中找到了漏洞 , 我就能直接根据路由访问这个方法 , 直接利用 。
了解路由也是为了能快速定位漏洞位置 , 要不然 , 你通过审计源码找到的漏洞 , 却不知道在浏览器中用什么样的url去访问 , 这不是件很尴尬的事儿吗?
比如Thinkphp的路由有三种方式5.1. 普通模式关闭路由 , 完全使用默认的pathinfo方式URL:
‘url_route_on’ => false
路由关闭后 , 不会解析任何路由规则 , 采用默认的PATH_INFO 模式访问URL:
module/controller/action/param/value/…
module就是使用的应用 。
controller是控制器 , 跟文件名一致 。
action是方法 , 某控制器下的方法 。
param是需要的变量
value是参数
但仍然可以通过Action参数绑定、空控制器和空操作等特性实现URL地址的简化
5.2. 混合模式开启路由 , 并使用路由+默认PATH_INFO方式的混合:
‘url_route_on’ => true
该方式下面 , 只需要对需要定义路由规则的访问地址定义路由规则 , 其它的仍然按照默认的PATH_INFO模式访问URL 。
5.3. 强制模式开启路由 , 并设置必须定义路由才能访问:
‘url_route_on’ => true
‘url_route_must’=> true

这种方式下面必须严格给每一个访问地址定义路由规则 , 否则将抛出异常 。
首页的路由规则是 /
其实 , 在实际审计过程中 , 我一般会先去黑盒访问一遍功能点 , 分析后差不多也能知道路由怎样构成 , 如果有的地方不清楚 , 可以去源码中找路由文件
一般带有route关键词的文件 , 或文件夹与路由有关 。
分析好路径 , 之后就可以真正的开始审计 。
00×6 审计在人工审计之前 , 可以使用我之前提到的xcheck、Fotify、codeql等自动化审计工具先审计一遍 , 根据报告 , 验证一遍 , 再往下去根据下面的步骤审一遍 , 一个项目 , 也就能审个七七八八了 , 深层次的利用也就得看自身的实力与经验了 。