ssycms代码审计:后台存储型XSS
字数 1165 2025-08-26 22:11:56
SSYCMS后台存储型XSS漏洞分析与利用
漏洞概述
SSYCMS内容管理系统存在多处后台存储型XSS漏洞,攻击者可以通过后台管理功能注入恶意脚本,这些脚本会被持久化存储在数据库中,并在其他用户访问相关页面时执行。
受影响版本
- 基础版
- UGC投稿版
系统架构
- 前台:Bootstrap4.x
- 后台:vue2.x、iview3.x
- 框架:Thinkphp5.x
- 架构:PHP+MYSQL
漏洞位置
1. 内容管理模块
- 路径:内容->全部内容
- 可触发字段:
- 标题字段:直接触发
- 标签字段:直接触发
- 描述字段:需要闭合HTML标签
- 关键词字段:需要闭合HTML标签
- 内容字段:无法触发(经过htmlspecialchars过滤)
2. 单个页面管理模块
- 路径:功能->单个页面
- 可触发字段:
- 标题字段:直接触发
- 关键词字段:需要闭合HTML标签
- 描述字段:需要闭合HTML标签
- 额外功能:可自定义页面路由
3. 友情链接管理模块
- 可触发字段:
- 名称字段:直接触发
- 网址字段:直接触发
- 描述字段:直接触发
漏洞复现步骤
- 登录后台管理系统
- 导航到漏洞位置(内容管理/单个页面/友情链接)
- 在可触发字段中输入XSS payload:
- 直接触发字段:
<script>alert(1)</script> - 需要闭合字段:
"><script>alert(1)</script>
- 直接触发字段:
- 保存提交
- 访问受影响页面查看XSS执行效果
代码审计分析
漏洞根源
-
请求处理流程:
- 路由:
/index.php?s=/article/ApiAdminArticle/itemAdd - 控制器方法:
itemAdd() - 数据获取方式:
$this->request->post()
- 路由:
-
关键问题代码:
public function itemAdd()
{
$data = $this->request->post();
// 缺少输入过滤
$res = model($this->itemModelNameSpace)->itemAdd($data,$fieldList);
// ...
}
- 数据库存储差异:
// 未过滤的字段直接存储
$indexId = db($this->item)->insertGetId(array (
'title' => $paramData['title'], // 未过滤
'description' => $paramData['description'], // 未过滤
'keywords' => $paramData['keywords'], // 未过滤
// ...
));
// 内容字段经过htmlspecialchars过滤
db($this->itemContent)->insert(array(
'content' => htmlspecialchars($content),
));
安全对比:UGC投稿功能
UGC投稿版对用户输入进行了严格过滤:
public function itemAdd()
{
$title = Htmlp::htmlp(input('post.title'));
$content = Htmlp::htmlp(input('post.content'));
// 所有字段都经过HTMLPurifier过滤
// ...
}
HTMLPurifier过滤实现:
class Htmlp
{
static public function htmlp($dirty_html)
{
$config = HTMLPurifier_Config::createDefault();
$purifier = new HTMLPurifier($config);
return $purifier->purify($dirty_html);
}
}
漏洞利用限制
- 需要后台管理员权限
- 部分字段需要特定闭合方式才能触发
- 内容字段无法利用(已过滤)
修复建议
-
对所有用户输入进行统一过滤:
- 使用HTMLPurifier或类似库
- 至少使用htmlspecialchars()函数
-
实施最小权限原则:
- 即使对管理员也应实施输入过滤
- 区分不同管理角色的权限
-
输出时进行编码:
- 在显示用户提供的内容时进行HTML实体编码
-
实施内容安全策略(CSP):
- 限制可执行脚本的来源
漏洞危害评估
虽然需要管理员权限,但仍存在风险:
- 管理员账号被窃取后的攻击面
- 内部威胁(恶意管理员)
- 可能与其他漏洞形成攻击链
总结
SSYCMS在后台管理界面存在多处存储型XSS漏洞,主要原因是未对管理员输入进行充分过滤。虽然需要管理员权限才能利用,但仍建议修复以遵循纵深防御原则。修复方案应对所有用户输入实施统一过滤,不区分用户角色。