当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2014-051123

漏洞标题:Discuz! X 储存型XSS (X1 ~ X3.1最新版)

相关厂商:Discuz!

漏洞作者: Coxxs

提交时间:2014-02-16 19:08

修复时间:2014-05-17 19:09

公开时间:2014-05-17 19:09

漏洞类型:xss跨站脚本攻击

危害等级:中

自评Rank:8

漏洞状态:厂商已经确认

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-02-16: 细节已通知厂商并且等待厂商处理中
2014-02-17: 厂商已经确认,细节仅向厂商公开
2014-02-20: 细节向第三方安全合作伙伴开放
2014-04-13: 细节向核心白帽子及相关领域专家公开
2014-04-23: 细节向普通白帽子公开
2014-05-03: 细节向实习白帽子公开
2014-05-17: 细节向公众公开

简要描述:

Discuz! X 储存型XSS一枚,存在于X1 ~ X3.1最新版

详细说明:

发表帖子时,Discuz对于其中的ed2k链接做了解析处理,虽然对于链接中的名称等进行了处理,但是未对传入的文件大小做处理(转为int),造成了XSS。
ed2k地址形如:

ed2k://|file|%E8%8B%B1%E9%9B%84%E4%BC%A0%E8%AF%B46%EF%BC%9A%E7%A9%BA%E4%B9%8B%E8%BD%A8%E8%BF%B9FC%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%873CD%E5%AE%8C%E7%BE%8E%E7%A0%B4%E8%A7%A3%E7%8F%8D%E8%97%8F%E7%89%88.exe|468173|F85A01E2F6049D10F1881ACDA4A9F704|h=MJLSJERMY4VYJIB5ZKPP7TQHQ6HI6USW|/


其中的468173即文件大小,这段地址在Discuz的function_discuzcode.php中被处理

if($allowbbcode) {
if(strpos($msglower, 'ed2k://') !== FALSE) {
$message = preg_replace("/ed2k:\/\/(.+?)\//e", "parseed2k('\\1')", $message); //调用了parseed2k
}
}


function parseed2k($url) {
global $_G;
list(,$type, $name, $size,) = explode('|', $url); //读出了地址中的类型、名称、文件大小数据
$url = 'ed2k://'.$url.'/';
$name = addslashes($name);
if($type == 'file') {
$ed2kid = 'ed2k_'.random(3);
//一直到这里,均未对上面的$size变量进行安全处理,此时$size变量是字符串类型的
//下面一行,sizecount($size)调用了sizecount函数,传入了字符串型的$size
return '<a id="'.$ed2kid.'" href="'.$url.'" target="_blank">'.dhtmlspecialchars(urldecode($name)).' ('.sizecount($size).')</a><script language="javascript">$(\''.$ed2kid.'\').innerHTML=htmlspecialchars(unescape(decodeURIComponent(\''.$name.'\')))+\' ('.sizecount($size).')\';</script>';
} else {
return '<a href="'.$url.'" target="_blank">'.$url.'</a>';
}
}


sizecount函数 在 function_core.php 中,我们看看它是怎么处理的

function sizecount($size) {
if($size >= 1073741824) { //字符串型被自动转换为数值型,如果我们传入的size是英文之类的话,前几个if都是False,跳过
$size = round($size / 1073741824 * 100) / 100 . ' GB';
} elseif($size >= 1048576) {
$size = round($size / 1048576 * 100) / 100 . ' MB';
} elseif($size >= 1024) {
$size = round($size / 1024 * 100) / 100 . ' KB';
} else { //一直跳到这里
$size = $size . ' Bytes'; //可以看到,这里的$size未被转义就直接返回
}
return $size;
}


由于传入的链接中的$size未被转换为数值型,最后直接输出,造成了漏洞

漏洞证明:

发表一个帖子,内容包含

ed2k://|file|test|'+alert(document.cookie)+'|test/


然后 $size -> '+alert(document.cookie)+' 被直接输出

xss1.png


xss2.png

修复方案:

在 sizecount 函数中将传入参数直接转为数值后再处理

版权声明:转载请注明来源 Coxxs@乌云


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:8

确认时间:2014-02-17 13:55

厂商回复:

谢谢

最新状态:

暂无


漏洞评价:

