QCMS代码审计:XSS+SQL+后台getshell
字数 1494 2025-08-26 22:11:57
QCMS代码审计:XSS+SQL+后台getshell漏洞分析
系统概述
QCMS是一款小型网站管理系统,具有以下特点:
- 支持多种结构类型:ASP+ACCESS、ASP+SQL、PHP+MYSQL
- 采用UTF-8和GB2312编码
- 功能包括文章管理、产品展示、下载、社区、博客等
- 程序与网页代码分离
- 支持生成Google、Baidu网站地图
漏洞分析
1. 存储型XSS漏洞
漏洞位置:留言功能模块
漏洞成因:
- 在
/System/Controller/guest.php的index_Action方法中,直接接收用户输入并传递给模型 - 经过
QCMS_Guest->insert()方法传递到数据库操作 - 在
Db->get_sql_insert()方法中仅对单双引号和反斜杠进行转义,未过滤HTML标签
利用方式:
<script>alert(1)</script>
影响:
- 前端用户访问留言页面时触发XSS
- 后台管理员查看留言时也会触发XSS
2. SQL注入漏洞
漏洞位置:后台下载管理模块
漏洞成因:
- 在
/System/Controller/backend/down.php的index_Action方法中直接拼接用户输入的title参数 - 通过
QCMS_Down->selectAll()方法传递到数据库操作 - 在
Db->get_sql_cond()方法中,当参数不是数组时直接返回原始数据,未进行过滤
利用方式:
http://127.0.0.1/backend/down.html?title=1';select if(ascii(substr((select database()), 1, 1))-113, 1, sleep(5));%23
影响:
- 可进行基于时间的盲注
- 可获取数据库敏感信息
3. 任意文件上传漏洞
漏洞位置:系统设置上传logo功能
漏洞成因:
- 在
/System/Controller/backend/index.php的ajaxupload_Action方法中调用上传功能 - 上传类
upload.php的白名单检查不严格:- 允许
application/octet-stream类型 - 使用原始文件扩展名而非根据MIME类型重命名
- 允许
- 仅通过文件内容hash进行重复检查,修改内容后可重新上传
利用方式:
- 上传包含恶意代码的PHP文件(如
<?php phpinfo();?>) - 系统返回上传路径
- 直接访问上传的PHP文件
影响:
- 可直接获取Webshell
- 完全控制服务器
4. 任意文件读取漏洞
漏洞位置:后台模板代码预览功能
漏洞成因:
- 在
/System/Controller/backend/template.php的tempview_Action方法中直接解码并读取文件 - 未对路径进行任何过滤,可进行目录遍历
利用方式:
http://127.0.0.1/backend/template/tempview/Li4vLi4vLi4vQ29udHJvbGxlci9hZG1pbi5waHA=.html
(其中Li4vLi4vLi4vQ29udHJvbGxlci9hZG1pbi5waHA=是../../../Controller/admin.php的base64编码)
影响:
- 可读取系统任意文件源码
- 可能导致敏感信息泄露
漏洞修复建议
-
XSS漏洞修复:
- 对所有用户输入进行HTML实体编码
- 使用
htmlspecialchars()函数处理输出
-
SQL注入修复:
- 使用预处理语句替代字符串拼接
- 对非数组参数也进行严格的过滤
-
文件上传漏洞修复:
- 严格限制上传文件类型
- 根据MIME类型强制修改文件扩展名
- 将上传文件存储在Web目录之外
-
文件读取漏洞修复:
- 限制文件读取路径为模板目录
- 对输入参数进行严格的路径校验
总结
QCMS系统存在多处严重安全漏洞,主要问题包括:
- 输入验证不严格
- 数据库操作不安全
- 文件操作缺乏权限控制
- 上传功能设计缺陷
这些漏洞组合利用可导致系统完全沦陷,建议用户及时更新或采取防护措施。