IIS 6.0
目录名里包含有“.asp”文件会导致其目录下任意文件当做 asp 文件来运行。如果把 webshell 保存为 webshell.gif,当访问http://xxxx.xxx/webshell.gif 时 webshell.gif 被当作asp文件来解析。
apache
apache 解析文件名时,后缀是从后面开始检查,按最后一个合法后缀执行。如:install.php.bak 因为 bak 不被 apache 解析,所以 apache 把这个文件当php文件解析了. 很多web程序安装后,默认会把install.php改名为install.php.lock,install.php.bak等……
IIS7的解决办法:
将 web.config、forbiden.php 放入网站根目录,代码如下:
<!-- web.config --> <?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <rewrite> <rules> <rule name="uploads"> <match url="uploads/(.*).(php)$" /> <action type="Rewrite" url="/forbiden.php?s={R:1}" /> </rule> <rule name="data"> <match url="data/(.*).(php)$" /> <action type="Rewrite" url="/forbiden.php?s={R:1}" /> </rule> <rule name="templets"> <match url="templets/(.*).(php)$" /> <action type="Rewrite" url="/forbiden.php?s={R:1}" /> </rule> <rule name="html"> <match url="html/(.*).(php)$" /> <action type="Rewrite" url="/forbiden.php?s={R:1}" /> </rule> </rules> </rewrite> </system.webServer> </configuration>
// forbiden.php <!doctype html> <html> <head> <meta charset="utf-8"> <meta http-equiv="refresh" content="4; url=http://www.dstdaf.com/" /> <title>404</title> </head> <body> <p>3秒后会转到首页...</p> <h1>没有找到您要查看的页面!</h1> <p>[回首页] [报告错误]</p> </body> </html>
Apache可以参考这个办法应对:
将以下代码放入“httpd.conf”或相应的虚拟主机配件文件中:
# 如果路径中同时存在 upload、js、image 和 .php、jsp、asp 就禁止访问 <DirectoryMatch "(upload(.*)\/|js(.*)\/|image(.*)\/)"> <FilesMatch "\.((php.?|aspx?|jsp)|((php.?\.|jsp\.|aspx?\.).*))$"> Order allow,deny Deny from all </FilesMatch> </DirectoryMatch>
也给apache加个IIS的“漏洞”,让apache也把gif当php执行:
在当前目录放置一个.htaccess文件,内容如下:
AddType application/x-httpd-php .gif
<完>