IIS
IIS是Internet Information Services的缩写,意为互联网信息服务,是由微软公司提供的基于运行Microsoft Windows的互联网基本服务。
IIS 目前只适用于 Windows系统,不适用于其他操作系统。
解析漏洞
IIS6.x
该版本 默认会将 *.asp;.jpg 此种格式的文件名,当成Asp解析,原理是 服务器默认不解析; 号及其后面的内容,相当于截断。
172.xxx.xxx.xxx/test/1.asp;.jpg
文件的类型还是jpg,但是当解析时,就会被解析成.asp文件,从而达到绕过上传类型检测的目的,上传一个木马。
基于文件夹名
该版本 默认会将 *.asp/目录下的所有文件当成Asp解析。
172.xxx.xxx.xxx/test/1.asp/1.jpg ,会将1.jpg作为.asp文件解析
另外,IIS6.x除了会将扩展名为.asp的文件解析为asp之外,还默认会将扩展名为.asa,.cdx,.cer解析为asp
修复建议
-
限制上传目录执行权限,不允许执行脚本。
-
不允许新建目录。
-
上传的文件需经过重命名(时间戳+随机数+.jpg等)
IIS7.X
IIS7.x版本 在Fast-CGI运行模式下,在任意文件,例:test.jpg后面加上/.php,会将test.jpg 解析为php文件。
利用前提
该解析漏洞的条件有两个:
-
处理程序映射-请求限制
-
php.ini
里cgi.fix_pathinfo=1
(默认1,所以可以不用管)
修复建议
配置php.ini
里cgi.fix_pathinfo=0
短文件名
Microsoft IIS在实现上存在文件枚举漏洞,攻击者可利用此漏洞枚举网络服务器根目录中的文件。
危害:攻击者可以利用"~"字符猜解或遍历服务器中的文件名,或对IIS服务器中的.Net Framework进行拒绝服务攻击。
为了兼容16位MS-DOS程序,Windows为文件名较长的文件(和文件夹)生成了对应的windows 8.3 短文件名。
在Windows下查看对应的短文件名,可以使用命令 dir /x
由于短文件名的长度固定(xxxxxx~xxxx),因此黑客可直接对短文件名进行暴力破解,从而访问对应的文件。
短文件名有以下特征:
-
只有前六位字符直接显示,后续字符用~1指代。其中数字1还可以递增,如果存在多个文件名类似的文件(名称前6位必须相同,且后缀名前3位必须相同)。
-
后缀名最长只有3位,多余的被截断。
-
访问构造的某个存在的短文件名,会返回404
-
访问构造的某个不存在的短文件名,会返回400
修复建议
关闭NTFS 8.3文件格式的支持。
Apache
Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python等解释器编译到服务器中。
解析漏洞
未知扩展名解析漏洞
影响版本
使用module模式与php结合的所有版本,apache存在未知扩展名解析漏洞;使用fastcig模式与php结合的所有版本,apache不存在此漏洞。
Apache 解析文件的规则是从右到左开始判断解析,如果后缀名为不可识别文件解析,就再往左判断。比
如 test.php.owf.rar ".owf"和".rar" 这两种后缀是apache不可识别解析,apache就会把wooyun.php.owf.rar解
析成php。
配置不当导致解析漏洞
如果运维人员给.php后缀增加了处理器:
AddHandler application/x-httpd-php .php
那么,在有多个后缀的情况下,只要一个文件名中含有.php后缀,即被识别成PHP文件,没必要是最后一个后缀。
利用这个特性,将会造成一个可以绕过上传白名单的解析漏洞。
换行解析漏洞( CVE-2017-15715)
影响范围:2.4.0~2.4.29版本
此漏洞形成的根本原因,在于, 正则表达式中不仅匹配字符串结尾位置,也可以匹配\n 或 \r
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
这段代码的主要目的是告诉 Apache 服务器,当遇到以 .php
结尾的文件时,应使用其内置的 PHP 处理器来执行这些文件。这是确保 PHP 脚本能够在服务器上正确运行的重要配置之一。
修复建议
-
升级到最新版本
-
或将上传的文件重命名为为时间戳+随机数+.jpg的格式并禁用上传文件目录执行脚本权限
Nginx
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,
配置文件错误导致的解析漏洞
该漏洞是Nginx配置所导致,与Nginx版本无关,下面是常见的漏洞配置。
server {
location ~ \.php$ {
root /work/www/test;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME
$document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_pass unix:/tmp/php-fpm.sock;
}
}
-
由于nginx.conf的如上配置导致nginx把以'.php'结尾的文件交给fastcgi处理:
-
当fastcgi在处理'.php'文件时发现文件并不存在,这时php.ini配置文件中cgi.fix_pathinfo=1 发挥作用,这项配置用于修复路径,如果当前路径不存在则采用上层路径。
-
最重要的一点是php-fpm.conf中的security.limit_extensions配置项限制了fastcgi解析文件的类型(即指定什么类型的文件当做代码解析),此项设置为空的时候才允许fastcgi将'.png'等文件当做代码解析。
错误配置导致的漏洞
CRLF注入漏洞
漏洞原理
CRLF是"回车+换行"(\r\n)的简称,其十六进制编码分别为0x0d和0x0a。在HTTP协议中,HTTP header与HTTP Body是用两个CRLF分隔的,浏览器就是根据这两个CRLF来取出HTTP内容并显示出来。所以,一旦我们能够控制HTTP消息头中的字符,注入一些恶意的换行,这样我们就能注入一些会话Cookie或者HTML代码。CRLF漏洞常出现在Location与Set-cookie消息头中。
Nginx在配置HTTP请求强制跳转到HTTPS时,会返回一个302和跳转路径如下图:攻击者则可以注入一个CLRF符号来重新控制HTTP头的内容或者HTTP body的内容。
修复建议
location / {
return 302 https://$host$request_uri;
}
目录穿越漏洞和目录遍历漏洞
漏洞原理
如果nginx在配置目录别名(Alias)时,忘了在别名后加"/",就会造成目录穿越漏洞,能被利用来读取web目录以外的文件。
当Nginx配置文件中,autoindex 的值为on时,将造成一个目录遍历漏洞
错误的文件配置:
location /files {
autoindex on;
alias c:/WWW/home/;
}
修复建议
目录穿越漏洞:在别名后面添加上"/"就可以了。
目录便利漏洞:将autoindex 的值为置为off