首页 » 网站建设 » phpURL斜杠技巧_php框架代码审计思路

phpURL斜杠技巧_php框架代码审计思路

访客 2024-11-03 0

扫一扫用手机浏览

文章目录 [+]

程序员写在文章前:

本周技能分享,程序员小老婆想以“php框架代码审计”为题,与大家分享一下小老婆对代码的审计思路。
但由于内容较多,这次小老婆先从兼容模式和path_info模式、命名空间、tp5的正常调用流程等七大部分与大家进行谈论。

phpURL斜杠技巧_php框架代码审计思路 phpURL斜杠技巧_php框架代码审计思路 网站建设

(一)内容

phpURL斜杠技巧_php框架代码审计思路 phpURL斜杠技巧_php框架代码审计思路 网站建设
(图片来自网络侵删)

1. MVC基本的架构

2. 漏洞挖掘

thinkphp、Yii、larevel

M 模块

V 界面

C 掌握器

MVC设计模式的优点?

1)解耦合 2)多接口、降落开拓本钱 3)高复用

(二)利用办法

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

(四)兼容模式和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代码须要一个合理的命名空间。

创建一个核心包下的文件kk.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的正常调用流程

1. URL路由解析动态调试剖析

1)先看他这个入口文件的调用也便是public/index.php,根据他的入口文件去找相应的代码。

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

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

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

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

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

2.路由解析动态调试

1)接下来会调用check方法。

2)连续跟进check方法。

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

4)跟进至paresUrl中。

5)array_shift()取出第一个模块名,然后用同样的手腕给掌握器取出来并且赋值给$controller,再用同样的手腕给$action赋值,末了他会把已经拆分的东西打包存放到这个route当中。

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

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

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

3. 开启debug后

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

2)这边会把要求的参数和URL地址进行参数合并,这边他会调用一次解析过滤器,但是这个过滤器他什么都没写, 以是相称于没有任何过滤。

3)刚刚的一部分已先获取了一个字符串

/admin/index/hello

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

admin/index/hello

末了他会把去掉'/'的字符串也便是路径会拆分赋值,如下:

$module = admin -->模块

$controller = index -->掌握器

$action = hello -->方法

下期,我们姑息“路由动态测试”、“思路总结”两大部分与大家连续磋商,并附上小老婆在研究过程中的意外创造,请大家连续支持!

标签:

相关文章