织梦DEDECMS安全漏洞之/include/common.inc.php漏洞修复方法
如遇蓝奏网盘打不开lanzous替换成lanzoux尝试!
1.受影响版本DEDECMS 5.7、5.6、5.5。
2.漏洞文件/include/common.inc.php
3.DEDECMS的全局变量初始化存在漏洞,可以任意覆盖任意全局变量。
危害:
1.黑客可以通过此漏洞来重定义数据库连接。
2.通过此漏洞进行各种越权操作构造漏洞直接写入webshell后门。
临时解决方案:
在 /include/common.inc.php 中
找到注册变量的代码
foreach(Array(‘_GET’,’_POST’,’_COOKIE’) as $_request)
{
foreach($$_request as $_k=> $_v) ${$_k}=_RunMagicQuotes($_v);
}
修改为
foreach(Array(‘_GET’,’_POST’,’_COOKIE’) as $_request)
{
foreach($$_request as $_k=> $_v) {
if( strlen($_k)>0 && eregi(‘^(cfg_|GLOBALS)’,$_k) ){
exit(‘Request var not allow!’);
}
${$_k}=_RunMagicQuotes($_v);
}
}
织梦DEDECMS cookies泄漏导致SQL漏洞修复方法,影设计整理如下:
打开文件member/inc/inc_archives_functions.php,搜索(大概在239行的样子)
echo ““;
修改为
echo ““;
红色地方标记了修改的地方,然后保存,惯例接着备份原文件,如inc_archives_functions.php.16.09.03.bak。然后上传修改好的文件即可。
2012-06-06:增加Nginx服务器的配置
在Linux环境下搭建安装DedeCMS本篇不再具体说明,大家可以点击文档《Linux下安装DedeCMS及安全设置》来查看安装和基本安全配置部分的内容。
本篇将在之前的基础上进一步来对Linux下的DedeCMS进行安全配置,以保证我们的站点能够更加安全的运行在服务器上。
为了保证每个虚拟站点都能够拥有自己独立的文件访问权限,我们需要安装Apache安全权限分离模块,在终端中输入:
sudo apt-get install apache2-mpm-itk
接下来我们需要再添加一个后台站点的Apache运行帐号,在终端中输入:
sudo useradd -g www-data -d /dev/null -s /usr/sbin/nologin www-admin
这样我们就添加了一个www-admin帐号,专门用于控制后台站点的文件访问权限。
默认安装后,后台的管理目录是在站点更目录下的/dede,为了安全起见我们需要将这个目录移出,但为了能够正常管理站点,我们需要将这个后台目录创建独立站点。
我们先创建一个目录,这个目录专门用于存放后台站点文件,在终端中输入:
sudo mkdir /var/dedecms-admin
然后将织梦后台移动到这个文件夹中,输入:
sudo mv /var/dedecms/dede/* /var/dedecms-admin/
我们需要创建一个新的站点用于显示后台,我们可以在/etc/apache2/site-enabled/目录中创建一个文件名为:default-admin的文件,内容如下:
ServerName admin.dede.com
ServerAdmin webmaster@localhost
DocumentRoot /var/dedecms-admin
AssignUserId www-admin www-data
Options FollowSymLinks
AllowOverride None
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
创建完成后我们重新启动服务器,在终端输入:
sudo service apache2 restart
这里我们给后台站点域名设置为admin.dedecms.com用户可以根据自己情况设定更为复杂的域名形式,例如:dedesiteadmin2008.dede.com
然后在系统host纪录中添加一条指向站点域名对应ip的纪录,保证其能够正常访问。
为了保证后台文件访问的安全,我们也需要给它设定文件访问权限,在终端中输入:
sudo chown www-admin.www-data /var/dedecms-admin/
这样就给这个目录指定了www-admin的访问帐号。
由于我们直接移动了管理后台文件目录,所以我们访问admin.dede.com会出现报错,这时候我们需要对系统中的目录配置进行调整。
(1)找到/var/dedecms-admin/config.php,将第12行
require_once(DEDEADMIN.’/http://www.dede58.com/a/zhimengjiaocheng/include/common.inc.php’);
改为
require_once(DEDEADMIN.’/http://www.dede58.com/a/zhimengjiaocheng/dedecms/include/common.inc.php’);
然后在这段代码下面加上:
$cfg_plus_dir=$cfg_phpurl=$cfg_basehost.”/”.$cfg_plus_dir;
(2)找到/var/dedecms-admin/login.php,将11行
require_once(dirname(__FILE__).’/http://www.dede58.com/a/zhimengjiaocheng/include/common.inc.php’);
改为
require_once(dirname(__FILE__).’/http://www.dede58.com/a/zhimengjiaocheng/dedecms/include/common.inc.php’);
(3)找到/var/dedecms/data/safe/inc_safe_config.php,第2行,改为
$safe_gdopen=’1,2,3,4,5,7′;
(4)找到/var/dedecms-admin/exit.php,第11行
require_once(dirname(__FILE__).’/http://www.dede58.com/a/zhimengjiaocheng/include/common.inc.php’);
改为
require_once(dirname(__FILE__).’/http://www.dede58.com/a/zhimengjiaocheng/dedecms/include/common.inc.php’);
(5)复制include中的相关文件
我们需要将include文件夹下的一些文件拷贝到管理后台站点中以保证后台正常使用:
mkdir /var/dedecms-admin/include/dialog
sudo cp -R /var/dedecms/include/dialog/* /var/dedecms-admin/include/dialog
mkdir /var/dedecms-admin/include/js
sudo cp -R /var/dedecms/include/js/* /var/dedecms-admin/include/js
sudo mkdir /var/dedecms-admin/include/ckeditor
sudo cp -R /var/dedecms/include/ckeditor/* /var/dedecms-admin/include/ckeditor
设定完成后我们需要给前台站点重新指派权限,在终端输入:
sudo chown -R www-admin.www-data /var/dedecms/
这样就把前台用户设定为了www-admin,然后再执行:
sudo chmod -R 755 /var/dedecms/
这样设置后后台管理就具有了站点操作权限,但前台浏览用户没有修改文件的权限了。
但这里前台uploads需要有可上传的权限,所以还需要执行:
sudo chmod -R 777 uploads/
这样一来我们就完成了系统的安全设置,做到了前后台的权限分离,当然您也需要配置下php.ini禁用掉某些函数,配合系统做好各个方面的安全设置。
如果您需要了解Windows Server 2012下如何搭建配置DedeCMS环境,可以查看:《Windows Server 2012 搭建PHP+MySQL环境安装DedeCMS系统》
由于Nginx轻便容易维护,很多站长也会选择Nginx作为站点服务器,设置思路同上文类似,但有稍许的不同,下面我们就来单独对其进行介绍。
终端中输入:sudo apt-get install nginx
以及:sudo apt-get install php5-fpm
(如果已经安装了Apache的用户需要停止Apache,以免同Nginx冲突,可以使用命令行:sudo service apache2 stop)
同样我们需要添加两个站点,一个前台“www.dede.com”一个后台“admin.dede.com”,基本配置如下:
www.dede.com站点:
server {
root /var/dedecms;
index index.html index.htm index.php;
server_name www.dede.com;
…
location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param script_FILENAME /var/dedecms$fastcgi_script_name;
fastcgi_index index.php;
include fastcgi_params;
}
}
admin.dede.com站点配置:
server {
root /var/dedecms-admin;
index index.html index.htm index.php;
server_name admin.dede.com;
…
location ~ .php$ {
fastcgi_pass 127.0.0.1:9001;
fastcgi_param script_FILENAME /var/dedecms-admin$fastcgi_script_name;
fastcgi_index index.php;
include fastcgi_params;
}
}
这里主要是admin的站点采用的9001端口,以及站点目录重新做了调整。
同apache的apache2-mpm-itk不同,php5-fpm默认就可以进行权限控制。
在文件/etc/php5/fpm/pool.d/www.conf中则是默认采用了“www-data”作为站点的控制用户,所以为了后台具有对应的操作权限,我们需要添加一个专门的控制权限。
cd /etc/php5/fpm
cp www.conf admin.conf
修改admin.conf文件
其中我们只要将:
user=www-admin
group=www-data
listen=127.0.0.1:9001
这几个地方做一个更改即可。
完成后重启下服务
sudo service php5-fpm restart
sudo service nginx restart
在《Linux下安装DedeCMS及安全设置》 中介绍了apache下如何取消目录执行权限,nginx也是类似,但配置方法稍有不同:
server {
…
location ~* ^/uploads/.*.(php|php5)$
{
deny all;
}
}
按照这个方法,将其他目录也同样设置即可。
随着Linux服务器应用范围越来越广泛,国内很多站长也开始使用它作为自己的Web服务器,本篇就来介绍如何在Linux系统环境下安装配置DedeCMS系统。
·Linux(Ubuntu)
·Apache2
·MySQL5
·PHP5.3
服务器需要具备以上几个基本环境,一般Linux的Web操作系统都会默认安装这些组件,当然您也可以自己去安装,具体的安装方法可以通过在线的一些文档获取,这里就不进行深入。
通过www.dedecms.com下载DedeCMS最新版,一般下载包为DedeCMS****.tar.gz格式,Linux下可以使用命令行:
tar -zxvf DedeCMS-****.tar.gz
将解压后的uploads目录上传到站点根目录,我们这里系统站点根目录为:/var/dedecms/
访问http://我的站点/install,点击确认进入服务器环境监察,我们可以看到服务器情况(如图1)。
这里我们发现几个目录没有可写入权限,我们需要给这个目录分为权限。
首先需要给站点目录绑定apache服务的用户,使用命令行:
sudo chown -R www-data /var/dedecms/
这样给站点目录指定权限用户为www-data
我们这里需要给几个无需写入权限的目录去除写入权限,分别输入:
sudo chmod -R 755 /var/dedecms/data/
sudo chmod -R 755 /var/dedecms/html/
sudo chmod -R 755 /var/dedecms/uploads/
sudo chmod -R 555 /var/dedecms/include/
sudo chmod -R 555 /var/dedecms/install/
sudo chmod -R 555 /var/dedecms/dede/
sudo chmod -R 555 /var/dedecms/plus/
sudo chmod -R 555 /var/dedecms/images/
sudo chmod -R 555 /var/dedecms/member/
sudo chmod -R 555 /var/dedecms/special/
sudo chmod -R 555 /var/dedecms/templets/
sudo chmod 555 /var/dedecms/index.php
sudo chmod 555 /var/dedecms/tags.php
这样我们继续执行下一步(如图2)。
我们可以给DedeCMS几个目录关闭可执行权限,这里的可执行是指在Apache中无法运行php脚本,那我们则可以在Apache目录配置中做如下的设置(虚拟机可设置.htaccess)
…
php_admin_flag engine off
php_admin_flag engine off
php_admin_flag engine off
php_admin_flag engine off
php_admin_flag engine off
因为我们这里是PHP5,所以可以按照上面的方法设置。如果是老版本的PHP,那就只能通过:
Order allow,deny
Deny from all
来设定。
至此我们已经完成了DedeCMS的安装和配置。
网站安全中,对目录的执行权限是非常敏感的,一般来说,可以写入的目录是不能够拥有脚本的执行权限的,像DedeCMS系统,可写入的有两个目录data、uploads,data目录主要是基本配置文件和缓存数据,uploads则是附件上传保存的目录,本篇将针对不同服务器环境来介绍如何取消这两个目录的执行权限,当然我们也建议用户其他一些生成纯静态html的目录,拥有可写入权限的也统统去除执行权限,这样系统会更为安全。
打开IIS中站点,在站点uploads目录、data目录以及静态html生成目录点击右键,菜单中选择“属性”,在目录属性面板选择执行权限为“无”即可。(如图1)
(图1)
IIS7也类似于IIS6.0,选择站点对应的目录,data、uploads及静态html文件目录,双击功能试图面板中的“处理程序映射”(如图2)
(图2)
在“编辑功能权限……”中,我们直接去除脚本的执行权限即可。(如图3)
(图3)
在Apache中,没有Windows 下IIS的图形管理界面,我们需要手工修改下apache的配置文件,来进行目录脚本的执行权限的设定。
首先我们找到apache的配置文件httpd.conf,通常情况下,该配置文件在apache安装目录下的conf文件夹中(如图4)。
(图4)
打开httpd.conf文件,找到内容中如图5的位置:
(图5)
将需要限制执行脚本文件的目录配置添加到下方:
配置内容为:
1
2
3
Deny from all
4
5
配置内容中的DIR为需要限制执行脚本文件的目录,FilesMatch后的内容为需要限定的执行的脚本后缀名。例如:这里需要禁止测试站点uploads文件夹下的PHP,ASP,JSP脚本的运行,则进行如下图6配置:
(图6)
在配置完成后,重启一下apache,配置便生效!
在操作前,uploads文件夹下我新建了一个index.php文件,图7为未作配置前访问情况
(图7)
图8为重启apache后访问该页面的效果。
(图8)
在配置前需要确认你的空间是否支持.htaccess和rewrite,该方法基于.htaccess文件中使用rewrite来达到禁止指定脚本的运行效果。
规则内容如下:
1
RewriteEngine on RewriteCond % !^$
2
RewriteRule uploads/(.*).(php)$ – [F]
3
RewriteRule data/(.*).(php)$ – [F]
4
RewriteRule templets/(.*).(php)$ – [F]
针对uploads,data,templets 三个目录做了执行php脚本限制;
将如上内容存储至到.hatccess文件中,将该文件存放到你的站点根目录下,
这样,目录脚本的执行权限就控制好了,规则上传前后的效果同图7,图8。
我们不建议用户把栏目目录设置在根目录,原因是这样进行安全设置会十分的麻烦,在默认的情况下,安装完成后,目录设置如下:
(1) data、templets、uploads、a或5.3的html目录,设置可读写,不可执行的权限;
(2) 不需要专题的,建议删除special 目录,需要可以在生成HTML后,删除special/index.php 然后把这目录设置为可读写,不可执行的权限;
(3) include、member、plus、后台管理目录设置为可执行脚本,可读,但不可写入(安装了附加模块的,book、ask、company、group 目录同样如此设置)。
(1) 虽然对install 目录已经进行了严格处理,但为了安全起见,我们依然建议把它删除;
(2) 不要对网站直接使用MySQL root用户的权限,给每个网站设置独立的MySQL用户帐号,许可权限为:
SELECT, INSERT , UPDATE , DELETE
CREATE , DROP , INDEX , ALTER , CREATE TEMPORARY TABLES
由于DEDE并没有任何地方使用存储过程,因此务必禁用FILE、EXECUTE 等执行存储过程或文件操作的权限。
对于会用Linux 的用户,相信大多数都已经懂得这些东西,IIS用户,请看下图:
3.1设置目录为只读权限
首先复制下权限
设置目录为只读权限
3.2设置目录不允许执行脚本
此外还需要注意问题是,不管IIS还是Apache都不要把.php和.inc文件加入mime中,这样系统会禁止下载这些文件。
如果是Windows2003下,可以对Apache进行如下操作:
4.1在计算机管理里的本地用户和组里面创建一个帐户,例如:DedeApache,密码设置为DedeApachePWD,加入guests组(如果出现问题,可以赋予user权限);
4. 2 打开开始->管理工具->本地安全策略,在“用户权限分配”中选择“作为服务登陆”,添加DedeApache用户;
4.3.计算机管理里面选择服务,找到apache2.2,先停止服务,右击->属性,选择登陆,把单选框从本地系统帐户切换到此帐户,然后查找选择DedeApache,输入密码DedeApachePWD,然后点确定(这个时候apache还不能正常启动,一般情况肯定会报错:Apache2.2 服务因1 (0x1) 服务性错误而停止。);
4.4.赋予apache安装目录(比如:D:/apache2.2)以及web目录(比如D:/wwwroot)DedeApache帐号的可读写权限,去除各磁盘根目录除administror与system以外的所有权限,赋予DedeApache安装目录所在的磁盘根目录apache帐户的可读取列目录权限
我们在站点配置中可以添加如下内容:
01
02
03
Order Allow,Deny
04
Deny from all
05
06
07
08
09
Order Allow,Deny
10
Deny from all
11
12
13
14
15
Order Allow,Deny
16
Deny from all
17
18
19
20
21
Order Allow,Deny
22
Deny from all
23
24
这里对应就取消了对应目录的脚本执行权限。
另外在DedeCMS V5.7中用户也可以设定data目录到上一级非web访问目录,基本操作如下:
5.1.将data目录移动到上一级目录中,这里直接剪切过去就可以了;
5.2.配置include/common.inc.php中DEDEDATA文件
define(‘DEDEDATA’, DEDEROOT.’/data’);
可以改成类如:
define(‘DEDEDATA’, DEDEROOT.’/http://www.dede58.com/a/data’);
5. 3.后台设置模板缓存路径