freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

关于thinkphp框架的代码审计
2024-05-17 10:48:43

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模块数据库配置文件
# 漏洞 # web安全 # 漏洞分析
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录