ce安全网绿色资源分享

教程资讯|常用软件|安卓下载|下载排行|最近更新

软件
软件
文章
当前位置:首页网络安全网络安全文章 → Discuz! X1.5 ~ X2.5 后台数据库备份功能远程命令执行 Getshell (CVE-2018-14729)

Discuz! X1.5 ~ X2.5 后台数据库备份功能远程命令执行 Getshell (CVE-2018-14729)

时间:2018-11-09 00:01:45人气:作者:本站作者我要评论

0x00 漏洞简述

漏洞信息

8月27号有人在GitHub上公布了有关Discuz 1.5-2.5版本中后台数据库备份功能存在的命令执行漏洞的细节。

漏洞影响版本

Discuz! 1.5-2.5

0x01 漏洞复现

官方论坛下载相应版本就好。

0x02 漏洞分析

需要注意的是这个漏洞其实是需要登录后台的,并且能有数据库备份权限,所以比较鸡肋。

我这边是用Discuz! 2.5完成漏洞复现的,并用此进行漏洞分析的。

漏洞点在:

  1. source/admincp/admincp_db.php

第296行:

  1. @shell_exec($mysqlbin.'mysqldump --force --quick '.($db->version() > '4.1' ? '--skip-opt --create-options' : '-all').' --add-drop-table'.($_GET['extendins'] == 1 ? ' --extended-insert' : '').''.($db->version() > '4.1' && $_GET['sqlcompat'] == 'MYSQL40' ? ' --compatible=mysql40' : '').' --host="'.$dbhost.($dbport ? (is_numeric($dbport) ? ' --port='.$dbport : ' --socket="'.$dbport.'"') : '').'" --user="'.$dbuser.'" --password="'.$dbpw.'" "'.$dbname.'" '.$tablesstr.' > '.$dumpfile);

在shell_exec()函数中可控点在$tablesstr,向上看到第281行:

  1. $tablesstr = '';
  2. foreach($tables as $table) {
  3.     $tablesstr .= '"'.$table.'" ';
  4. }

跟一下$table的获取流程,在上面的第143行:

  1. if($_GET['type'] == 'discuz' || $_GET['type'] == 'discuz_uc')
  2. {
  3.     $tables = arraykeys2(fetchtablelist($tablepre), 'Name');
  4. }
  5. elseif($_GET['type'] == 'custom')
  6. {
  7.     $tables = array();
  8.     if(empty($_GET['setup']))
  9.     {
  10.         $tables = C::t('common_setting')->fetch('custombackup', true);
  11.     }
  12.     else
  13.     {
  14.         C::t('common_setting')->update('custombackup', empty($_GET['customtables'])? '' : $_GET['customtables']);
  15.         $tables = & $_GET['customtables'];
  16.     }
  17.     if( !is_array($tables) || empty($tables))
  18.     {
  19.         cpmsg('database_export_custom_invalid', '', 'error');
  20.     }
  21. }

可以看到:

  1. C::t('common_setting')->update('custombackup', empty($_GET['customtables'])? '' : $_GET['customtables']);
  2. $tables = & $_GET['customtables'];

首先会从$_GET的数组中获取customtables字段的内容,判断内容是否为空,不为空则将从外部获取到的customtables字段内容写入common_setting表的skey=custombackup的svalue字段,写入过程中会将这个字段做序列化存储:之后再将该值赋给$tables。

至此可以看到漏洞产生的原因是由于shell_exec()中的$tablesstr可控,导致代码注入。

0x03 漏洞利用

需要构造file字段,同时$_GET[‘type’] == ‘custom’且$_GET[‘setup’]和$_GET[‘customtables’]非空。向下跟,还需要满足最后一个条件$_GET[‘method’] != ‘multivol’,这样才能调用else中的操作,完成代码注入。

Discuz! X1.5 ~ X2.5 后台数据库备份功能远程命令执行 Getshell (CVE-2018-14729)

这样可以抓到符合我们条件的请求包。

Discuz! X1.5 ~ X2.5 后台数据库备份功能远程命令执行 Getshell (CVE-2018-14729)

接下来只需要将customtables的内容更改一下就可以造成命令执行了:

Discuz! X1.5 ~ X2.5 后台数据库备份功能远程命令执行 Getshell (CVE-2018-14729)

执行phpinfo

Discuz! X1.5 ~ X2.5 后台数据库备份功能远程命令执行 Getshell (CVE-2018-14729)

相关文章

猜你喜欢

  • Ougishi绿色版下载 V4.00 中文版

    2020-06-19 / 561k

  • 谷歌地图下载助手睿智版破解下载 V9.5绿色版

    2020-06-19 / 32.7M

  • OfficeFIX中文破解版V6.110 注册版

    2020-06-19 / 26.8M

  • Plotagraph破解版V1.2.0 免费版 32/64位

    2020-06-19 / 31.5M

  • IP查详细地址工具下载 V1.1 官方免费版

    2020-06-19 / 408K

  • 内存扫把中文版下载V1.97绿色版

    2020-06-19 / 1.3M

网友评论

验证码:

请自觉遵守互联网相关政策法规,评论内容只代表网友观点,与本站立场无关!

最新评论

已有人参与,点击查看更多精彩评论

关于CE安全网 | 联系方式 | 发展历程 | 版权声明 | 下载帮助(?) | 广告联系 | 网站地图 | 友情链接

Copyright 2019-2029 cesafe.com 【CE安全网】 版权所有 蜀ICP备19039426号-2| 蜀ICP备19039426号-2

声明: 本站为非赢利性网站 不接受任何赞助和广告 所有软件和文章来自互联网 如有异议 请与本站联系 技术支持:ce安全网