Web漏洞分析-文件解析及上传(中)
随着互联网的迅速发展,网络安全问题变得日益复杂,而文件解析及上传漏洞成为攻击者们频繁攻击的热点之一。本文将深入研究文件解析及上传漏洞,通过对文件上传、Web容器IIS、命令执行、Nginx文件解析漏洞以及公猫任意文件上传等方面的细致分析,揭示这些漏洞背后的本质和攻击方式。
文件上传漏洞一直是攻击者们渗透系统的首选方式。通过构造巧妙的上传文件,攻击者能够实施多种恶意行为,如上传包含恶意脚本的文件,从而实现远程代码执行。本文将深入探讨文件上传漏洞的工作原理、攻击场景,并通过实际案例为读者提供更直观的理解,帮助其更好地认识这一类型漏洞的威胁性。
在网络攻击的舞台上,Web容器扮演着至关重要的角色。特别是在Windows操作系统下,IIS作为最为常见的Web服务器,存在着多种可能的文件解析和上传漏洞。本文将详细探讨这些潜在的漏洞,揭示攻击者如何善用这些漏洞渗透系统,以帮助读者更全面地了解并防范这一类威胁。
三、IIS命令执行及apache文件解析漏洞
1、IIS6.0命令执行漏洞
(1)、漏洞介绍
IIS6.0命令执行漏洞编号是CVE-2017-7269,在开启WebDav服务的情况下存在可远程执行漏洞。
漏洞原理是在IIS6.0处理PROPFIND指令的时候,由于对url的长度没有进行有效的长度控制和检查,导致执行memcpy对虚拟路径进行构造的时候引发栈溢出,该漏洞可以导致远程代码执行。
(2)、关于栈溢出

(3)、关于栈溢出
栈溢出是缓冲区溢出中的一种,缓冲区溢出就好比一个杯子倒太多的水,洒出来这叫溢出。
有一些函数对用户的输入不作任何检查,分配的内存空间是有限的,如果输入超长的字符串,必然会导致溢出。
缓冲区溢出中,最为危险的是堆栈溢出,因为入侵者可以利用堆栈溢出,在函数返回时改变返回程序的地址,让其跳转到任意地址,带来的危害一种是程序崩溃导致拒绝服务,另外一种就是跳转并且执行一段恶意代码,比如得到系统权限然后为所欲为。
IIS6.0命令执行的简单原理就是这样
(4)、环境
IIS6.0漏洞触发的前提条件是WebDav开启
如果默认情况下是不开启的,需要使用以下方法开启

(5)、攻击方法
Github上的一个开源exp:
GitHub - zcgonvh/cve-2017-7269: fixed msf module for cve-2017-7269
将exp中的ip地址改为虚拟机 (目标) 的IP地址

(6)、攻击结果
这个exp的结果是弹出计算器,验证漏洞可以执行代码。
ScStoragePathFromUrl函数存在缓存区溢出漏洞,攻击者通过一个以“If:<http://”开始的较长header头的PROPFIND请求执行任意代码:

2、Apache 文件解析介绍
(1)、环境简介
Apache文件解析漏洞与用户的配置有密切关系严格来说属于用户配置问题,这里要讲解配置出错的原因以及修复方法所以需要自备环境。
使用ubuntu的docker。然后运行以下命令即可
apt-get install apache2
apt-get install php7.0
apt-get install libapache2-mod-php7.0
(2)、Apache和php三种结合方法
CGI: 通常翻译为共同网关接口,是HTTP服务器与机器上的其他程序进行通信的一个接口,让Web服务器必要时启动额外的程序处理动态内容。FastCGI: CGI解释器的更快实现,可以提供良好的性能、伸缩性、Fail-Over特性等等。
Module: 把php编译为apache的模块,也是用的最多的一种方法我们这里要讲的这个Apache文件解析漏洞就发生在Module结合方法上也就是我们之前配置apt-get install libapache2-mod-php7.0
查看Apache和php的结合方法:

(3)、Apache解析文件的方法
一个重要文件/etc/mime.types

这里记录了大量的文件后缀和mime类型,当客户端请求一个文件时,如果后缀在这个列表里,那么apache就返回对应的content-type给浏览器.如果不在列表,apache不会返回content-type给浏览器,而直接文件内容,由浏览器自动外理。
(4)、Apache解析php的方法
①、Cat /etc/mime.types grep php

这里关于php的全部都被注释掉了
②、etc/apache2/mods-enabled/php7.2.conf

