常见中间件漏洞

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

修复建议
  1. 限制上传目录执行权限,不允许执行脚本。

  2. 不允许新建目录。

  3. 上传的文件需经过重命名(时间戳+随机数+.jpg等)

IIS7.X

IIS7.x版本 在Fast-CGI运行模式下,在任意文件,例:test.jpg后面加上/.php,会将test.jpg 解析为php文件。

利用前提

该解析漏洞的条件有两个:

  1. 处理程序映射-请求限制

  2. php.inicgi.fix_pathinfo=1(默认1,所以可以不用管)

修复建议

配置php.inicgi.fix_pathinfo=0

短文件名

Microsoft IIS在实现上存在文件枚举漏洞,攻击者可利用此漏洞枚举网络服务器根目录中的文件。

危害:攻击者可以利用"~"字符猜解或遍历服务器中的文件名,或对IIS服务器中的.Net Framework进行拒绝服务攻击。

为了兼容16位MS-DOS程序,Windows为文件名较长的文件(和文件夹)生成了对应的windows 8.3 短文件名。

在Windows下查看对应的短文件名,可以使用命令 dir /x

由于短文件名的长度固定(xxxxxx~xxxx),因此黑客可直接对短文件名进行暴力破解,从而访问对应的文件。

短文件名有以下特征:

  1. 只有前六位字符直接显示,后续字符用~1指代。其中数字1还可以递增,如果存在多个文件名类似的文件(名称前6位必须相同,且后缀名前3位必须相同)。

  2. 后缀名最长只有3位,多余的被截断。

  3. 访问构造的某个存在的短文件名,会返回404

  4. 访问构造的某个不存在的短文件名,会返回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 脚本能够在服务器上正确运行的重要配置之一。

修复建议

  1. 升级到最新版本

  2. 或将上传的文件重命名为为时间戳+随机数+.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;
}
}
  1. 由于nginx.conf的如上配置导致nginx把以'.php'结尾的文件交给fastcgi处理:

  2. 当fastcgi在处理'.php'文件时发现文件并不存在,这时php.ini配置文件中cgi.fix_pathinfo=1 发挥作用,这项配置用于修复路径,如果当前路径不存在则采用上层路径。

  3. 最重要的一点是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

相关推荐
阿昌喜欢吃黄桃13 天前
RocketMq事务消息原理
java·中间件·消息队列·rocketmq·mq
半夜修仙14 天前
延迟队列的介绍及常见问题
java·数据库·中间件·rabbitmq
手握风云-14 天前
一条消息的旅程:RabbitMQ 学习与实践(一)
中间件·rabbitmq
RH23121114 天前
2026.6.8Linux
java·数据库·中间件
理人综艺好会15 天前
双Token机制在实际项目中的应用与实践
中间件·token
番茄去哪了16 天前
神领物流面试题(一)
java·大数据·中间件
念何架构之路16 天前
消息中间件
中间件
都说名字长不会被发现16 天前
Spring Boot Starter 中间件账号密码加密方案设计与实现
java·spring boot·后端·中间件
瀚高PG实验室16 天前
java中间件无法连接数据库
java·数据库·中间件·瀚高数据库
之歆17 天前
Day11_Express 深入解析:从中间件到项目实战
中间件·express