IIS
IIS
是Internet Information Services
的缩写,意为互联网信息服务,是由微软公司提供的基于运行Microsoft Windows
的互联网基本服务。
IIS目前只适用于Windows系统,不适用于其他操作系统。
IIS 6.x
文件名解析漏洞
该版本默认会将*.asp;.jpg
此种格式的文件名,当成Asp
解析,原理是 服务器默认不解析;
号及其后面的内容,相当于截断。
1 | http://192.168.x.x/test.asp;.jpg |
文件夹名解析漏洞
该版本默认会将*.asp/
目录下的所有文件当成Asp
解析。
1 | http://192.168.x.x/test.asp/xxx.jpg |
另外,IIS6.x
除了会将扩展名为.asp
的文件解析为asp
之外,还默认会将扩展名为.asa
,.cdx
,.cer
解析为asp
修复建议
由于微软并不认为这是一个漏洞,也没有推出IIS 6.0
的补丁,因此漏洞需要自己修复。
- 限制上传目录执行权限,不允许执行脚本。
- 不允许新建目录。
- 上传的文件需经过重命名(时间戳+随机数+.jpg等)
IIS 7.x
IIS 7.x解析漏洞
IIS7.x
版本在Fast-CGI
运行模式下,在任意文件,例:test.jpg
后面加上/.php
,会将test.jpg
解析为php
文件。
1 | http://192.168.x.x/test.jpg/.php |
修复建议
配置php.ini
中的cgi.fix_pathinfo
为0并重启php-cgi
程序
结果如下:
Apache
Apache
是世界使用排名第一的Web
服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。它快速、可靠并且可通过简单的API
扩充,将Perl/Python
等解释器编译到服务器中。
未知扩展名解析漏洞
Apache
的解析漏洞依赖于一个特性: Apache默认一个文件可以有多个以点分割的后缀,当最右边的后缀无法识别(不在mime.types文件内),则继续向左识别,直到识别到合法后缀才进行解析。
访问phpinfo.php.xxx
实战中可以上传rar
,owf
等文件进行利用,如果上传phpinfo.php.jpg
,即使文件名中有.php
,也会直接解析为jpg
。因为Apache
认识.jpg
,停止继续向左识别。
AddHandler导致的解析漏洞
如果运维人员给.php
后缀增加了处理器:
1 | AddHandler application/x-httpd-php .php |
那么,在有多个后缀的情况下,只要一个文件名中含有.php
后缀,即被识别成PHP
文件,没必要是最后一个后缀。
利用这个特性,将会造成一个可以绕过上传白名单的解析漏洞。
即使最右边的文件格式是在mime.types
文件内,只要文件名中出现.php
,就直接被解析为php
。
Apache HTTPD 换行解析漏洞(CVE-2017-15715)
影响范围:2.4.0~2.4.29版本
环境:phpstudy2014 Apache + PHP5.4n
此漏洞形成的根本原因,在于$
, 正则表达式中$
不仅匹配字符串结尾位置,也可以匹配\n
或\r
在解析PHP
时,1.php\x0A
将被按照PHP
后缀进行解析,导致绕过一些服务器的安全策略。
1 | <FilesMatch \.php$> |
测试代码:
1 | <html> |
点击Go后,效果如下:
相同代码在Linux下进行测试,可以正常写入。
访问:
限制:获取文件名时不能用$_FILES[‘file’][‘name’]
,因为它会自动把换行去掉。
修复建议
- 升级到最新版本
- 或将上传的文件重命名为为时间戳+随机数+.jpg的格式并禁用上传文件目录执行脚本权限。
Nginx
Nginx
是一款轻量级的Web
服务器/反向代理服务器及电子邮件(IMAP/POP3)
代理服务器,在BSD-like
协议下发行。其特点是占有内存少,并发能力强,事实上nginx
的并发能力确实在同类型的网页服务器中表现较好
Nginx配置文件错误导致的解析漏洞
对于任意文件名,在后面添加/xxx.php
(xxx为任意字符)后,即可将文件作为php
解析。
例:info.jpg
后面加上/xxx.php
,会将info.jpg
以php
解析。
该漏洞是Nginx
配置所导致,与Nginx
版本无关,下面是常见的漏洞配置。
1 | server { |
当攻击者访问/info.jpg/xxx.php
时, Nginx
将查看URL
,看到它以.php
结尾,并将路径传递给PHP fastcgi
处理程序。
Nginx
传给php
的路径为c:/WWW/info.jpg/xxx.php
,
在phpinfo
中可以查看_SERVER["ORIG_SCRIPT_FILENAME"]
得到。
修复建议
配置php.ini
中的cgi.fix_pathinfo
为0并重启php-cgi
程序
结果如下:
如果需要使用到cgi.fix_pathinfo
这个特性(例如:Wordpress
),那么可以禁止上传目录的执行脚本权限。
或将上传存储的内容与网站分离,即站库分离。
或高版本PHP
提供了security.limit_extensions
这个配置参数,设置security.limit_extensions = .php
转载自lxhsec