Apache、Nginx、IIS文件解析漏洞

目录

1、文件解析漏洞介绍

2、Apache相关的解析漏洞

(1)多后缀解析漏洞

(2)Apache配置问题

(3)换行符解析漏洞

(4)罕见后缀解析

3、Nginx相关的解析漏洞

(1)Nginx PHP CGI 解析漏洞(fix_pathinfo)

(2)空字节代码执行漏洞

(3)nginx文件名逻辑漏洞(CVE-2013-4547)

4、IIS相关的解析漏洞

(1)IIS 5.x和IIS 6.x解析漏洞

1目录解析(6.0)

2.文件解析(6.0)

3.解析文件类型(默认解析后缀)

(2)IIS 7.0/7.5 CGI解析漏洞


最近在学习解析漏洞,在这里参考几个大佬写好的文章来进行一个学习+练习

1、文件解析漏洞介绍

文件解析漏洞主要由于网站管理员操作不当或者 Web 服务器自身的漏洞,导致一些特殊文件被 IIS、apache、nginx 或其他 Web服务器在某种情况下解释成脚本文件执行。

其中存在的大部分的解析漏洞是由于web服务器自身配置错误的漏洞,导致特殊文件被当成脚本文件执行。

2、Apache相关的解析漏洞

(1)多后缀解析漏洞

漏洞描述:在存在多后缀解析漏洞版本的Apache 解析文件的规则是从右到左开始判断解析,如果后缀名为不可识别文件解析,就再往左判断,直到找到可以解析的文件。

所以可上传一个test.php.qwzf文件绕过验证且服务器在解析test.php.qwzf不成功后,依然会向前进行查找,找到了tet.php,可以解析,那么就会将test.php.qwzf作为php来进行解析。

Apache 能够识别的文件在mime.types文件里。

影响版本

Apache 2.0.x <= 2.0.59

Apache 2.2.x <= 2.2.17

Apache 2.2.2 <= 2.2.8

测试

这里测试使用vulhub靶场,进入到下列路径中,使用docker-compose拉取环境:

/root/vulhub-master/httpd/apache_parsing_vulnerability

拉取完环境后,进入到容器中查看apache版本

尝试在浏览器中访问:

可以看到是一个文件上传漏洞,那么尝试上传一个php文件看看:

可以看到提示我们上传的文件类型不支持,因此尝试上传一个jpg文件

可以看到上传成功了,尝试访问:

可以看到也是陈工国的访问到了,那么下面就可以尝试对一个php文件进行处理,修改名称为phpinfo.php.jpg后再次上传:

可以看到成功上传了,尝试访问但是却没有解析成功

看了靶场的官方文档,是这样说的:如果运维人员给.php后缀增加了处理器:

AddHandler application/x-httpd-php .php

那么,在有多个后缀的情况下,只要一个文件含有.php后缀的文件即将被识别成PHP文件,没必要是最后一个后缀。利用这个特性,将会造成一个可以绕过上传白名单的解析漏洞。

那么应该是配置文件的问题,查看配置文件:

发现配置文件并没有问题啊,按道理应该是可以解析的啊

后来看到网上的案例才发现是操作错了

应该是上传一个php文件的同时使用burpsuite抓包,尝试上传php文件会发现不支持:

然后这里尝试修改后缀如下后再次上传:

可以看到上传成功了,尝试访问上传成功的图片

可以看到成功解析了

(2)Apache配置问题

注:很多中间键导致的漏洞都是运维人员手动配置时配置不当导致的

漏洞描述

apache中的/etc/apache2/apache2.conf里如果有这样的配置

<FilesMatch "qwzf.jpg">  SetHandler application/x-httpd-php</FilesMatch>

这时只要文件名是qwzf.jpg,会以php 来执行。

或者如果在Apache的 conf 里有这样一行配置

AddHandler php5-script .php

这时只要文件名里包含.php 即使文件名是qwzf.php.jpg也会以php 来执行。

或者如果在 Apache 的 conf 里有这样一行配置

AddType application/x-httpd-php .jpg

这时即使扩展名是.jpg,也会以php来执行。

Apache提供了一种很方便的、可作用于当前目录及其子目录的配置文件——.htaccess(分布式配置文件)

前提条件

将Apache的/etc/apache2/sites-available/defaultAllowOverride None改为

1.AllowOverride All

AllowOverride All

2.开启rewrite_mod

