经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » PHP » 查看文章
php反引号与短标签脚本示例
来源:jb51  时间:2022/4/11 18:16:05  对本文有异议
  1. <?php
  2. error_reporting(0);
  3. highlight_file(__FILE__);
  4. function check($input){
  5. if(preg_match("/'| |_|php|;|~|\\^|\\+|eval|{|}/i",$input)){
  6. // if(preg_match("/'| |_|=|php/",$input)){
  7. die('hacker!!!');
  8. }else{
  9. return $input;
  10. }
  11. }
  12. function waf($input){
  13. if(is_array($input)){
  14. foreach($input as $key=>$output){
  15. $input[$key] = waf($output);
  16. }
  17. }else{
  18. $input = check($input);
  19. }
  20. }
  21. $dir = 'sandbox/' . md5($_SERVER['REMOTE_ADDR']) . '/';
  22. if(!file_exists($dir)){
  23. mkdir($dir);
  24. }
  25. switch($_GET["action"] ?? "") {
  26. case 'pwd':
  27. echo $dir;
  28. break;
  29. case 'upload':
  30. $data = $_GET["data"] ?? "";
  31. waf($data);
  32. file_put_contents("$dir" . "index.php", $data);
  33. }
  34. ?>

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

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

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

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

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

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

  1. function check($input){
  2. if(preg_match("/'| |_|php|;|~|\\^|\\+|eval|{|}/i",$input)){
  3. // if(preg_match("/'| |_|=|php/",$input)){
  4. die('hacker!!!');
  5. }else{
  6. return $input;
  7. }
  8. }
  9. function waf($input){
  10. if(is_array($input)){
  11. foreach($input as $key=>$output){
  12. $input[$key] = waf($output);
  13. }
  14. }else{
  15. $input = check($input);
  16. }
  17. }

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

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

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

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

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

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

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

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

继续执行命令即可 

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

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号