关于thinkphp框架的代码审计

2024-06-01 363 0

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(#换成@)

相关文章

苹果试图保护你的隐私,OpenAI可能做不到
Shuffle:一款完全自动化的安全栈增强平台
如何使用CODASM编码Payload并降低熵值
SessionExec:一款针对会话安全的安全命令测试工具
Arkime:一款大规模数据包捕获和索引数据库系统
从蓝队流量角度分析Shiro-550反序列化漏洞

发布评论