WTCMS一处文件上传getshell
字数 1195 2025-08-29 08:31:53
WTCMS文件上传漏洞分析与利用教学文档
0x00 漏洞概述
WTCMS(下载地址: https://github.com/taosir/wtcms)存在一处后台文件上传漏洞,由于对上传文件过滤不严,攻击者可以通过修改上传请求包来上传PHP木马文件,从而获取服务器控制权限(getshell)。
0x01 漏洞利用步骤
1. 登录后台
首先需要获取后台管理员权限或通过其他方式登录到系统后台。
2. 进入注册邮件模板功能
在后台中找到"注册邮件模板"功能模块,该模块通常包含文件上传功能。
3. 使用编辑器上传文件
- 使用内置的UEditor编辑器上传一张图片(或其他看似正常的文件)
- 在文件上传过程中拦截HTTP请求(使用Burp Suite等工具)
4. 修改上传请求包
拦截到上传请求后,需要修改以下关键部分:
- 修改文件名(如将
test.jpg改为shell.php) - 修改文件内容为PHP恶意代码(如
<?php phpinfo();?>或webshell代码)
5. 访问上传的PHP文件
上传成功后,直接访问上传的PHP文件路径,验证是否执行了PHP代码。
0x02 漏洞代码分析
漏洞文件位置
/wtcms-master/application/Asset/Controller/UeditorController.class.php
关键代码流程
-
入口判断:
- 代码检查
action参数是否为以下值之一:uploadimageuploadscrawluploadvideouploadfile
- 如果是,则进入
_ueditor_upload函数
- 代码检查
-
_ueditor_upload函数:
- 获取上传文件信息
- 调用
upload函数进行实际上传操作
-
upload函数:
- 进行常规检查(文件存在性、上传目录等)
- 通过
pathinfo获取文件扩展名($file['ext']) - 调用
check函数进行上传检测
-
关键检查点:
checkExt()函数检查文件扩展名config['exts']值为null,导致检查通过config['saveExt']为空,使用原始扩展名保存文件
0x03 漏洞原理总结
该漏洞的核心问题在于:
- 文件扩展名检查失效(
config['exts']未定义) - 保存文件时直接使用用户提供的扩展名
- 没有对文件内容进行二次验证
0x04 防御建议
- 严格定义允许上传的文件扩展名(白名单机制)
- 对上传文件内容进行验证(如图片需验证是否为真实图片)
- 上传文件重命名(不使用用户提供的文件名)
- 设置上传目录不可执行
- 更新到最新版本或应用官方补丁
0x05 补充说明
该漏洞利用需要后台权限,属于后台getshell漏洞。在实际渗透测试中,可能需要结合其他漏洞(如弱口令、SQL注入等)先获取后台访问权限。