a2enmod rewrite

这样.htaccess文件才会生效。

(3)换行符解析漏洞

Apache HTTPD是一款HTTP服务器,它可以通过mod_php来运行PHP网页。

其2.4.0~2.4.29版本中存在一个解析漏洞,在解析PHP时,1.php\x0A将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。

漏洞描述:上传一个后缀末尾包含换行符的文件,来绕过FilesMatch。绕过FilesMatch不一定能被PHP解析。

这个漏洞可以用来绕过文件上传黑名单限制。即:

1.php\x0a => 1.php

apache通过mod_php来运行脚本,其2.4.0-2.4.29中存在apache换行解析漏洞,在解析php时xxx.php\x0A将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。

该漏洞属于用户配置不当产生的漏洞,与具体中间件版本无关。

影响版本:Apache 2.4.0-2.4.29

测试:

这里还是用vulhub中的环境,移动到下列目录中,使用docker-compse拉取环境:

/root/vulhub-master/httpd/CVE-2017-15715

环境拉取完成后,我们尝试在浏览器中访问一下:

可以看到这里我们可以上传文件,并且可以命名文件的名字,尝试上传一个php文件

可以看到返回 bad file

这里在phpinfo.php后面插入一个+:

在Hex中对插入的值进行修改,修改为

修改完成后,可以看到这里确实是有一个换行的操作,然后再次尝试发送:

可以看到发送成功了

访问上传后的文件:

可以看到成功的解析了

(4)罕见后缀解析

Apache配置文件中会有.+.ph(p[345]?|t|tml)此类的正则表达式,被当php程序执行的文件名要符合正则表达式。

也就是说php3,php4,php5,pht,phtml等文件后缀也是可以被当作php文件进行解析的。

这里就可以用uploads-labs靶场的第3关来进行测试

尝试上传php文件

会发现不能上传,尝试上传php3文件

可以看到上传成功了,尝试访问发现也成功的解析了

3、Nginx相关的解析漏洞

(1)Nginx PHP CGI 解析漏洞(fix_pathinfo)

漏洞描述

(1)Nginx默认是以CGI的方式支持PHP解析的,普遍的做法是在Nginx配置文件中通过正则匹配设置SCRIPT_FILENAME。

当访问http://x.x.x.x/phpinfo.jpg/1.php这个URL时,$fastcgi_script_name会被设置为phpinfo.jpg/1.php,然后构造成SCRIPT_FILENAME传递给PHP CGI。

(2)但PHP为什么会接受这样的参数,并将phpinfo.jpg作为PHP文件解析呢? 这就涉及到fix_pathinfo选项了。

如果PHP中开启了fix_pathinfo这个选项,PHP会认为SCRIPT_FILENAME是phpinfo.jpg,而1.php是PATH_INFO,所以就会将phpinfo.jpg作为PHP文件来解析了。

简单来说,由于Nginx的特性,只要URL中路径名以.php结尾,不管该文件是否存在,直接交给php处理。

注:新版本php引入了security.limit_extensions,限制了可执行文件的后缀,默认只允许执行.php文件 使得该漏洞难以被成功利用

相关知识

(1)通过phpinfo查看cgi.fix_pathinfo=1,PHP里经常要获取当前请求的URL路径信息。

一般可以通过环境变量$_SERVER[‘PATH_INFO’]获取,而配置文件中的cgi.fix_pathinifo选项则与这个值的获取相关。

(2)在PHP的配置文件中有一个关键的选项cgi.fix_pathinfo默认是开启的,当URL中有不存在的文件,PHP就会向前递归解析。

影响版本:漏洞与Nginx、php版本无关,属于用户配置不当造成的解析漏洞

测试:

这里测试的环境还是使用vulhub靶场,移动到如下目录中,然后拉取环境:

/root/vulhub-master/nginx/nginx_parsing_vulnerability

环境拉取完成后,尝试在浏览器访问:

只是一张图片,没有进行解析,这里就需要利用nginx  php cgi解析漏洞的,我们访问如下链接:

图片url/.php

可以看到这里就成功的进行了解析

修复方法

1.修改php.ini文件,将cgi.fix_pathinfo的值设置为0(慎用); 若实在将cgi.fix_pathinfo的值设置为0,就将php-fpm.conf中的security.limit_extensions后面的值设置为.php

2.在Nginx配置文件中添加以下代码:

