PHP代码审计(三)——方法技巧
前期准备
源码,环境
网站目录结构
- 主目录
- 模块目录
- 插件目录
- 上传目录
- 模板目录
- 数据目录
- 配置目录
- 配置文件:一般类似config.php等文件。保存一些数据库相关信息、程序的一些信息。先看看数据库编码,如果是gbk则可能存在宽字节注入。如果变量的值用双引号、则可能存在双引号解析代码执行的问题。
- 公共函数文件
- 安全过滤文件
- Index入口文件:Index文件一般是整个程序的入口,详细读一下index文件可以知道程序的架构、运行流程、包含那些配置文件,包含哪些过滤文件以及包含那些安全过滤文件,了解程序的业务逻辑。
不过一般不会看框架系统目录、第三方类库vendor,当审计流向这些文件夹的时候才会看。MVC,一般漏洞出在C中,因此需要重点关注这部分。
有无框架
首先判断是否使用了框架,用了框架的可以帮助快速定位有用的函数集。目前主流的设计模式是MVC,模型 M + 视图 V + 控制器 C,基本上php的主流框架都使用了MVC设计模式,常见的开发框架如:Laravel,ThinkPHP,yii等。
ThinkPHP框架
目录结构:
thinkphp/
├─ application/ # 应用目录
│ ├─ common/ # 公共模块目录
│ ├─ module1/ # 模块1目录
│ │ ├─ controller/ # 控制器目录
│ │ ├─ model/ # 模型目录
│ │ └─ view/ # 视图目录
│ └─ module2/ # 模块2目录
│ ├─ controller/ # 控制器目录
│ ├─ model/ # 模型目录
│ └─ view/ # 视图目录
├─ config/ # 配置文件目录
├─ extend/ # 扩展类库目录
├─ public/ # WEB 部署目录(对外访问目录)
│ ├─ index.php # 入口文件
│ ├─ .htaccess # Apache 服务器配置文件(可选)
│ └─ router.php # 路由配置文件(可选)
├─ route/ # 路由定义目录(可选)
├─ think/ # ThinkPHP 框架核心文件目录
├─ vendor/ # Composer 类库目录
├─ .env # 环境配置文件(可选)
├─ .env.example # 环境配置示例文件(可选)
├─ composer.json # Composer 配置文件
├─ LICENSE.txt # 框架授权协议文件
├─ README.md # 框架 README 文件
└─ think # ThinkPHP 命令行入口文件
注意,TP3和TP5是有区别的。
主要区别和变化:
-
应用目录结构变化: 在 ThinkPHP 3 中,应用目录下是按照模块划分的,而在 ThinkPHP 5 中,直接将控制器、模型、视图等文件放在应用目录下,取消了模块目录的划分。
-
核心目录命名不同: ThinkPHP 3 中核心目录命名为 "Core",而 ThinkPHP 5 中则直接将核心文件放在框架根目录下。
-
配置文件目录: ThinkPHP 5 中将配置文件统一放在了 "config" 目录下,而在 ThinkPHP 3 中则是在应用目录下的 "Conf" 目录中。
-
Runtime 目录: ThinkPHP 3 中有一个 "Runtime" 目录用于存放运行时生成的缓存文件,而在 TP5 中这个目录默认是自动生成的,无需手动创建。现在TP3的系统很少了,了解一下即可。
图为基于TP6的项目目录
app下面有admin、data、index、wechat几个文件夹,每个文件夹代表了一个应用,比如admin一般来说都是后台的服务,wechat为微信应用服务,每个应用下面都有Controller(控制器)、Module(模型)、View(视图,一般是html文件)
Laravel框架
看输入
用户输入哪些被过滤,哪些无过滤,以及过滤方式是怎样的
敏感函数参数回溯
大多数漏洞产生的原因是由于函数的使用不当造成的。所以,根据敏感函数来逆向追踪参数的传递过程是比较有用的一种审计方法。
推荐工具:Seay源代码审计系统
主要是利用正则匹配一些高危函数、关键函数以及敏感关键字。
然后分析判断敏感函数的上下文,追踪参数源头。
尝试控制可控的参数变量。
功能分析
首先是用浏览器逐个访问浏览,看看这套程序有那些功能。
根据相关功能,大概推测可能存在那些漏洞。
常见功能漏洞:
- 程序初始安装
- 绕过install.lock逻辑
- 站点信息泄漏
- 物理路径
- 服务器相关信息
- 组建相关信息
- 文件上传
- 任意文件上传漏洞
- 文件名注入
- 文件管理
- 任意文件操作
- 任意文件读取
- 跨目录浏览
- 文件名XSS
- 任意文件覆盖
- 登陆认证
- Cookie算法破解
- 绕过认证
- 任意用户登陆
- 万能密码
- 数据库备份恢复
- 下载数据库备份文件
- 执行SQL语句
- Sql导出一句话
- 找回密码
- Token破解
- 重置管理员账户
- 验证码
- 验证码爆破
- 验证码绕过