[红明谷CTF 2021]write_shell

打开题目就是源码

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

有正则匹配,过滤了空格,'_','php','eval''{','}'

发现action为pwd时,会打印当前的目录路径;action为upload时,会上传数据到目录路径下的index.php中,并且会对上传的数据进行检查

先看一下当前的目录

得到当前目录后,过滤了空格,可以用\t代替,过滤了'php'可以用短标签<?=?>代替,过滤了‘_’可以用<?=``?>代替,反引号在php中有执行命令的效果,然后利用通配符 '*' 模糊搜索目录下的文件

写入后直接访问路径下的index.php便会执行我们upload的php命令语句,最终会执行<?=`cat /*`?>,读取目录下包含flag的文件

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值