if ( $fastcgi_script_name ~ ..*/.*php ) {return 403;}

代码的意思:当匹配到类似test.jpg/a.php的URL时,将返回403错误代码。

3.使用Apache服务器的,在相应目录下放一个 .htaccess 文件,内容为:

<FilesMatch "(?i:\.php)$">    Deny from all</FilesMatch>

4.不提供上传的原文件访问,对文件输出经过程序处理。5.图片单独放一个服务器上,与业务代码数据进行隔离。

(2)空字节代码执行漏洞

漏洞描述:Ngnix在遇到%00空字节时与后端FastCGI处理不一致,导致可以在图片中嵌入PHP代码然后通过访问xxx.jpg%00.php来执行其中的代码

影响版本: Nginx 0.5.x Nginx 0.6.x Nginx 0.7-0.7.65 Nginx 0.8-0.8.37

测试流程

1.上传一个xxx.jpg图片文件

2.访问http://x.x.x.x/xxx.jpg%00.php

3.就会将xxx.jpg作为PHP文件进行解析

修复方法

1.升级nginx

2.禁止在上传文件目录下执行php文件

3.在nginx配置或者fcgi.conf配置添加下面内容:

if ($request_filename ~* (.*)\.php) {    set $php_url $1;}if (!-e $php_url.php) {    return 403;}

(3)nginx文件名逻辑漏洞(CVE-2013-4547)

漏洞描述

1.漏洞产生原因:错误地解析了请求的URL,错误地获取到用户请求的文件名,导致出现权限绕过、代码执行的连带影响。

2.漏洞原理:Nginx匹配到.php结尾的请求,就发送给fastcgi进行解析,常见写法:

location ~ \.php$ {    include        fastcgi_params;    fastcgi_pass   127.0.0.1:9000;    fastcgi_index  index.php;    fastcgi_param  SCRIPT_FILENAME  /var/www/html$fastcgi_script_name;    fastcgi_param  DOCUMENT_ROOT /var/www/html;}

(1)在关闭fix_pathinfo的情况下(即cgi.fix_pathinfo=0),只有.php后缀的文件才会被发送给fastcgi解析

(2)存在CVE-2013-4547时,请求qwzf.jpg[0x20][0x00].php,这个URI可匹配到正则\.php$,进入到Location块;

(3)进入后,Nginx错误地认为请求的文件是qwzf.jpg[0x20],然后设置其为SCRIPT_FILENAME的值发送给fastcgi。

(4)fastcgi根据SCRIPT_FILENAME的值,将qwzf.jpg[0x20]以php文件的形式进行解析,从而造成了解析漏洞。也就是说,我们只需要上传一个空格结尾的文件,即可用PHP进行解析。

影响版本: Nginx 0.8.41-1.4.3 Nginx 1.5 -1.5.7

测试:

这个还是使用vulhub靶场,移动到如下路径,然后拉取环境

/root/vulhub-master/nginx/CVE-2013-4547

拉取环境后,在浏览器中尝试访问,可以看到是一个上传文件的功能

上传一个jpg文件,文件名为pp.jpg,文件内容为(或者上传图片马):

使用burp添加aa.php

使用burp的hex功能,对aa的十六进制进行修改:

发包,可以看到成功上传:

尝试访问该文件:

还是同样的操作需要增加aa.php并且修改aa的hex值->20 00 

可以看到成功的访问到,并且解析了

4、IIS相关的解析漏洞

(1)IIS 5.x和IIS 6.x解析漏洞

使用iis5.x-6.x版本的服务器,大多为windows server 2003,网站比较古老,开发语言一般为asp;该解析漏洞也只能解析asp文件,而不能解析aspx文件。

测试环境:因为找不到相关环境,所以这里只阐述相关原理和相关知识。

1目录解析(6.0)

形式http://www.xxx.com/xx.asp/xx.jpg

原理: 服务器默认会把.asp.asa目录下的文件都解析成asp文件。

2.文件解析(6.0)

形式http://www.xxx.com/xx.asp;.jpg

原理服务器默认不解析;号后面的内容,因此xx.asp;.jpg便被解析成asp文件

3.解析文件类型(默认解析后缀)

有的网站会设置黑名单上传限制 ,IIS6.0 默认的可执行文件除了asp还包含这三种 :

/xx.asa/xx.cer/xx.cdx

iis把asa,cdx,cer解析成asp文件的原因:这四种扩展名都是用的同一个asp.dll文件来执行。

修复方法

1.阻止创建.asp.asa类型的文件夹

2.阻止上传xx.asp;.jpg类型的文件名

3.阻止上传.asa.cer.cdx后缀的文件

4.设置权限,限制用户创建文件夹

(2)IIS 7.0/7.5 CGI解析漏洞

漏洞描述:IIS7/7.5的漏洞与nginx的类似,都是由于php配置文件中,开启了cgi.fix_pathinfo,而这并不是nginx或者iis7/7.5本身的漏洞。

漏洞产生的条件:php.ini里的cgi.cgi_pathinfo=1 IIS7在Fast-CGI运行模式下

常用利用方法:上传图片马

到此,Nginx/Apache/IIS相关的解析漏洞就暂时学习完成了

参考链接:

浅谈解析漏洞的利用与防范-安全客 - 安全资讯平台

文件解析漏洞-CSDN博客

Nginx常见的中间件漏洞_nginx常见漏洞-CSDN博客

Vulhub - Docker-Compose file for vulnerability environment

文件上传漏洞:upload-labs靶场通关_文件上传漏洞靶场闯关教程-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/18365.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《java数据结构》--栈的详解

一.栈的认识 栈是一种不同于链表和顺序表的储存数据结构&#xff0c;它对存储数据和取出数据有着特殊的要求&#x1f914;。 首先栈只能从一端存储数据&#xff0c;也就是从一端进&#xff0c;还从这一端出这也是栈最大的特点&#xff0c;这也导致在栈中存取数据都必须遵循先…

C++线程任务队列模型

功能描述 实现一个任务队列&#xff0c;用于任务的执行 任务队列 任务队列可以添加、删除任务&#xff0c;实现对任务的管理添加任务后&#xff0c;任务队列可以开始执行任务队列执行任务方式为串行执行 任务 任务执行需要持续一段10s内随机的时间&#xff0c;执行过程通过…

打造爆款活动:确定目标受众与吸引策略的实战指南

身为一名文案策划经理&#xff0c;我深知在活动策划的海洋中&#xff0c;确定目标受众并设计出能触动他们心弦的策略是何等重要。 通过以下步骤&#xff0c;你可以更准确地确定目标受众&#xff0c;并制定出有效的吸引策略&#xff0c;确保活动的成功&#xff1a; 明确活动目…

【Oracle篇】rman标准化全库备份策略:完整备份or增量备份(第三篇,总共八篇)

&#x1f4ab;《博主介绍》&#xff1a;✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ &#x1f4ab;《擅长领域》&#xff1a;✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux&#xff0c;也在扩展大数据方向的知识面✌️…

单元测试框架Pytest的基本操作

Pytest基本操作 1. 详解1.1 命名规则:1.2 自定义查找规则:1.3 3种运行方式1.4 执行顺序2. 断言2.1 定义2.2 断言的规则3. mark3.1 mark的作用3.2 mark的标记方式3.3 注册标签名3.4 skip跳过标记4. pytest的参数化5. pytest的夹具(fixture测试夹具)5.1. 作用5.2. 夹具应用场…

web前端框架设计第十一课-常用插件

web前端框架设计第十一课-常用插件 一.预习笔记 1.路由的基础使用 2.动态路由 3.嵌套路由 二.课堂笔记 三.课后回顾 –行动是治愈恐惧的良药&#xff0c;犹豫拖延将不断滋养恐惧

Web渗透-MySql-Sql注入:联合查询注入

SQL注入&#xff08;SQL Injection&#xff09;是一种网络攻击技术&#xff0c;攻击者通过将恶意的SQL代码插入到应用程序的输入字段&#xff0c;从而欺骗应用程序执行未经授权的操作。这种攻击方式可以导致严重的安全问题&#xff0c;包括&#xff1a; 数据泄露&#xff1a;攻…

UE5 UE4 快速定位节点位置

在材质面板中&#xff0c;找到之前写的一个节点&#xff0c;想要修改&#xff0c;但是当时写的比较多&#xff0c;想要快速定位到节点位置. 在面板下方的 Find Results面板中&#xff0c;输入所需节点&#xff0c;找结果后双击&#xff0c;就定位到该节点处。 同理&#xff0c;…

【CUDA】Nsight profile驱动的CUDA优化

前置准备 安装NVIDIA Nsight Compute。 安装好后选择使用管理员权限启动下载官方 Demo 代码官方博客Shuffle warp 1. 任务介绍及CPU版本 1.1 任务介绍 任务理解&#xff1a; 有一个 L x M 的矩阵 M 1 M_1 M1​ 对其每行取平均值 得到 V 1 ∈ R L 1 V_1 \in \mathbb{R}^{…

pikachu—exec“eval“

这是原画面 然后呢&#xff1f; 我们知道会传入到后台rce_eval.php来处理然后通过 eval()是啥? 在eval括号里面可以执行外来机器的命令 然后我们通过php的一个内置的命令 我们通过phpinfo()&#xff1b; 这是输入后的结果

(四十八)第 7 章 图(图的数组(邻接矩阵)存储)

1. 背景说明 2. 示例代码 1) errorRecord.h // 记录错误宏定义头文件#ifndef ERROR_RECORD_H #define ERROR_RECORD_H#include <stdio.h> #include <string.h> #include <stdint.h>// 从文件路径中提取文件名 #define FILE_NAME(X) strrchr(X, \\) ? strrch…

《python编程从入门到实践》day41

# 昨日知识点回顾 用户注销、注册&#xff0c;限制访问&#xff0c;新主题关联到当前用户 # 今日知识点学习 第20章 设置应用程序的样式并部署 20.1 设置项目“学习笔记”的样式 20.1.1 应用程序django-bootstrap4 # settings.py ---snip--- INSTALLED_APPS [# 我的应用程序…

链式法则:神经网络前向与反向传播的基石

在深度学习的浪潮中&#xff0c;神经网络以其强大的学习和预测能力&#xff0c;成为解决复杂问题的有力工具。而神经网络之所以能够不断学习和优化&#xff0c;离不开两个核心过程&#xff1a;前向传播和反向传播。其中&#xff0c;链式法则作为微积分学中的一个基本概念&#…

(C11) 泛型表达式

文章目录 ⭐语法⭐举例&#x1f6a9;判断对象类型&#x1f6a9;判断指针&#x1f6a9;函数重载&#x1f6a9;嵌套使用 END ⭐语法 Ref: 泛型选择 (C11 起) - cppreference.com 关键词&#xff1a; Genericdefault _Generic(控制表达式 , 关联列表) (C11 起) 关联列表 类型名:…

PHP:phpmyadmin 将查询数据导出csv

1、输入你的SQL查询出结果 2、查出数据以后拖到最下方【导出】 3、导出CSV

京东二面:Sychronized的锁升级过程是怎样的

引言 Java作为主流的面向对象编程语言&#xff0c;提供了丰富的并发工具来帮助开发者解决多线程环境下的数据一致性问题。其中&#xff0c;内置的关键字"Synchronized"扮演了至关重要的角色&#xff0c;它能够确保在同一时刻只有一个线程访问特定代码块或方法&#…

新书速览|Golang+Vue.js商城项目实战

架构师一步一步教你做项目&#xff0c;从架构设计到技术实现完整解析 本书内容 《GolangVue.js商城项目实战》以Gin和Vue.js为核心框架&#xff0c;以全栈商城项目开发为主线&#xff0c;详尽介绍前后端分离架构开发Web网站项目的关键阶段和技术细节。全书共9章&#xff0c;第…

多模态MLLM都是怎么实现的(9)-时序LLM是怎么个事儿?

时序预测这东西大家一般不陌生,随便举几个例子 1- 金融,比如预测股票(股市有风险,入市需谨慎),纯用K线做,我个人不太推荐 2- 天气,比如预测云图,天气预报啥的 3- 交通,早晚高峰,堵车啥的,车啥时候加油,啥时候充电之类的 4- 医疗,看你病史和喝酒的剂量建模,看你会…

华为实训课笔记 2024

华为实训 5/205/215/225/235/275/28 5/20 5/21 5/22 5/23 5/27 5/28

BLE蓝牙模块在车联网中的智能开锁、数据监控应用

随着科技的不断发展&#xff0c;车联网已经成为了汽车行业的一个热门话题。在这个领域中&#xff0c;BLE蓝牙模块发挥着重要的作用&#xff0c;特别是在智能开锁和数据监控方面的应用。本文将详细介绍BLE蓝牙模块在这两个方面的应用及其优势。   一、智能开锁   1.车辆远程…