php框架代码审计思路

2022-12-09 0 783

原副标题:php构架标识符审计工作路子

php框架代码审计思路

开发人员写在该文前:

下周控制技术撷取,开发人员MD224CH与以“php构架标识符审计工作”大篇幅,与我们撷取呵呵MD224CH对标识符的审计工作路子。但虽然文本非常多,本次MD224CH先从相容商业模式和path_info商业模式、重新命名内部空间、tp5的恒定初始化业务流程等七绝大部分与我们展开探讨。

(一)文本

1. MVC基本上的构架

2. 安全漏洞发掘

thinkphp、Yii、larevel

M 组件

V 介面

C 驱动器

MVC程序语言的缺点?

1)解耦合 2) 多USB、减少投资成本 3) 高F83E43Se

(二)采用形式

application 应用领域产品目录(放他们的标识符)

—- admin 放前台文档

________controller

—- index 放前台文档

________controller

public 入口文档

—- index.php 网站的入口文档

thinkphp 核心文档

(三)访问形式

thinkphp所有的都是用URL来实现。

thinkphp的访问商业模式:

1)http://localhost/index.php/组件名称/驱动器的名/方法名/参数/vaulue

2)http://localhost/index.php/组件名称/驱动器的名/方法名?参数=value

组件名称:在application下,例如index文档夹是组件名。

驱动器的名:在index下有一controller,这个controller下有index.php,那他的驱动器的名就是index。

方法名:方法就是index.php下的一些方法名称。

构造URL:

http://localhost/index.php/index/Index/hello/name/11111

php框架代码审计思路

(四)相容商业模式和path_info商业模式

1)tp采用相容商业模式的写法:

http://localhost/index.php?s=index/Index/hello&name=1111

2)pathinfo访问的商业模式:

http://localhost/index.php/index/Index/hello/name/11111

3)可以得到:

http://localhost/index.php?s=组件/驱动器/方法&参数=value

(五)关于重新命名内部空间

tp5遵循一个psr-4自动加载规范,他可以去自动加载类,需要合理的、正确的重新命名内部空间。

一组的健康的、合格的tp5标识符需要一个合理的重新命名内部空间。

php框架代码审计思路

创建一个核心包下的文档kk.php。

php框架代码审计思路php框架代码审计思路

得到一个关于重新命名内部空间的结论:

1)如果你写在application下,那你重新命名内部空间的一个根路径是app;

2)如果thinkphp下的think,那你重新命名内部空间的一个根路径就think;

3)如果thinkphp下的traits,那你重新命名内部空间的一个根路径就是traits。

(六)问题根源

TP处理URL的一个特性,他采用全局变量。

http://localhost/index.php/index/\Index/hello/name/11111

http://localhost/index.php/index//Index/hello/name/11111

(七)tp5的恒定初始化业务流程

01 URL路由解析动态调试分析

1)先看他这个入口文档的初始化也就是public/index.php,根据他的入口文档去找相应的标识符。

php框架代码审计思路

2)正式进入路由检测的一个方法。

php框架代码审计思路

3)他会从下图中进一个path方法。

php框架代码审计思路

4)他会从下图中进一个pathinfo方法。

php框架代码审计思路

5)要从这里进入一个server。

php框架代码审计思路

6)ltrim()方法可以把/index/Index/hello//name/11111这一段字符串的最左边的/index/Index/hello//name/11111,以上就是路径解析的一个过程。

02 路由解析动态调试

1) 接下来会初始化check方法。

php框架代码审计思路

2) 继续跟进check方法。

php框架代码审计思路

3)后续他会用str_replace()方法来把斜杠修改成|,初始化”use think\route\dispatch\Url as UrlDispatch; ” 这个Url.php。

php框架代码审计思路

4)跟进至paresUrl中。

php框架代码审计思路

php框架代码审计思路

5)array_shift()取出第一个组件名,然后用同样的手法给驱动器取出来并且赋值给$controller,再用同样的手法给$action赋值,最后他会把已经拆分的东西打包存放到这个route当中。

php框架代码审计思路

6)后续把这一个route的内容返回到init中的$result中去。

php框架代码审计思路

7)接下来他会去new一个module类,但是这个module中没构造方法,所以他会初始化一次父类的无参构造,然后再初始化module下的初始化方法init。

php框架代码审计思路

8)在进入这个初始化方法后他会用parent::init();再初始化一次父类的初始化方法。

03 开启debug后

php框架代码审计思路

1)如果开启了debug,他就会对路由的信息展开记录。

2)这边会把请求的参数和URL地址展开参数合并,这边他会初始化一次解析过滤器,但是这个过滤器他什么都没写, 所以相当于没有任何过滤。

/admin/index/hello

然后把上面的字符串处理成了以下的形式

admin/index/hello

最后他会把去掉/的字符串也就是路径会拆分赋值,如下:

$module = admin –>组件

$controller = index –>驱动器

$action = hello –>方法

下期,我们将就“路由动态测试”、“路子总结”两绝大部分与我们继续探讨,并附上MD224CH在研究过程中的意外发现,请我们继续支持!

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务