评论

  1. 2014-02-16 19:10 | U神 ( 核心白帽子 | Rank:1285 漏洞数:142 | 感谢乌云,知恩不忘,其实我一直都在乌云默...)

    吊炸天

  2. 2014-02-16 19:12 | Coxxs ( 实习白帽子 | Rank:34 漏洞数:8 | 节操数:233 | ww)

    求别忽略((

  3. 2014-02-16 19:15 | xsser 认证白帽子 ( 普通白帽子 | Rank:254 漏洞数:18 | 当我又回首一切,这个世界会好吗?)

    @Coxxs 略屌 这个有钱吧

  4. 2014-02-16 19:16 | Coxxs ( 实习白帽子 | Rank:34 漏洞数:8 | 节操数:233 | ww)

    @xsser 希望有吧..刚才改discuz程序的时候碰巧发现的

  5. 2014-02-16 19:16 | 鬼魅羊羔 ( 普通白帽子 | Rank:299 漏洞数:42 | (#‵′)凸(#‵′)凸(#‵′)凸(#‵′)凸(#‵...)

    @Coxxs 求分赃:)

  6. 2014-02-16 19:16 | xsser 认证白帽子 ( 普通白帽子 | Rank:254 漏洞数:18 | 当我又回首一切,这个世界会好吗?)

    @Coxxs 程序员?

  7. 2014-02-16 19:20 | 淡漠天空 认证白帽子 ( 实习白帽子 | Rank:1113 漏洞数:142 | M:出售GOV STATE NSA CIA NASA DHS Symant...)

    求分赃:)

  8. 2014-02-16 19:21 | Coxxs ( 实习白帽子 | Rank:34 漏洞数:8 | 节操数:233 | ww)

    @xsser php新手,关注Discuz比较久而已= =##

  9. 2014-02-16 20:56 | mango ( 核心白帽子 | Rank:1668 漏洞数:248 | 我有个2b女友!)

    @Coxxs 求内幕、、、

  10. 2014-02-16 21:03 | M4sk ( 普通白帽子 | Rank:1199 漏洞数:319 | 国内信息安全任重而道远,还需要厂商和白帽...)

    求内幕、、、

  11. 2014-02-16 21:08 | diguoji ( 普通白帽子 | Rank:323 漏洞数:79 | 中国吉林长春)

    澎湃,

  12. 2014-02-16 21:11 | zcy ( 实习白帽子 | Rank:93 漏洞数:15 )

    @Coxxs 求内幕

  13. 2014-02-16 21:15 | Hmily ( 路人 | 还没有发布任何漏洞 | 吾爱破解论坛)

    discuz看来是倒闭了,各种漏洞都不更新!

  14. 2014-02-16 21:37 | xsser 认证白帽子 ( 普通白帽子 | Rank:254 漏洞数:18 | 当我又回首一切,这个世界会好吗?)

    @Hmily 你们是受害者?

  15. 2014-02-17 09:07 | Cougar ( 实习白帽子 | Rank:69 漏洞数:19 | 不容易。)

    @Coxxs 求内幕阿

  16. 2014-02-17 10:54 | Hmily ( 路人 | 还没有发布任何漏洞 | 吾爱破解论坛)

    @xsser 受到深深的伤害,之前还好Coxxs帮忙修复了一个刷分的问题。

  17. 2014-02-17 16:45 | px1624 ( 普通白帽子 | Rank:1036 漏洞数:175 | px1624)

    @xsser 这个怎么没在通用型那里展示?

  18. 2014-02-28 19:34 | pysolve ( 路人 | Rank:17 漏洞数:3 | Time is killing u when ur killing time!)

    感觉dz这段上下文代码 出了好多次xss了呀

  19. 2014-02-28 19:37 | px1624 ( 普通白帽子 | Rank:1036 漏洞数:175 | px1624)

    @Coxxs 私信求细节!

  20. 2014-03-03 02:30 | Coxxs ( 实习白帽子 | Rank:34 漏洞数:8 | 节操数:233 | ww)

    @xsser = =##所以说这个洞会有通用型奖励之类的吗..

  21. 2014-03-06 23:53 | Coxxs ( 实习白帽子 | Rank:34 漏洞数:8 | 节操数:233 | ww)

    谢谢!收到通用型奖励,不过提款限额太坑爹- -##之后会继续努力学习;)

  22. 2014-03-11 10:24 | 牧马者 ( 路人 | Rank:0 漏洞数:1 | 菩提本无树明镜亦非台本来无一物何处惹尘埃)

    什么情况啊

  23. 2014-03-29 05:32 | 病人甲 ( 路人 | Rank:2 漏洞数:1 | 网络安全,seo,php攻城师)

    ...路过

  24. 2014-04-11 09:22 | Cougar ( 实习白帽子 | Rank:69 漏洞数:19 | 不容易。)

    想请问下,$size -> '+alert(document.cookie)+' 这个是编辑进去吗?麻烦弄个格式给我好吗? WB感谢

  25. 2014-04-25 17:41 | 橘子 ( 路人 | Rank:0 漏洞数:3 | 呢个...羞射高中生一枚。带上大神@Haswell...)

    好顶赞QWQ

  26. 2014-05-17 20:12 | 从容 ( 普通白帽子 | Rank:221 漏洞数:75 | Enjoy Hacking Just Because It's Fun :) ...)

    你关注的二逼发布了漏洞 Discuz! X 储存型XSS (X1 ~ X3.1最新版)通用型奖励500,提款额度1000,洞主继续努力- -.

  27. 2014-05-17 20:29 | GDH ( 路人 | Rank:2 漏洞数:1 | 谢谢大家对我的支持!)

    www.社工库.com

  28. 2014-05-17 20:38 | 小鸡鸡 ( 实习白帽子 | Rank:40 漏洞数:10 )

    @GDH 来个邀请码啊

  29. 2014-05-17 21:32 | ddy ( 实习白帽子 | Rank:44 漏洞数:16 | 其实第一次要我挖洞我是拒绝的。因为,你不...)

    刚就在hostloc见到这个

  30. 2014-05-18 01:44 | wugui ( 路人 | Rank:15 漏洞数:4 | wugui@lcx.cc)

    这个怎么没在通用型那里展示?

  31. 2014-05-18 11:10 | Space ( 路人 | Rank:2 漏洞数:3 | 程序猿)

    回去补洞去。。。

  32. 2014-06-27 08:53 | 淘汰郎 ( 路人 | Rank:0 漏洞数:1 | lalala)

    这个怎么利用?/"字符都被过滤了