意思是如果请求的文件名匹配正则:.+ .ph(p[3457]?ltltml)$也就是说
(phplphp3lphp4lphp5lphp7lphtlphtml)
是文件的最后一个后缀则把文件交给php处理器 (php_module) 来处理,处理完之后结果返回给apache,再由apache发送给浏览器。
3、Apache 文件解析漏洞
(1)、漏洞原理
①、Apache文件解析漏洞涉及到一个解析文件的特性:Apache默认一个文件可以有多个以点分隔的后缀,当右边的后缀无法识别不在mime.types内),则继续向左识别.
当我们请求这样一个文件:shell.php.xxx.yyy
yyy -> 无法识别,向左
xxx -> 无法识别,向左
php -> 发现后缀是php,交给php处理这个文件
在web目录下创建一个1.php.aaa,然后访问该文件


②、可以看到并没有解析成PHP,那为什么呢?其实,apache本身根本不存在所谓的解析漏洞我们回顾一下请求的过程:
当我们请求这样一个文件:shell.php.xxx.yyy
yyy -> 无法识别,向左
xxx -> 无法识别,向左
SEO网线
php -> 发现后缀是php,交给php处理这个文件
最后一步虽然交给了php来处理这个文件,但是php也不认识.aaa的后缀啊,所以就直接输出了。
③、其实,解析漏洞的产生,是由于运维人员在配置服务器时,为了使apache服务器能解析php,而自己添加一个handler,例如:AddHandler application/x-httpd-php .php

它的作用也是为了让apache把php文件交给php_module解析,但是注意到它与SetHandler:它的后缀不是用正则去匹配的。所以,在文件名的任何位置匹配到php后缀,它都会让php_module解析。
④、现在,访问1.php.xxx.yyy之后解析的流程是这样的
yyy -> 无法识别,向左
xxx -> 无法识别,向左
php - > 激活php处理器,执行PHP代码
解析漏洞就产生了
现在,访问1.php.aaa,可以看到解析成功

(2)、修复方法
不要使用AddHandler,改用SetHandler,写好正则,就不会有解析问题
<FilesMatch".+ .php$">
SetHandler application/x-httpd-php
</FilesMatch>
禁止.php.这样的文件执行
<FilesMatch ".+ .ph(p[3457]?ltltml)\.">
Require all denied
</FilesMatch>
四、Nginx文件解析漏洞
1、Nginx配置
(1)、平台
操作平台: ubuntu14
docker pull ubuntu:14.04.5

(2)、配置方法
①、使用docker run -d -it -p 本机端口:80 ubuntu:14.04.5 启动镜像
使用docker exec -it [容器ID] /bin/bash 进入容器
然后使用以下语句安装相关环境:
apt-get update # 更新源
apt-get install vim # 安装vim
apt-get install nginx # 安装nginx
service nginx start # 启动nginx服务
apt-get install php5-fpm # 安装php5-fpm
②、刚安装好的Nginx是不能解析php的,:需要修改配置文件
etc/nginx/sites-available/default


③、Nginx的两种启动方式第五行如果打开,就是使用tcp方式启动,php-fpm将会本地监听9000端口如果倒数第三行打开,则是使用套接字方式启动

④、现在使用/etc/init.d/php5-fpm start启动web服务。
然后到web目录中写一个测试的php文件,重启nginx服务
尝试访问,如果可以解析,则环境配置成功

(3)、相关目录
usr/share/nginx/html # 默认web目录
/etc/nginx/# 配置文件目录
etc/php5/fpm # php配置文件目录
var/log/nginx/access.log # 访问日志
var/log/nginx/error.log # 错误日志
2、Nginx目录遍历
(1)、原理
Nginx的目录遍历与apache的一样,属于配置方面的问题错误的配置可能导致目录遍历与源码泄露。构造一个的目录,来模拟器的web目录

(2)、修改配置文件
①、Nginx默认是不会开启目录遍历的,这里我们需要修改配置文件vim /etc/nginx/sites-available/default 在location这里加上autoindexon; 重启nginx

②、访问目录,就可以看到这样的效果 apache是否也存在这样的问题?

3、Nginx文件解析漏洞
(1)、原理
①、(1)、对任意文件名,在后面添加/任意文件名.php的解析漏洞,比如原本文件名是test.jpg,可以添加为test.jpg/x.php 进行解析攻击。(2)、对低版本的Nginx 可以在任意文件名后面添加%00.php 进行解析攻击。
②、Nginx下,请求文件/shell.gif时在后面加个*.php,即/shell.gif/1.php,可能会被当作PHP代码执行
和Apache一样,Nginx也是通过mime.types识别文件文件
在/etc/nginx/mime.types
③、创建一个1.jpg,然后访问1.jpg/1.php显示:“Access denied."原因
Nginx拿到文件路径/1.jpg/1.php后,一看后缀是.php,便认为该文件是php文件,转交给php去处理。php一看/1.jpg/1.php不存在,便删去最后的/1.php,又看/1.jpg存在,便把/1.jpg当成要执行的文件了,又因为后缀为.jpg,php认为这不是php文件,于是返回“Access denied.”

