前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Discuz v3.4 xss漏洞 排行页面存储型XSS漏洞

Discuz v3.4 xss漏洞 排行页面存储型XSS漏洞

作者头像
C4rpeDime
发布2022-04-24 10:42:45
1.6K1
发布2022-04-24 10:42:45
举报
文章被收录于专栏:黑白安全

简要分析source/module/misc/misc_ranklist.php:166Discuz v3.4 xss漏洞<?php function getranklist_members($offset = 0, $limit = 20) {require_once libfile('function/forum');$member

简要分析

source/module/misc/misc_ranklist.php:166

Discuz v3.4 XSS漏洞

代码语言:javascript
复制

<?php 
function getranklist_members($offset = 0, $limit = 20) {
require_once libfile('function/forum');
$members = array();
$topusers = C::t('home_show')->fetch_all_by_unitprice($offset, $limit, true);
foreach($topusers as $member) {
$member['avatar'] = avatar($member['uid'], 'small');
$member['note'] = dhtmlspecialchars($member['note']);
$members[] = $member;
}
return $members;
}

Dz在此处获取到$member['note']后调用了dhtmlspecialchars进行过滤,在source/function/function_core.php:203 会对’&’, ‘“‘, ‘<’, ‘>’进行实体编码。

代码语言:javascript
复制


<?php 
function dhtmlspecialchars($string, $flags = null) {
if(is_array($string)) {
。。。
} else {
if($flags === null) {
$string = str_replace(array('&', '"', '<', '>'), array('&amp;', '&quot;', '&lt;', '&gt;'), $string);
 
} else {
。。。
}
return $string;
}

从getranklist_members返回后 source/include/misc/misc_ranklist_index.php:113

代码语言:javascript
复制

<?php
。。。
if($ranklist_setting['member']['available']) {
$memberlist = getranklist_members(0, 27);
}
。。。
include template('diy:ranklist/ranklist');

进行模板的渲染在 data/template/1_diy_ranklist_ranklist.tpl.php:32

代码语言:javascript
复制
<?php if($memberlist) { ?>
<a href="home.php?mod=space&amp;uid=<?php echo $memberlist['0']['uid'];?>&amp;do=profile" target="_blank" id="bid_<?php echo $memberlist['0']['uid'];?>" class="hm" <?php if($memberlist['0']['note']) { ?> onmouseover="showTip(trhis)" tip="<?php echo $memberlist['0']['username'];?>: <?php echo $memberlist['0']['note'];?>"<?php } ?>><?php echo avatar($memberlist[0][uid],middle);?></a>
<?php } ?>

可以看到在tip属性中输出了$memberlist['0']['note']。在之前有一个onmouseover事件,跟入showTip(trhis) 在 static/js/common.js:1062

代码语言:javascript
复制
tatic/js/common.js:1062


function showTip(ctrlobj) {
$F('_showTip', arguments);
}

跟入_showTip,在 static/js/common_extra.js:912

代码语言:javascript
复制

function _showTip(ctrlobj) {
if(!ctrlobj.id) {
ctrlobj.id = 'tip_' + Math.random();
}
menuid = ctrlobj.id + '_menu';
if(!$(menuid)) {
var div = document.createElement('div');
div.id = ctrlobj.id + '_menu';
div.className = 'tip tip_4';
div.style.display = 'none';
div.innerHTML = '<div class="tip_horn"></div><div class="tip_c">' + ctrlobj.getAttribute('tip') + '</div>';
$('append_parent').appendChild(div);
}
$(ctrlobj.id).onmouseout = function () { hideMenu('', 'prompt'); };
showMenu({'mtype':'prompt','ctrlid':ctrlobj.id,'pos':'12!','duration':2,'zindex':JSMENU['zIndex']['prompt']});
}

通过ctrlobj.getAttribute('tip')获取tip属性的值,由于getAttribute获取的内容会自动反转义,即前面在dhtmlspecialchars编码过的内容又被解码了一次。此后拼接到div标签的innerHTML中,最后输出到页面上造成了xss

关于getAttribute,可以用下面代码测试:

代码语言:javascript
复制
<html>
<div name="&lt;a&gt;" id="div">test</div>
<script>
div1 = document.getElementById("div");
align = div1.getAttribute("name");
alert(align);
</script>

漏洞复现

该CMS中,排行榜功能是默认开启的。在地址 http://127.0.0.1/misc.php?mod=ranklist&type=member 的上榜宣言中输入Payload

Discuz v3.4 xss漏洞 排行页面存储型XSS漏洞 Xss x3.4 Dz 漏洞分析  第1张
Discuz v3.4 xss漏洞 排行页面存储型XSS漏洞 Xss x3.4 Dz 漏洞分析 第1张

在 http://127.0.0.1/misc.php?mod=ranklist 当鼠标移动到头像上触发onmouseover事件,执行xss

Discuz v3.4 xss漏洞 排行页面存储型XSS漏洞 Xss x3.4 Dz 漏洞分析  第2张
Discuz v3.4 xss漏洞 排行页面存储型XSS漏洞 Xss x3.4 Dz 漏洞分析 第2张

修复方案

Discuz v3.4 xss漏洞 排行页面存储型XSS漏洞 Xss x3.4 Dz 漏洞分析  第3张
Discuz v3.4 xss漏洞 排行页面存储型XSS漏洞 Xss x3.4 Dz 漏洞分析 第3张

多增加一次dhtmlspecialchars

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-10-18),如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简要分析
  • 漏洞复现
  • 修复方案
相关产品与服务
Discuz!
Discuz! 是全球领先的论坛社区应用系统,自2001年6月面世以来,服务超过300多万网站用户案例。现在,借助 Discuz! ,您不仅可以使用搭建传统的社区论坛,更可轻易的构建面向移动互联网时代的私域流量和社交圈子类的应用,并快速启动业务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档