一聚教程网:一个值得你收藏的教程网站

热门教程

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

时间:2026-05-30 09:30:02 编辑:袖梨 来源:一聚教程网

这篇文章主要为大家介绍了php反引号与短标签的脚本示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
<?phperror_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.*j**b51.net/article/112327.htm

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

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

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

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

继续执行命令即可

热门栏目