Apache默认配置支持解析CGI (Common Gateway Interface) (仅cgi-bin目录),不解析SSI(Server Side Includes)和.htaccess。当配置不当时,可能导致系统命令执行。本文由腾讯安全应急响应中心的Mark4z5同学通过实验来探讨开启解析CGI/SSI/.htaccess的危害以及安全建议。
一、安装实验环境
二、解析CGI (Common Gateway Interface)
http://httpd.apache.org/docs/current/howto/cgi.html
先看httpd.conf相关默认配置
可以看到默认/cgi-bin/目录可解析CGI,但是当打开网页时,并没有执行输出,
原因是程序默认并没有赋予X执行权限,
当赋予X执行权限后,
可以执行CGI,
那么当攻击者可以往/cgi-bin/目录写文件,或者服务器管理员配置某个可写目录解析CGI时,就会造成严重危害,执行系统命令。如
执行系统命令id并输出,
三、解析SSI (Server Side Includes)
http://httpd.apache.org/docs/current/howto/ssi.html
先看httpd.conf相关默认配置
默认并不解析SSI,开启解析可配置如下,
当攻击者上传.shtml文件时,可以执行任意系统命令。如
执行id并输出,
四、解析.htaccess
http://httpd.apache.org/docs/current/howto/htaccess.html
先看httpd.conf相关默认配置
默认并不解析.htaccess,当配置解析时
攻击者只要可以上传.htaccess文件和其他恶意文件,就可以让apache解析CGI/SSI来执行系统命令。如下,
五、安全建议
1、如果CGI&SSI非必需,则编译apache时禁用掉,参数为(--disable-cgi --disable-cgid --disable-include)
2、如果CGI&SSI为必需,则在httpd.conf配置可写目录禁止AllowOverride,且Options为FollowSymLinks。
<Directory "/usr/local/apache2/htdocs/YourPath">
Options FollowSymLinks
AllowOverride None
</Directory>
注:Options可以按需设置,但绝不能设置成ExecCGI或Includes;AllowOverride None是禁止解析.htaccess。
【最后】
已配置php安全模式的Apache并不完全能防止webshell执行系统命令,因为Apache本身支持CGI和SSI执行系统命令。
原味连接:blog.sina.com.cn/s/blog_e092fd2f0102v6oa.html