0x00前言
ThinkPHP是非常流行的一套开源的PHP开发框架,它提供了一套完善的MVC架构以及丰富的功能模块,可以帮助开发者快速构建Web应用程序。
目前许多PHP应用程序都是基于ThinkPHP开发而成,所以在学习代码审计的过程中是无法绕过它的,本节文章将分为两部分来介绍基于thinkphp框架的代码审计,第一部分主要介绍框架的基础前置知识,第二部分介绍thinkphp框架的审计技巧。
0x01声明
遵纪守法
请严格遵守网络安全法相关条例!此分享主要用于交流学习,请勿用于非法用途,一切后果自付。一切未经授权的网络攻击均为违法行为,互联网非法外之地。
0x02环境与工具
① PHPSTORM(编辑器)
② Burp Suite(代理抓包工具)
③ PHPStudy(集成开发环境)
0x03 ThinkPHP前置知识
本文用到的版本为ThinkPHP 5.1.41。
下载地址:
https://github.com/top-think/think
开发手册:
https://www.kancloud.cn/manual/thinkphp5_1/353946
【1】目录结构
1、初始默认目录
www WEB部署目录(或者子目录)
├─application 应用目录
│ ├─common 公共模块目录(可以更改)
│ ├─module_name 模块目录
│ │ ├─common.php 模块函数文件
│ │ ├─controller 控制器目录
│ │ ├─model 模型目录
│ │ ├─view 视图目录
│ │ ├─config 配置目录
│ │ └─ ... 更多类库目录
│ │
│ ├─command.php 命令行定义文件
│ ├─common.php 公共函数文件
│ └─tags.php 应用行为扩展定义文件
│
├─config 应用配置目录
│ ├─module_name 模块配置目录
│ │ ├─database.php 数据库配置
│ │ ├─cache 缓存配置
│ │ └─ ...
│ │
│ ├─app.php 应用配置
│ ├─cache.php 缓存配置
│ ├─cookie.php Cookie配置
│ ├─database.php 数据库配置
│ ├─log.php 日志配置
│ ├─session.php Session配置
│ ├─template.php 模板引擎配置
│ └─trace.php Trace配置
│
├─route 路由定义目录
│ ├─route.php 路由定义
│ └─... 更多
│
├─public WEB目录(对外访问目录)
│ ├─index.php 入口文件
│ ├─router.php 快速测试文件
│ └─.htaccess 用于apache的重写
│
├─thinkphp 框架系统目录
│ ├─lang 语言文件目录
│ ├─library 框架类库目录
│ │ ├─think Think类库包目录
│ │ └─traits 系统Trait目录
│ │
│ ├─tpl 系统模板目录
│ ├─base.php 基础定义文件
│ ├─convention.php 框架惯例配置文件
│ ├─helper.php 助手函数文件
│ └─logo.png 框架LOGO文件
│
├─extend 扩展类库目录
├─runtime 应用的运行时目录(可写,可定制)
├─vendor 第三方类库目录(Composer依赖库)
├─build.php 自动生成定义文件(参考)
├─composer.json composer 定义文件
├─LICENSE.txt 授权说明文件
├─README.md README 文件
├─think 命令行入口文件
上面是Thinkphp框架的目录结构,这些不需要全部都熟悉,只需了解部分主要的目录是做什么的就足够进行代码审计了。
2、应用目录
下面是thinkphp官方提供的默认应用目录说明,这里我们重点关注module_name、controller这两个目录,它们与thinkphp的路由有关,一般module_name名字是可以更改的,可以同时存在多个这种目录,而controller目录下的各个控制器文件文件用来实现具体的模块功能。一般访问路由为/admin/index/index,“admin”为模块目录名称,第一个“index”为控制器名,第二个“index”为控制器中的方法名。这个路由这块放到后面讲,接下来还是继续介绍目录结构。
├─application 应用目录
│ ├─common 公共模块目录(可以更改)
│ ├─module_name 模块目录
│ │ ├─common.php 模块函数文件
│ │ ├─controller 控制器目录
│ │ ├─model 模型目录
│ │ ├─view 视图目录
│ │ ├─config 配置目录
│ │ └─ ... 更多类库目录
│ │
│ ├─command.php 命令行定义文件
│ ├─common.php 公共函数文件
│ └─tags.php 应用行为扩展定义文件
3、静态资源目录
网站的静态资源一般放入pulic目录的子目录下面,当然该目录有时也会存放如Ueditor等插件,例如:
├─public WEB目录(对外访问目录)
│ ├─index.php 入口文件
│ ├─router.php 快速测试文件
| ├─static 静态资源目录
| ├─css 样式
| ├─js 脚本文件
| ├─img 图片文件
│ └─.htaccess 用于apache的重写
4、应用入口文件
ThinPHP5.1版本默认自带的入口文件位于public/index.php,这个public目录也是部署项目时的对外访问目录,一般网站设置根目录为该目录。入口文件内容如下:
// [ 应用入口文件 ]
namespace think;
// 加载基础文件
require __DIR__ . '/../thinkphp/base.php';
// 支持事先使用静态方法设置Request对象和Config对象
// 执行应用并响应
Container::get('app')->run()->send();
【2】配置文件
1、配置目录
系统默认的配置文件目录就是应用目录(APP_PATH),也就是默认的application下面,并分为应用配置(整个应用有效)和模块配置(仅针对该模块有效)。
├─application 应用目录
│ ├─config.php 应用配置文件
│ ├─database.php 数据库配置文件
│ ├─route.php 路由配置文件
│ ├─index index模块配置文件目录
│ │ ├─config.php index模块配置文件
│ │ └─database.php index模块数据库配置文件
如果不希望配置文件放到应用目录下面,可以在入口文件中定义独立的配置目录,添加CONF_PATH常量定义即可,例如:
// 定义配置文件目录和应用目录同级
define('CONF_PATH', __DIR__.'/../config/');
配置目录下面的结构类似如下:
├─application 应用目录
├─config 配置目录
│ ├─config.php 应用配置文件
│ ├─database.php 数据库配置文件
│ ├─route.php 路由配置文件
│ ├─index index模块配置文件目录
│ │ ├─config.php index模块配置文件
│ │ └─database.php index模块数据库配置文件
4A评测 - 免责申明
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。
不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。
本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。
如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!
程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。
侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)