免费的网站后台,深圳品牌公寓,广告推广免费,加盟类网站怎么做文章目录 一、环境简介一、Apache与php三种结合方法二、Apache解析文件的方法三、Apache解析php的方法四、漏洞原理五、修复方法 一、环境简介 Apache文件解析漏洞与用户配置有密切关系。严格来说#xff0c;属于用户配置问题#xff0c;这里使用ubantu的docker来复现漏洞属于用户配置问题这里使用ubantu的docker来复现漏洞
apt-get install apache2
apt-get install php7.0
apt-get install libapache2-mod-php7.0一、Apache与php三种结合方法
CGI共同网关接口是HTTP服务器与机器上其他程序进行通信的一个接口让web服务器必要时启动额外的程序处理动态内容。FastCGICGI解释器的更快实现可以提供良好的性能、伸缩性等。Modulephp作为apache的模块也是用的最多的一种方法。 Apache文件解析漏洞就发生在Module结合方法上。 查看apache和php的结合方法
二、Apache解析文件的方法
一个重要文件/etc/mime.types 这里记录了大量的文件后缀和mime类型当客户端请求一个文件时如果后缀在这个列表里那么apache一方面返回对应的content-type给浏览器一方面根据文件的MIME类型进行下一步处理。如果不在列表apache不会返回content-type给浏览器而是直接返回文件内容由浏览器自动处理。
cat /etc/mime.types | grep php 这里注释掉关于php的全部项。例如对于第一项后缀名为php/pht/phtml的文件apache将会将其给php处理器进行解析。 三、Apache解析php的方法
/etc/apache2/mods-enabled/php7.2.conf apache通过/etc/mime.types识别文件所属mime类型然后根据MIME类型apache将文件交给对应的程序进行处理。apache或者通过/etc/apache2/mods-enabled/php7.2.conf进行文件匹配用SetHandler设置请求处理程序。 如上图如果php|php3|php5|php7|pht|phtml是请求文件的最后一个后缀则把文件交给php处理器php_module来处理处理完之后把结果返回给apache再由apache发送给浏览器。 四、漏洞原理 Apache文件解析漏洞设计到一个解析文件的特性Apache默认一个文件可以有多个以点分割的后缀当右边的后缀无法识别不在mime.types内则继续向左识别。例如当我们请求这样一个文件shell.php.xxx.yyy
yyy无法被识别向左xxx无法被识别向左php发现后缀是php交给php处理这个文件。 如果apache都不认识将把文件直接返回给客户端也就是爆源码。 在web目录下创建一个1.php.aaa的文件并访问 可以看到并没有被解析成php为什么 因为apache本身并不存在所谓的解析漏洞。让我们回顾解析过程 yyy无法被识别向左xxx无法被识别向左php发现后缀是php交给php解释器处理这个文件。 最后这一步虽然交给php解释器来处理这个文件但是php解释器也不认识.aaa的后缀所以就直接输出了。 其实解析漏洞的产生是由于运维人员在配置服务器时为了使apapche服务器能解析php而自己添加了一个handler例如AddHandler application/x-httpd-php .php。它的作用是为了让apache把文件交给php_module解析就是说在文件名的任何位置匹配到php后缀apache都会让pap_module去解析。
添加一个handler之后访问1.php.xxx.yyy的解析流程是这样 yyy无法被识别向左xxx无法被识别向左php激活php处理器执行php代码。 解析漏洞就产生了。
五、修复方法
不要使用AddHandle改成SetHandler写好正则就不会有解析问题。 禁止.php.这样的文件执行