哥斯拉 发表于 2025-7-3 12:33:29

Discuz! X3.5 X3.4最新通杀储型跨站脚本(XSS)漏洞【存在一年多未修复】

漏洞类型: 存储型XSS

Discuz : 需要启动日志模块 (默认是关闭的)

xss触发 : 注册用户

Discuz : 测试版本最新Discuz! X3.5 (其他版本没测试工具是通杀)

1.代码分析
代码分析

source/include/spacecp/spacecp_blog.php



提交xss $_POST数据,然后把它转交给(blog_post   关键函数) 处理



subject 的表单输入框,也就是“日志标题”。。没有进行任何安全过滤、

全局搜索跟踪blog_post

程序的执行流程跳转到了 source/function/function_blog.php



$POST['subject'] = censor($POST['subject'], NULL, FALSE, FALSE);      (censor() 关键函数)   
调用了 censor() 函数,只会匹配和替换屏蔽脏话、广告词,不会过滤,没有过滤XSS

正确的处理方法dhtmlspecialchars   *(不知道为什么没有写要写个censor)
$POST['subject'] = dhtmlspecialchars($POST['subject']);

'subject' => $POST['subject'],   <-- xss脚本在这里被放入数组(日志标题)
xss写入数据库的数组 赋值给了 $blogarr 中没有过滤



执行数据库 函数调用分析: 这里调用了 C::t('home_blog')->insert()。这个方法会接收 $blogarr 数组,并生成一条SQL INSERT 语句,将数据写入 pre_home_blog 数据表。

html模板

template\default\touch\home\space_blog_view.htm



$blog前端直接输出没有过滤

后台

日志标题可控

pre_home_blog   数据库(标题)里面直接保存,没有做任何修改

source/admincp/admincp_blog.php 路径

$blog['subject'] = cutstr($blog['subject'], 30);   关键代码   ======日志标题可控,直接输出,没有转义


"<a href=\"home.php?mod=space&uid={$blog['uid']}&do=blog&id={$blog['blogid']}\" target=\"_blank\">{$blog['subject']}</a>",   直接输出
showtablerow() 函数用于生成 HTML 表格行,它会将传入的字符串参数直接插入到生成的 HTML 中,不会对内容进行自动的 HTML 转义或过滤

2.测试

前台标题插入







PS:这个漏洞在手上一年多了。今天发出来
页: [1]
查看完整版本: Discuz! X3.5 X3.4最新通杀储型跨站脚本(XSS)漏洞【存在一年多未修复】