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

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

缺陷编号: WooYun-2014-77625

漏洞标题: Discuz!旗下产品统一存在一个csrf+sql批量执行风险(dz3.x,dz7.x,SupeSite7.x等等)

相关厂商: Discuz!

漏洞作者: menmen519

提交时间: 2014-09-28 14:07

公开时间: 2014-12-24 14:08

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

危害等级: 高

自评Rank: 20

漏洞状态: 漏洞已经通知厂商但是厂商忽略漏洞

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

Tags标签: php源码审核

5人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-09-28: 细节已通知厂商并且等待厂商处理中
2014-10-03: 厂商主动忽略漏洞,细节向第三方安全合作伙伴开放(绿盟科技唐朝安全巡航无声信息
2014-11-27: 细节向核心白帽子及相关领域专家公开
2014-12-07: 细节向普通白帽子公开
2014-12-17: 细节向实习白帽子公开
2014-12-24: 细节向公众公开

简要描述:

Discuz!旗下产品统一存在一个sql批量执行风险(dz3.x,dz7.x,SupeSite7.x等等)

详细说明:

今天看dz的SupeSite7.x产品的时候,发现一个dz统一存在的脱裤风险:



直接看代码,我们在做数据库还原的时候,抓到一个链接:



**.**.**.**/SupeSite7.5_SC_UTF8/upload//admincp.php?action=database&op=importstart&do=import&datafile=./backup_OpVKpM/140928_0Idz28GO-1.sql







这个链接的意思就是从某一个文件然后读取sql语句,进行还原



那么我们来分析一下代码:

admin_databases.php:(457-483):

code 区域
elseif($op == 'importstart') {

$do = postget('do') ;
$delunzip = postget('delunzip');
$datafile = postget('datafile');
$confirm = postget('confirm');
$multivol = postget('multivol');
$datafile_vol1 = postget('datafile_vol1');
$autoimport = postget('autoimport');

if($do == 'zip') {
require_once S_ROOT .'./include/zip.lib.php';
$unzip = new SimpleUnzip();
$unzip->ReadFile($datadir.'/'.$datafile);
echo $datadir.'/'.$datafile;
echo "<br>";
echo $unzip->GetName(0);
exit;
if($unzip->Count() == 0 || $unzip->GetError(0) != 0 || !preg_match('/\.sql$/i', $importfile = $unzip->GetName(0))) {
showmessage('database_import_file_illegal');
}

$identify = explode(',', base64_decode(preg_replace('/^# identify:\s*(\w+).*/s', '\\1', substr($unzip->GetData(0), 0, 256))));

$info = basename($datafile).'<br />'.$alang['database_export_version'].':'.$identify[1].'<br />'.$alang['database_export_type'].':'.$alang['database_export_'.$identify[2]].'<br />'.$alang['database_method'].':'.($identify[3] == 'multivol' ? $alang['database_multivol'] : $alang['database_shell']).'<br />';
//检查版本号
$confirm = isset($confirm) ? 1 : 0;







问题刚才的url逻辑走向不会走到这里,我们改一下url:



**.**.**.**/SupeSite7.5_SC_UTF8/upload//admincp.php?action=database&op=importstart&do=zip&datafile=./backup_OpVKpM/xxxx.png





这里我们选择do为zip 然后 datafile为一个png,关键问题就在这里





我们首先压缩一个sql文件到zip文件里面,然后把这个zip文件后缀改为png



由于涉及导致这里没有对zip文件做判断 只是对解压出来的文件做了一个sql后缀判断



那么我们打印一下,看看是否能够解压出来

52.png





哈哈到此为止,我就不多做演示了,后面的步骤,就是根据sql语句里面的代码,然后一条条执行



我发了好多这种类型的csrf,这个也是个get类型的,老样子,一张图片搞定





下来我们分析DZ3.x,dz3.x做数据库还原的时候,本身data目录底下是没有restore.php

,需要从工具那边copy过来,这里我们只是分析风险,看代码



restore.php:(142-162):

code 区域
} elseif($operation == 'importzip') {

if(!getgpc('datafile_server')) {
show_msg('database_import_file_illegal');
} else {
$datafile_server = getgpc('datafile_server');
if(!@file_exists($datafile_server)) {
show_msg('database_import_file_illegal');
}
}
$datafile_vol1 = trim(getgpc('datafile_vol1', 'G'));
$multivol = intval(getgpc('multivol', 'G'));

require_once ROOT_PATH.'./source/class/class_zip.php';
$unzip = new SimpleUnzip();
$backupdir = substr($datafile_server, 8, 13);
$unzip->ReadFile($datafile_server);

if($unzip->Count() == 0 || $unzip->GetError(0) != 0 || !preg_match("/\.sql$/i", $importfile = $unzip->GetName(0))) {
show_msg('database_import_file_illegal');
}





看见没有 这里面的datafile_server 类型为zip的时候 也是没有做文件后缀的判断,直接解压出来sql文件,然后一条条执行语句,这里我就不截图证明了



我们直接看7.x,7.x可就不用那么copy还原文件了,直接操作数据库都可以



首先看代码



db.inc.php:(323-339):

code 区域
} elseif($operation == 'importzip') {

if(empty($datafile_server)) {
cpmsg('database_import_file_illegal', '', 'error');
} else {
$datafile_server = DISCUZ_ROOT.'./forumdata/'.$backupdir.'/'.basename($datafile_server);
if(!@file_exists($datafile_server)) {
cpmsg('database_import_file_illegal', '', 'error');
}
}

require_once DISCUZ_ROOT.'admin/zip.func.php';
$unzip = new SimpleUnzip();
$unzip->ReadFile($datafile_server);

if($unzip->Count() == 0 || $unzip->GetError(0) != 0 || !preg_match("/\.sql$/i", $importfile = $unzip->GetName(0))) {
cpmsg('database_import_file_illegal', '', 'error');
}







这里的代码依旧是没有做zip后缀检测,这里我们打印一下过程,证明是可以csrf+sql批量执行的



我们进行数据库恢复,抓取到一个get链接:

**.**.**.**/Discuz_7.2_SC_UTF8/upload/admincp.php?action=db&operation=import&from=server&datafile_server=./forumdata/backup_997165/140915_ce31AeXP-1.sql&importsubmit=yes





我们 修改一下这个链接



**.**.**.**/Discuz_7.2_SC_UTF8/upload/admincp.php?action=db&operation=importzip&from=server&datafile_server=./forumdata/backup_997165/xxxx.png&importsubmit=yes





压缩一个sql文件为xxxx.zip 然后改为xxxx.png,测试期间我们就放到这个目录下,因为这个目录支持目录遍历,到时候前台上传一个图片就ok了

在代码中打印:

code 区域
require_once DISCUZ_ROOT.'admin/zip.func.php';
$unzip = new SimpleUnzip();
$unzip->ReadFile($datafile_server);
echo $unzip->GetName(0);
exit;







结果如图所示:



53.png





到这里 之后的东西我就不演示了 csrf+get请求 批量执行sql,这个东西其实还蛮严重的 因为这里支持各种操作,root 就能提权等等



漏洞证明:

修复方案:

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


漏洞回应

厂商回应:

危害等级:无影响厂商忽略

忽略时间:2014-12-24 14:08

厂商回复:

最新状态:

暂无


漏洞评价:

对本漏洞信息进行评价,以更好的反馈信息的价值,包括信息客观性,内容是否完整以及是否具备学习价值

漏洞评价(共0人评价):
登陆后才能进行评分

评价

  1. 2014-09-28 14:10 | BadCat ( 实习白帽子 | Rank:81 漏洞数:21 | 悲剧的我什么都不会)
    0

    前排围观

  2. 2014-09-28 14:11 | adm1n ( 普通白帽子 | Rank:216 漏洞数:66 | 只是一个渣渣而已。。。)
    0

  3. 2014-09-28 14:12 | 小包子 ( 普通白帽子 | Rank:100 漏洞数:19 | 关注技术与网络安全)
    0

  4. 2014-09-28 14:13 | 小驴牙牙 ( 普通白帽子 | Rank:168 漏洞数:43 | 不断学习,进步!)
    0

  5. 2014-09-28 14:16 | 铁蛋火车侠 ( 普通白帽子 | Rank:156 漏洞数:31 | Q群371620085 技术交流群 有漂亮妹纸!)
    0

  6. 2014-09-28 14:28 | Mr.leo ( 普通白帽子 | Rank:1314 漏洞数:176 | 说点神马呢!!)
    0

    !!

  7. 2014-09-28 14:40 | xsser 认证白帽子 ( 普通白帽子 | Rank:297 漏洞数:22 | 当我又回首一切,这个世界会好吗?)
    0

    可惜都要权限 鸡肋啊

  8. 2014-09-28 14:55 | menmen519 ( 普通白帽子 | Rank:914 漏洞数:161 | http://menmen519.blog.sohu.com/)
    0

    @xsser 你看到了 这是csrf 不要权限 那就不得了了

  9. 2014-09-28 15:24 | ppt ( 路人 | Rank:11 漏洞数:2 | ) | ( 我猜出了用户名,可我没猜出密码。)
    0

    nice

  10. 2014-09-28 15:26 | Ray ( 实习白帽子 | Rank:75 漏洞数:7 )
    0

    对csrf不要太执着。

  11. 2014-09-28 15:28 | pandas ( 普通白帽子 | Rank:701 漏洞数:79 | 国家一级保护动物)
    0

    @Ray csrf帝并非浪得虚名,tsrc好好接招吧

  12. 2014-09-28 15:34 | menmen519 ( 普通白帽子 | Rank:914 漏洞数:161 | http://menmen519.blog.sohu.com/)
    0

    @Ray 那也要看应用呢 如果一般应用 就算了 但是这种交互高的大应用 还是提提 赚rank 再说这个csrf 比较特殊 属于绕过去了

  13. 2014-09-28 15:37 | menmen519 ( 普通白帽子 | Rank:914 漏洞数:161 | http://menmen519.blog.sohu.com/)
    0

    @pandas 无语 等你看了这个poc 就知道了 dz的一个设计缺陷

  14. 2014-09-28 15:41 | Ray ( 实习白帽子 | Rank:75 漏洞数:7 )
    0

    @menmen519 数据库操作是创始人的权限,后台会话是有过期时间的,要论坛创始人登陆前台登陆后台后再乖乖的去看你的csrf这三个要求在大部分的正常情况下根本无法满足,那这怎么会是一个高危漏洞呢?

  15. 2014-09-28 15:48 | menmen519 ( 普通白帽子 | Rank:914 漏洞数:161 | http://menmen519.blog.sohu.com/)
    0

    @Ray 你要知道dz3.x的csrf是直接可以发到后台的 有个举报页面,url是完全可控制的 这个中招吗?

  16. 2014-09-28 15:50 | menmen519 ( 普通白帽子 | Rank:914 漏洞数:161 | http://menmen519.blog.sohu.com/)
    0

    @Ray 你说的那个创始人 是ucenter的吧 这个是dz本身数据库那一块的,而且这个发到了后台 一般举报 管理员不会不理吧!!!

  17. 2014-09-28 15:52 | xsser 认证白帽子 ( 普通白帽子 | Rank:297 漏洞数:22 | 当我又回首一切,这个世界会好吗?)
    0

    @menmen519 的确太YY了

  18. 2014-09-28 15:53 | menmen519 ( 普通白帽子 | Rank:914 漏洞数:161 | http://menmen519.blog.sohu.com/)
    0

    @xsser 靠 好吧!!

  19. 2014-09-28 15:55 | pandas ( 普通白帽子 | Rank:701 漏洞数:79 | 国家一级保护动物)
    1

    @menmen519 @xsser talk is cheap,show me the $$$

  20. 2014-09-28 15:56 | xsser 认证白帽子 ( 普通白帽子 | Rank:297 漏洞数:22 | 当我又回首一切,这个世界会好吗?)
    0

    @pandas .......

  21. 2014-09-28 16:01 | menmen519 ( 普通白帽子 | Rank:914 漏洞数:161 | http://menmen519.blog.sohu.com/)
    0

    @xsser @pandas .........

  22. 2014-09-28 17:03 | 狗狗侠 认证白帽子 ( 普通白帽子 | Rank:518 漏洞数:58 | 我是狗狗侠)
    1

    有人反映你发的yy 漏洞比较多.... 期待实用点的漏洞啊。。楼主

  23. 2014-09-28 17:16 | menmen519 ( 普通白帽子 | Rank:914 漏洞数:161 | http://menmen519.blog.sohu.com/)
    2

    @狗狗侠 你觉得 实用漏洞dz的会发出来吗 呵呵 狗狗侠!!! 刷刷rank 就可以了 闲着也是闲着 后面再也不发了 本来还要发一个命令执行 yy了

  24. 2014-09-28 17:40 | xsser 认证白帽子 ( 普通白帽子 | Rank:297 漏洞数:22 | 当我又回首一切,这个世界会好吗?)
    0

    @menmen519 @Map

  25. 2014-09-28 17:42 | Map ( 普通白帽子 | Rank:184 漏洞数:11 | 闭关几个星期,学点东西。)
    1

    @xsser @menmen519 我觉得这样做意义不大,@Discuz! 也许会确认也许会给你高,但是这些漏洞迟早会公开的,大家会知道你这一系列漏洞到底是什么情况,time will tell,反正我是只发我觉得深思熟虑的漏洞,尽管事后我还是会觉得我当时没考虑全面。

  26. 2014-09-28 18:06 | D&G ( 普通白帽子 | Rank:566 漏洞数:113 | going)
    1

    @menmen519 洞主是实在人。

  27. 2014-09-28 18:07 | menmen519 ( 普通白帽子 | Rank:914 漏洞数:161 | http://menmen519.blog.sohu.com/)
    0

    @xsser @Map @Discuz! 你们说的都很对,可能我是觉得 大厂商是很在乎所有漏洞的 所以这些可能对于咱们来说不是什么漏洞 但是对于他们来说 哪怕是后台一个shell 也会高度重视 用户群太大了 看了大家的意见 我以后再也不发这类漏洞了

  28. 2014-09-28 18:20 | 黑天鹅 ( 路人 | Rank:4 漏洞数:1 | 关注黑天鹅现象)
    0

    好啊 多发发~~··

  29. 2014-09-28 19:25 | 狗狗侠 认证白帽子 ( 普通白帽子 | Rank:518 漏洞数:58 | 我是狗狗侠)
    0

    @menmen519 @Map 我觉得map说的对, 你发的这些discuz也许会给你rank高,但是yy或者其他什么漏洞,我相信大家都明白。我不做其他评论。

  30. 2014-09-28 19:55 | menmen519 ( 普通白帽子 | Rank:914 漏洞数:161 | http://menmen519.blog.sohu.com/)
    0

    我真就服了 求你们取消关注吧 也别关注漏洞了 别看了 发一个烂漏洞 招,来这么多事情,真心没有意思 怪只怪哥水平不到 真烦!!!!

  31. 2014-09-28 20:38 | 雷锋 ( 路人 | Rank:12 漏洞数:2 | 承接:钻井,架工,木工,电工,水暖工,力...)
    0

    ....不太平

  32. 2014-09-29 11:16 | luwikes ( 普通白帽子 | Rank:548 漏洞数:82 | 潜心学习~~~)
    0

    @Map 很中肯的评价,不能更同意

  33. 2014-10-05 13:32 | 贫道来自河北 ( 普通白帽子 | Rank:1469 漏洞数:439 | 一个立志要把乌云集市变成零食店的男人)
    0

    恭喜忽略了

  34. 2014-11-07 16:08 | nightmare ( 路人 | Rank:0 漏洞数:1 | 该用户太过懒惰,没有填写任何信息。)
    1

    掉成路人了

  35. 2015-08-21 15:09 | BeenQuiver ( 普通白帽子 | Rank:103 漏洞数:27 | 专注而高效,坚持好的习惯千万不要放弃)
    0

    吊吊吊

登录后才能发表评论,请先 登录