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/…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...

Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...

Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...
云原生周刊:k0s 成为 CNCF 沙箱项目
开源项目推荐 HAMi HAMi(原名 k8s‑vGPU‑scheduler)是一款 CNCF Sandbox 级别的开源 K8s 中间件,通过虚拟化 GPU/NPU 等异构设备并支持内存、计算核心时间片隔离及共享调度,为容器提供统一接口,实现细粒度资源配额…...