④、cgi.fix_pathinfo,该值默认为1,表示开启。
用途:对文件路径进行“修理
当php遇到文件路径“/aaa.xxx/bbb.yyy/ccc.zzz”时,若“/aaa.xxxbbb.yyy/ccc.zzz”不存在,则会去掉最后的“/ccc.zzz”,然后判断“aaa.xxx/bbb.yyy”是否存在,若存在,则把“/aaa.xxx/bbb.yyy”当做文件“/aaa.xxx/bbb.yyy/ccc.zzz”,若“/aaa.xxx/bbb.yyy”仍不存在,则继续去掉“/bbb.yyy”,以此类推
(2)、配置
①、cgi.fix_pathinfo这个配置在php.ini 中可以修改,默认是开启的/etc/php5/fpm/php.ini
默认是1,不需要修改

②、配置/etc/php5/fpm/pool.d/www.conf中security.limit_extensions允许解析其他格式文件为PHP

(3)、测试
再次访问1.jpg/1.php

(4)、目录遍历修复方法
将/etc/nginx/sites-available/default配置文件修改:
autoindex on修改成autoindex off

(5)、文件解析漏洞修复方法
①、将php.ini文件中的cgi.fix_pathinfo的值设为0。这样php在解析1.jpg/1.php这样的目录时,只要1.php不存在就会显示404.
②、将/etc/php5/fpm/pool.d/www.conf中security.limit_extensions后面的值设为.php。
相关文章:
Web漏洞分析-文件解析及上传(中)
随着互联网的迅速发展,网络安全问题变得日益复杂,而文件解析及上传漏洞成为攻击者们频繁攻击的热点之一。本文将深入研究文件解析及上传漏洞,通过对文件上传、Web容器IIS、命令执行、Nginx文件解析漏洞以及公猫任意文件上传等方面的细致分析&…...
使用Node.js创建接口
当使用Node.js创建接口时,有两种主要方式:使用Express框架和使用Node.js的HTTP模块。 Express框架方式: 总的来说,使用Express框架可以更快速地搭建和管理接口,而使用Node.js的HTTP模块则提供了更多底层控制和灵活性&…...
【起草】人人都应该有一个chatGPT助手
第一章:ChatGPT 简介 - 介绍 ChatGPT 的基本概念和工作原理 - 讨论 ChatGPT 在自然语言处理领域的重要性和应用价值 【起草】章节 1-1 介绍 ChatGPT 的基本概念和工作原理-CSDN博客 【起草】1-2 讨论 ChatGPT 在自然语言处理领域的重要性和应用价值-CSDN博客…...
TCP/IP详解——网络基本概念
文章目录 一、网络基本概念1. OSI 7层模型1.1 每层对应的协议1.2 每层涉及的设备1.2.1 物理层设备1.2.2 数据链路层设备1.2.3 网络层设备1.2.4 传输层设备1.2.5 交换机和路由器的应用1.2.6 问题 2. TCP/IP 4层模型3. 物理层传输介质3.1 冲突域 4. 数据链路层4.1 以太网帧结构4.…...
[Linux] ps命令详解
ps命令 ps命令用于显示当前系统中的进程状态信息。以下是ps命令的一些常见参数及其作用: ps命令的基本形式: ps这将显示当前用户自己的运行中的进程的快照。 参数选项: -a: 显示所有进程,包括其他用户的进程。 -u: 显示与用户相…...
QT 中基于 TCP 的网络通信 (备查)
基础 基于 TCP 的套接字通信需要用到两个类: 1)QTcpServer:服务器类,用于监听客户端连接以及和客户端建立连接。 2)QTcpSocket:通信的套接字类,客户端、服务器端都需要使用。 这两个套接字通信类…...
使用MIB builder自定义物联网网关的MIB结构
文章目录 物联网网关初识(了解即可)IoT的通用MIB库结构MIB Builder开发流程指导问题总结子叶没所属分组值范围不为0 物联网网关初识(了解即可) 网关又称网间连接器、协议转换器。简单说,物联网网关是一台智能计算机&a…...
特权FPGA学习笔记
C/C/system C-----vivado HLS------------->RTL门电路,省去了HDL语言的中间转换,可以看作是C向C#的演进,基于zynq面向以前使用C的开发人员,但是个人觉得,HDL存在且未被C取代,工具的着眼点就是面向底层调…...
利用阿里云 DDoS、WAF、CDN 和云防火墙为在线业务赋能
在这篇博客中,我们将详细讨论使用阿里云 CDN 和安全产品保护您的在线业务所需的步骤。 方案描述 创新技术的快速发展为世界各地的在线业务带来了新的机遇。今天的人们不仅习惯了,而且依靠互联网来开展他们的日常生活,包括购物、玩游戏、看电…...
Mysql的事务日志
Mysql的事务具有四个特性:原子性、一致性、隔离性、持久性。那么事务的四种特性分别是靠什么机制实现的呢? 事务的隔离性由锁机制来保证 事务的原子性、一致性、持久性则由redo log和Undo log来保证。 - redo log是重做日志,提供再写入操作&…...
三、Shell 环境
一、Linux 系统分类 在 Linux 中,常见的 Shell 有以下几种: Bourne Shell(sh):最早的 Shell,由 Stephen Bourne 开发。它是大多数其他 Shell 的基础。Bourne Again Shell(bash)&am…...
2023年第三届产业数字化【金铲奖】重磅来袭!
做具备产业数字化价值的企业、案例标杆、资本机构的见证者、发现者、陪伴者。 出品|产业家 一年一度的金铲奖来了! 在过去的一年时间里,我们清晰地看到,产业数字化的潮水更加汹涌澎湃且势不可挡,越来越多的企业开始寻求数字化…...
node.js安装和配置
软件介绍 Node.js是一个免费的、开源的、跨平台的JavaScript运行时环境,允许开发人员在浏览器之外编写命令行工具和服务器端脚本。 Node.js是一个基于Chrome JavaScript运行时建立的一个平台。 Node.js是一个事件驱动I/O服务端JavaScript环境,基于Googl…...
【周报2023.12.09】
周报2023.12.09 本周开展工作下周工作计划 本周开展工作 本周开展的工作的话一共是一下几点: 这三点的话是紧密相连的 逻辑这边需要考虑的东西很多 点击生成照片,然后获取生成照片的状态点击生成照片,然后获取生成照片的时间,并…...
基于ssm大学生创新创业平台项目管理子系统设计与实现论文
摘 要 互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对大学生创新创业项目信息管理混乱,出错率高,信…...
JS基础之原型原型链
JS基础之原型&原型链 原型&原型链构造函数创建对象prototypeprotoconstructor实例与原型原型的原型原型链其他constructorproto继承 原型&原型链 构造函数创建对象 我们先使用构造函数创建一个对象: function Person(){ } var person new Person();…...
【力扣100】54.螺旋矩阵
添加链接描述 class Solution:def spiralOrder(self, matrix: List[List[int]]) -> List[int]:if not matrix or not matrix[0]:return list()rows, columns len(matrix), len(matrix[0])order list()left, right, top, bottom 0, columns - 1, 0, rows - 1while left &…...
UI 优先的统一身份认证系统 Casdoor
Casdoor 是一个基于 OAuth 2.0 / OIDC 的 UI 优先集中认证 / 单点登录 (SSO) 平台,简单点说,就是 Casdoor 可以帮你解决 用户管理 的难题,你无需开发用户登录注册等与用户鉴权相关的一系列功能,只需几个步骤,简单配置&…...
Realme X7 Pro Root 刷机教程
Realme X7 Pro 刷机教程 Just For Fun,最近倒腾了下Realme X7 Pro 刷root。此博客为个人记录刷机过程,如有机友跟随本教程操作,请谨慎操作!!! 以下教程真针对Realme X7 Pro,其他版本方法未知&…...
postgresql自带指令命令系列三
目录 简介 bin目录 28.pg_verifybackup 29.pg_waldump 30.postgres 31.postmaster -> postgres 32.psql 33.reindexdb 34.vacuumdb 35.vacuumlo 总结: 简介 在安装postgresql数据库的时候会需要设置一个关于postgresql数据库的PATH变量 export PATH/…...
XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...
对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
Android15默认授权浮窗权限
我们经常有那种需求,客户需要定制的apk集成在ROM中,并且默认授予其【显示在其他应用的上层】权限,也就是我们常说的浮窗权限,那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...
协议转换利器,profinet转ethercat网关的两大派系,各有千秋
随着工业以太网的发展,其高效、便捷、协议开放、易于冗余等诸多优点,被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口,具有实时性、开放性,使用TCP/IP和IT标准,符合基于工业以太网的…...
VisualXML全新升级 | 新增数据库编辑功能
VisualXML是一个功能强大的网络总线设计工具,专注于简化汽车电子系统中复杂的网络数据设计操作。它支持多种主流总线网络格式的数据编辑(如DBC、LDF、ARXML、HEX等),并能够基于Excel表格的方式生成和转换多种数据库文件。由此&…...
Java 与 MySQL 性能优化:MySQL 慢 SQL 诊断与分析方法详解
文章目录 一、开启慢查询日志,定位耗时SQL1.1 查看慢查询日志是否开启1.2 临时开启慢查询日志1.3 永久开启慢查询日志1.4 分析慢查询日志 二、使用EXPLAIN分析SQL执行计划2.1 EXPLAIN的基本使用2.2 EXPLAIN分析案例2.3 根据EXPLAIN结果优化SQL 三、使用SHOW PROFILE…...
