七夕云黑帽博客-专注互联网络安全-webshell七夕,七夕黑帽博客,QQ905690245

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

2018-10-31 22:27 作者:Mr.刘 | 网络安全 | 标签: Discuz v3.4 xss漏洞 排行页面存储型XSS漏洞

简要分析

source/module/misc/misc_ranklist.php:166

Discuz v3.4 xss漏洞

<?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 会对’&’, ‘“‘, ‘<’, ‘>’进行实体编码。



<?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








<?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

 

 


 <?php if($memberlist) { ?>
<a href="home.php?mod=space&amp;uid=<?php echo $memberlist['0']['uid'
php echo $memberlist['0']['uid'];?>" class="hm" <?php if($memberlist['0']['no
te']) php echo $memberlist['0']['username'];?>: php echo avatar($memberlist[
0][uid],middle);?></a>
<?php } ?> 


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


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


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


 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':JS MENU['zIndex']['prompt']});


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

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


 <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漏洞

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

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

修复方案

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

多增加一次dhtmlspecialchars


  • blogger
分享本文至:

文章作者:Mr.刘 作者QQ:905690245
文章地址:http://www.blog.qixiwangluo.com/?post=205
版权所有 © 转载时必须以链接形式注明作者和原始出处!

发表评论:



如有侵犯您的版权请发送QQ邮件至905690245@qq.com

CopyRight 2021 七夕云黑帽博客-专注互联网络安全.All rights reserved.

技术支持:攀枝花七夕云网络