梳理一遍TP代码底层逻辑,为后面的漏洞总结做准备
以TP5.0.22为例(为下次的TP-RCE环境做好准备)+ PHP 5.6.27-NTS
根据类的命名空间可以快速定位文件位置,在ThinkPHP5.0的规范里面,命名最新笔记本电脑报价空间其实对应了文件的所在目录,app命名空间通常代表了文件的起始目录为application,而think命名空间则代表了文件的其实目录为thinkphp/library/think,后面的命名空间则表示从起始目录开始的子目录,如下图所示:
我们先进入到默认的入口文件(public/index.php)
a宾// 定义应用目录define('APP_PATH', __DIR__ . '/../application/');// 加载框架引导文件require __DIR__ . '/../thinkphp/start.php';
引入start.php进入到里面看看有什么
进入框架引导文件看到两行代码
// ThinkPHP 引导文件// 1. 加载基础文件require __DIR__ . '/ba.php';// 2. 执行应用App::run()->nd();
在此文件首先看到全面大段的是定义常量或者是检查常量是否存在,主要是以下几点需要重点注意
将Loader类引入注册自动加载机制注册系统自动加载,spl_autoload_register
将函数注册到SPL __autoload函数队列中。如果该队列中的函数尚未激活,则激活它们。此函数可以注册任意数量的自动加载器,当使用尚未被定义的类(class)和接口(interface)时自动去加载。通过注册自动加载器,脚本引擎在 PHP 出错失败前有了最后一个机会加载所需的类。Compor 自动加载支持注册命名空间定义:think=&冒险岛手游隐藏地图gt;thinkphp/library/think,behavior=>thinkphp/library/behavior,traits=>thinkphp/library/traits
加载类库映射文件自动加载 extend 目录注册异常处理机制加载惯例配置首先返回一个request实例,将应用初始化返回配置信息。
之后进行如下的操作:
$data = lf::exec($dispatch, $config);
,根据 d i s p a t c h 进 行 不 同 的 调 度 , 返 回 dispatch进行不同的调度,返回 dispatch进行不同的调度,返回data清除类的实例化输出数据到客户端,$respon = $data;
,返回一个Respon类实例调用**Respon->nd()**方法将数据返回值客户端画个图过一遍整个流程
通过$path = $request->path()
可以获得到请求的path_info,$depr
是定义的分隔符,默认时:/,之后进行路由检测步骤如下
Route::check
(根据路由定义返回不同的URL调度)检查解析缓存
替换分隔符,将”/“换成了”|”
获取当前请求类型的路由规则,由于在之前的Compor 自动加载支持,在vendortopthink/think-captcha/src/helper.php中注册了路由,所以在$rules = ist(lf::$rul四六级准考证号怎么查询es[$method]) ? lf::$rules[$method] : [];
中的Route::$rules[‘get’]已经存在了相应的路由规则
检测域名部署
检测URL绑定
静态路由规则检查
路由规则检查lf::checkRoute($request, $rules, $url, $depr)
__miss__
和__atuo__
检查路由规则checkRule
检查完整规则定义检查路由的参数分隔符检查是否完整匹配路由最终未被匹配路由的进入到lf::parRule('', $miss['route'], $url, $miss['option'])
进行处理,这就牵涉到TP对于路由的多种定义检查是否强制使用路由$must = !is_null(lf::$routeMust) ? lf::$routeMust : $config['url_route_must']
路由无效,将自动解析模块的URL地址会进入到Route::parUrl($path, $depr, $config['controller_auto_arch'])
(后面的RCE会用到这一点,将会在后续文章进行详细分析)
首先看看路由定义:
具体链接可以看看这个开发手册
在画个图过一遍整个路由流程
TP大概就到这里重要的流程就走完了,后续我会直接复盘RCE漏洞,如果再有什么新增的知识点我会更新章节在本文。
如果文章哪里有错误,恳请大家联系我一起讨论。
本文地址:https://blog.csdn.net/qq_39495209/article/details/107486928
本文发布于:2023-04-08 20:41:03,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/04d992d5cb609c607ea18dddfa20e88d.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:ThinkPHP5底层代码逻辑梳理.doc
本文 PDF 下载地址:ThinkPHP5底层代码逻辑梳理.pdf
留言与评论(共有 0 条评论) |