免责申明
本文仅是用于学习检测自己搭建的Web后端服务平台解析漏洞、文件包含漏洞的相关原理,请勿用在非法途径上,若将其用于非法目的,所造成的一切后果由您自行承担,产生的一切风险和后果与笔者无关;本文开始前请认真详细学习《中华人民共和国网络安全法》及其所在国家地区相关法规内容【学法时习之丨网络安全在身边一图了解网络安全法_中央网络安全和信息化委员会办公室】 如您继续阅读该文章即表明您默认遵守该内容。
一、Web后端服务平台解析漏洞和修复
Web网站的运行一般需要后端的服务器平台提供服务解析服务,常见的服务器平台有Apache、Nginx、IIS,而同一服务器下不同版本的服务平台又有不同的解析漏洞。
1.1、Apache解析漏洞
1.1.1、Apache解析漏洞的两种形式
1、Apache典型解析漏洞原理:Apache解析文件的规则是从右到左开始判断解析,若文件后缀名为其不可识别的解析类型,就会向左移动判断(如:testck.php.hwk.rar文件其中【hwk】和【rar】 这两种后缀是Apache不可识别解析的文件类型,Apache就会把testck.php.hwk.rar解析成testck.php文件)。【该漏洞常见于Apache2.2及其之前的版本】
# Apache解析漏洞典型
http://xxx.xxx.com/testck.php.Apache不可解析的文件类型
# 示例
http://xxx.xxx.com/testck.php.php123
http://xxx.xxx.com/testck.php.hwk
http://xxx.xxx.com/testck.php.ck
2、 用户操作配置问题导致的解析漏洞(该漏洞是由于用户或运维人员配置操作引起的,可以避免掉):
《1》修改并启用了Apache的【httpd.conf】配置文件的【 AddHandler php5-script 】内容,并添加了其他类型如(.ck .jpg .pdf)类型,那么只要文件名里包含.php 即使文件名是 test.php.ck也会以 php 的方式来执行。
《2》修改并启用了Apache的【httpd.conf】配置文件的【AddType application/x-httpd-php .php .phtml】内容,并添加了其他的类型如(.jpg .php3 .php5)类型,那么这些类型的文件都可以被打开且以php的方式进行执行,如下图所示:
1.1.2、Apache解析漏洞的修复方法
《1》通过了解Apache的漏洞原理我们可以知道,造成的漏洞都是由于文件名包含【.php.】引起的,那么我们可以将这种类型禁止掉即可。
# 禁止掉Apache可以解析.php.或.php3.或.php5.文件内容配置命令:
<Files ~ ".(php.|php3.|php5.)">
Order Allow,Deny
Deny from all
</Files>
《2》用伪静态能解决这个漏洞,重写类似.php.*这类文件,打开Apache的httpd.conf配置文件并找到【LoadModule rewrite_module modules/mod_rewrite.so】把#号去掉后重启Apache;然后在网站根目录下创建名为【.htaccess】的文件。
在网站根目录下创建名为【.htaccess】的文件内容如下:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .(php.|php3.|php5.) /index.php
RewriteRule .(pHp.|pHp3.|php5.) /index.php
RewriteRule .(phP.|phP3.|php5.) /index.php
RewriteRule .(Php.|Php3.|php5.) /index.php
RewriteRule .(PHp.|PHp3.|php5.) /index.php
RewriteRule .(PhP.|PhP3.|php5.) /index.php
RewriteRule .(pHP.|pHP3.|php5.) /index.php
RewriteRule .(PHP.|PHP3.|php5.) /index.php
</IfModule>
1.2、Nginx解析漏洞
1.2.1、Nginx解析漏洞形式
《1》PHP的配置文件【php.ini】是默认启用【cgi.fix_pathinfo】配置(该配置是修复路径信息内容的)【cgi.fix_pathinfo】配置为1表示启用,0表示禁用【该Nginx的解析漏洞是由于用户或运维人员配置不当引起的,与Nginx和PHP的版本无关】(该漏洞原理是:我们的服务器被上传了【test.jpg】的木马,正常我们访问test.jpg路径为【http://192.168.3.176/pikachu/test.jpg】,若我们要想将test.jpg当做php执行就可以修改路径为【http://192.168.3.176/pikachu/test.jpg/xx.php】,此处我们构造的这个xx.php文件在服务器上是不存在的。而我们的服务器PHP开启了【cgi.fix_pathinfo】配置,此时PHP的解释器处理在处理这个路径的时候,发现没有xx.php这个文件,此时就会找路径中上一层路径的文件作为xx.php来运行,于是就找到了test.jpg,将test.jpg当作xx.php来运行了)效果如下: