Web漏洞分析-文件解析及上传(上)

       随着互联网的迅速发展,网络安全问题变得日益复杂,而文件解析及上传漏洞成为攻击者们频繁攻击的热点之一。本文将深入研究文件解析及上传漏洞,通过对文件上传、Web容器IIS、命令执行、Nginx文件解析漏洞以及公猫任意文件上传等方面的细致分析,揭示这些漏洞背后的本质和攻击方式。
       文件上传漏洞一直是攻击者们渗透系统的首选方式。通过构造巧妙的上传文件,攻击者能够实施多种恶意行为,如上传包含恶意脚本的文件,从而实现远程代码执行。本文将深入探讨文件上传漏洞的工作原理、攻击场景,并通过实际案例为读者提供更直观的理解,帮助其更好地认识这一类型漏洞的威胁性。
       在网络攻击的舞台上,Web容器扮演着至关重要的角色。特别是在Windows操作系统下,IIS作为最为常见的Web服务器,存在着多种可能的文件解析和上传漏洞。本文将详细探讨这些潜在的漏洞,揭示攻击者如何善用这些漏洞渗透系统,以帮助读者更全面地了解并防范这一类威胁。

一、文件上传

1、文件上传漏洞介绍

(1)、文件上传

文件上传是现代互联网常见的功能,允许用户上传图片、视频、及其他类型文件向用户提供的功能越多,Web受攻击的风险就越大。

(2)、文件上传漏洞

上传文件时,如果未对上传的文件进行严格的验证和过滤,就容易造成文件上传漏洞,上传脚本文件 (包括asp、aspx、 php、jsp等)恶意上传行为可能导致网站甚至整个服务器被控制。

恶意的脚本文件又被称为WebShell,WebShell具有强大的功能,如查看服务器目录、服务器中文件、执行系统命令等

2、JS检测绕过

(1)、检测原理

调用JS的selectFIle()函数,先将文件名转换为小写,然后通过substr获取文件名最后一个点号后面的后缀 (包括点号) 进行判断

(2)、绕过方法

由于后端PHP代码没有对文件做任何检测,所以只要绕过前端JS的校验就可以上传WebShell。

3、文件后缀绕过

(1)、检测原理

通过函数pathinfo()获取文件后缀,将后缀转为小写后判断是不是php.

(2)、绕过方法1

有些中间件允许解析其他文件后缀的,如在httpd.conf配置文件中配置如下代码,则能解析php、php3、phtml文件。所以上传一个后缀名为php3、phtml的文件即可

(3)、绕过方法2

结合Apache文件解析机制,从右向左开始解析文件后缀,若后缀名不可识别,则继续判断知道遇到可解析的后缀为止。

4、文件类型绕过(MIME绕过)

(1)、检测原理

判断$_FILES[“file”][“type”]是不是图片格式 (image/gif、imagejpeg、image/pjpeg) ,不是则不允许上传。 $_FILES[“file”][“type”]的值是从请求数据包中Content-Type中获取。

(2)、绕过方法

通过抓取数据请求包,上传php文件时,Content-Type值是application/octer-stream,上传jpg格式的文件时Content-Type值是image/jpeg。可修改文件类型进行绕过。

5、文件类型绕过(文件幻数检测)

(1)、检测原理

利用getimagesize0函数获取图片的宽高等信息,如果上传的不是图片,那么则获取不到信息。

(2)、绕过方法

在脚本文件开头补充图片对应的头部值,或在图片后写入脚本代码。

6、文件截断绕过

(1)、检测原理

①、由于00代表结束符,PHP会把00后面的所有字符删除

②、截断条件: PHP版本小于5.3.4、magic_quotes_gpc 为OFF状态

(2)、绕过方法

GET方法中加入00截断

POST方法中传入%00并解码

7、文件内容绕过 (竞争条件攻击)

(1)、检测原理

一些网站文件检测逻辑是先允许上传任意文件,然后检查文件内容是否包含可执行脚本,如果包含则删除。这里使用sleep()函数来模拟判断是否含有脚本所需要的时间

(2)、绕过方法

利用成功上传到删除文件的时间差,上传一个.php文件,在未删除之前立即访问,则会自动生成一个新php文件,新文件不会被删除

二、web容器IIS

1、常见Web容器

(1)、什么是Web容器

web容器是一种服务程序,在服务器一个端口就有一个提供相应服务的程序,而这个程序就是处理从客户端发出的请求,如JAVA中的Tomcat容器ASP的IIS都是这样的容器。一个服务器可以有多个容器。

我们在常见web容器漏洞这部分学习中需要使用的容器如下:IIS、Apache、Nginx、 Tomcat、Jboss、 WebLogic。 

(2)、名词解释

①、中间件: 提供系统软件和应用软件之间连接的软件,以便于软件各部件之间的沟通。中间件处在操作系统和更高一级应用程序之间。

②、容器: 给处于其中的应用程序组件 (ISP,PHP,ASP) 提供一个环境。使处于其中的应用程序组件直接跟容器中的环境变量接口交互,不必关注其它系统问题

③、服务器: www服务器或http服务器。提供Web信息浏览服务。它只需支持HTTP协议、HTML文档格式及URL。向浏览器提供服务的程序。

2、IIS简介

(1)、什么是IIS

IIS是由微IIS的全称是互联网信息服务 (英语: Internet Information Services)软公司提供的基于运行Microsoft Windows的互联网基本服务。IIS包括FTP/FTPS、NNTP、和HTTPSY HTTP、SMTP等服务。

相关词条解释

.net Framework 是基础类库,是程序运行的底层框架

ASP.Net 是 .net里用来做网站的技术集合

IIS 是架设Web服务器用来提供网页浏览服务的,属于系统环境般用ASP.Net开发软件,然后靠IIS对公网提供服务,软件的底层是.netFramework

(2)、什么是文件解析

当服务器接收到一个Http请求的时候,IIS 首先需要决定如何去处理这个请求(服务器处理一个.htm页面和一个.aspx页面肯定是不一样) 。那IIS依据什么去处理呢? 根据文件的后缀名。

服务器获取所请求的页面(也可以是文件,比如 1.jpg) 的后缀名以后接下来会在服务器端寻找可以处理这类后缀名的应用程序,如果IIS找不到可以处理此类文件的应用程序,那么IIS将直接把这个文件返还给客户端。

(3)、环境搭建

这里要复现的是IIS6.0文件解析漏洞

使用了windows server2003作为环境的载体

这个网站中有各个Windows版本的安装镜像: https://msdn.itellyou.cnWindows server 2003发行版本中已经内置了IIS服务

(4)、环境使用介绍

开启关闭IIS服务方法如下:

(5)、环境使用介绍

点击之后会弹出如下方框,按照如下方法选择之后即可看到自己的web目录中的文件和IIS服务的开始、停止、暂停按钮了

(6)、环境使用介绍

在这个页面中是无法编辑自己的web服务的,需要在本机中找到web目录。这个环境中的默认web目录是在C:\Inetpub\wwroot下的,在这里就可以编辑web目录,然后就可以进行我们后面的实验

3、IIS文件解析漏洞

(1)、漏洞利用

文件解析漏洞一般用于各种上传漏洞中,在文件上传的地方一般会限制用户可以上传文件的后缀名,比如php的网站如果可以上传php文件,那么就可以上传一个php木马,然后控制该服务器了,也就是我们所说的getshell了。

那么实际的漏洞环境中IIS一般是和asp搭配的, 上传的地方如果限制了.asp的后缀名,那么首先想到的应该是使用其它IIS支持的文件后缀。其实IIS解析asp脚本除了.asp后缀还有.cer和.asa

(2)、漏洞利用

如果网站将.asp、.cer、.asa这样的可以被服务端解析的后缀名全部过滤了的话,就只能通过其它的一些方法绕过了。就比如文件解析漏洞

IIS 6.0在处理含有特殊符号的文件路径时会出现逻辑错误,从而造成文件解析漏洞。这一漏洞有两种完全不同的利用方式:

/test.asp/test.jpg

test.asp;jpg

(3)、利用方式1

第一种是新建一个名为“test.asp”的目录,该目录中的任何文件都被IIS当做asp程序执行 (特殊符号是“/”)

(4)、利用方式2

第二种是上传名为“test.asp;.jpg”的文件,虽然该文件真正的后缀名是“.jpg”,但由于含有特殊符号“;”,仍会被IIS当做asp程序执行。

(5)、IIS7.5文件解析漏洞

test.jpg/php

一看到URL中文件后缀是.php,便无论该文件是否存在,都直接交给php处理而php又默认开启“cgi.fix_pathinfo”,会对文件路径进行“修理”,何谓“修理”?举个例子,当php遇到文件路径“/aaa.xxx/bbb.yyy”时,若“/aaa.xxxbbb.yyy”不存在,则会去掉最后的“bbb.yyy”,然后判断“/aaa.xxx”是否存在若存在,则把“/aaa.xxx”当做文件。

若有文件test.jpg,访问时在其后加/.php,便可以让IIS把“test.jpg/.php”交给php,php“修理”文件路径“test.jpg/.php”得到“testjpg”,该文件存在,便把该文件作为php程序执行了

(6)、IIS7.5文件解析漏洞

下图所示,是在 IIS7.5+php5.3+FastCGI 下的测试情况:

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

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

相关文章

「Verilog学习笔记」简易秒表

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网 timescale 1ns/1nsmodule count_module(input clk,input rst_n,output reg [5:0]second,output reg [5:0]minute);always (posedge clk or negedge rst_n) begin if (~rst…

控制笔记本电脑性能,增强性能/控制发热---Thinkpad x280

1、引言 手上有一台收来办公的Thinkpad x280,但安装的联想管家却没有性能调节选项,导致电脑性能释放很不顺手。由于有室外办公需求,也就有续航需求,也是让它减少发热;同时我想在室内的时候,完整发挥它的性能&#xff…

<Halcon> 局部放大显示

局部放大显示 当读取的图片为超大分辨率时,我们需要对局部位置或定位到的位置在显示窗口放大显示,主要算子为dev_set_part。 read_image (Image, printer_chip/printer_chip_01) gen_rectangle1 (ROI_0, 617.275, 1347.28, 828.349, 1449.5) dev_set_p…

springcloud微服务篇--2.微服务之间的调用

一、微服务案例需求1: 根据订单id查询订单的同时,把订单所属的用户信息一起返回 1、新建订单项目,用户服务。 2.RestTemplate实现微服务之间的访问。 在order-service的OrderApplication中注册RestTemplate 注入调用: Autowire…

Pyhon基于YOLOV实现的车辆品牌及型号检测项目源码+模型+项目文档

项目运行运行录屏: Pyhon基于YOLOV实现的车辆品牌及型号检测项目运行录屏 完整代码下载地址:Pyhon基于YOLOV实现的车辆品牌及型号检测项目 项目背景: 车辆检测及型号识别广泛应用于物业,交通等的管理场景中。通过在停车场出入口…

【PTA刷题+代码+详解】求二叉树度为1的结点个数(递归法)

文章目录 题目C代码详解 题目 在二叉树T中,其度为1的结点是指某结点只有左孩子或只有右孩子。利用递归方法求二叉树T的度为1的结点个数。 1)如果TNULL,则是空树,度为1的结点个数为0,返回值为0; 2&#xff0…

上海亚商投顾:沪指收复3000点,房地产板块集体走强

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 沪指昨日窄幅震荡,创业板指走势较弱,科创50指数跌近1%。房地产板块集体走强&#xff0…

深度学习中的各类评价指标

深度学习中的各类评价指标 1 Dice Loss2 Precision(精度)3 Recall(召回率)4 F-Score5 mAP 1 Dice Loss Dice Loss,也叫Soft Dice Coefficient,是一种用于图像分割任务的损失函数。它基于目标分割图像与模型…

Apache Flink(十一):Flink集群部署-Standalone集群部署

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录 1. 节点划分

设计模式——原型模式(创建型)

引言 原型模式是一种创建型设计模式, 使你能够复制已有对象, 而又无需使代码依赖它们所属的类。 问题 如果你有一个对象, 并希望生成与其完全相同的一个复制品, 你该如何实现呢? 首先, 你必须新建一个属于…

C#基础——语法学习

C#的基本语法 在介绍基本语法之前我们先来大概讲一下创建好的这些文件都是做什么的 .sln文件:将项目和解决方案项结合到一起 .vs文件夹:用来存储当前解决方案中关于用户的设置和自定义项,比如断点,主题等。(一般都将其…

飞天使-linux操作的一些技巧与知识点2-TCP的三次握手以及四次挥手以及转换状态

文章目录 TCP 的三次握手四次挥手转换状态 TCP 的三次握手 第一次,客户端与服务端建立链接,需要发送请求连接的消息 第二次,服务端接口到数据后,返回一个确认的操作*(至此客户端和服务端链路建立成功) 第三…

如何利用宝塔面板和docker快速部署网站

当你有了一台服务器,就会折腾往这台服务器上部署各种好玩的网站。市面上有许多开源的网站项目,通过docker技术可以快速部署并使用,本文将以部署filebrowser举例介绍网站部署的基本流程。 1. 安装宝塔面板 宝塔面板是一款开源的网站运维工具…

部署Kubernetes(k8s)集群,可视化部署kuboard

所需机器 主机名地址角色配置k8s-master192.168.231.134主节点2核4G,centos7k8s-node1192.168.231.135工作节点2核4G,centos7k8s-node2192.168.231.136工作节点2核4G,centos7 主节点CPU核数必须是 ≥2核且内存要求必须≥2G,否则k8s无法启动 1. 集群环境部署【三台…

【JVM从入门到实战】(四)类的生命周期

什么是类的生命周期 类的生命周期描述了一个类加载、连接、初始化、使用、卸载的整个过程 一个类完整的生命周期如下: 加载阶段 加载阶段第一步是类加载器根据类的全限定名通过不同的渠道以二进制流的方式获取字节码信息。 程序员可以使用Java代码拓展的不同的渠道…

java开发的智能聊天机器人_超级AI_支持自动绘画功能

支持Web、Android、IOS、H5等多终端应用。它使用OpenAI的ChatGPT模型实现智能聊天机器人,并支持绘图自动生成Vincent图。未来还将接入国内大型AI模型,如文心一言、统一千问、MOSS等模型,并不断更新以满足用户需求。 AI大脑软件中的AI绘画功能…

HuggingFists-低代码玩转LLM RAG(2) --Query

继上一篇文章我们探讨了如何使用HuggingFists实现文本的Embedding后。这一次我们将介绍如何使用HuggingFists实现LLM RAG的查询部分。 首先我们回顾一下RAG的结构,如下图: 基于向量数据库的RAG结构图 我们在上篇文章中介绍了如何使用HuggingFists实现结构…

GNN 学习笔记

稍微看一下之后备用。 【图神经网络综述】GNN原理+落地应用实现框架全解_gnn实现-CSDN博客 GNN相比CNN最大的区别在于数据结构,CNN一般作用在二维、三维数据里,如图像、表格数据等,可以进行卷积操作。而GNN作用在一个由节点和边…

PaddleSpeech的TTSAndroid编译armv7版本

1.下载docker镜像 docker pull paddlepaddle/paddle-lite:2.0.0_beta2.克隆代码 git clone https://github.com/PaddlePaddle/Paddle-Lite.git3.运行容器 docker run -it --name paddlelite_docker -v $PWD/Paddle-Lite:/Paddle-Lite --nethost paddlepaddle/paddle-lite …

ISP去噪(1)

#灵感# 因为理解的2DNR、3DNR 和当前调试平台标注的2DNR、3DNR 作用有很大差异,所以在网上广撒网,搜集知识。 目前收集出来一个这样的文章,有点像大学生的论文“取其精华,合成糟粕”。------权当一个记录册 目录 运动阈值&…