IIS文件上传漏洞绕过:深入解析与高效防御
目录
一、IIS解析漏洞的底层逻辑
二、绕过技巧:从基础到高级
1. 分号截断与路径拼接(经典手法)
2. 目录解析漏洞利用
3. 操作系统特性与字符混淆
4. 扩展名黑名单绕过
5. 结合其他漏洞的链式攻击
三、防御方案:从代码到架构的多层防护
1. 代码层加固
2. 服务器配置优化
3. 网络层防护
4. 监控与应急响应
四、实战复现:分阶段绕过防御
五、总结与思考
一、IIS解析漏洞的底层逻辑
IIS(Internet Information Services)作为Windows Server的默认Web服务器,其历史版本(如IIS 6.0)因文件解析逻辑缺陷成为攻击者的重点目标。以下漏洞原理需重点关注:
-
分号截断漏洞
- 触发条件:当文件名包含分号(
;
)时,IIS 6.0会将分号前的部分作为真实扩展名解析,例如:shell.asp;.jpg → 解析为ASP脚本
- 底层逻辑:IIS的解析模块(asp.dll)在处理请求时,会以分号作为分隔符截断文件名,仅保留前半部分。
- 触发条件:当文件名包含分号(
-
目录解析漏洞
- 关键路径:若目录名以
.asp
、.asa
等可执行后缀命名(如/upload.asp/
),则该目录下的所有文件(包括静态文件)均会被IIS视为动态脚本执行。 - 扩展风险:攻击者可通过创建恶意目录(如
/images/evil.asp/
)将普通图片转为木马载体。
- 关键路径:若目录名以
-
文件内容与扩展名解耦
- IIS在某些配置下会忽略文件内容,仅依赖扩展名决定解析方式。攻击者可上传伪装为图片的WebShell,绕过内容校验。
二、绕过技巧:从基础到高级
1. 分号截断与路径拼接(经典手法)
- Payload构造:
filename="shell.asp;.jpg" 访问路径:/uploads/shell.asp;.jpg → 执行ASP代码
- 实战要点:
- 使用Burp Suite拦截上传请求,修改
filename
字段,添加分号截断。 - 若服务器过滤分号,可尝试
shell.asp:.jpg
(利用NTFS文件流特性)。
- 使用Burp Suite拦截上传请求,修改
2. 目录解析漏洞利用
- 攻击流程:
- 创建目录
/upload.asp/
(需服务器允许目录创建)。 - 上传文件至该目录,如
/upload.asp/1.jpg
,访问时触发ASP解析。
- 创建目录
- 绕过限制:若无法创建目录,可尝试上传路径包含
.asp
的URL,如:POST /upload.asp HTTP/1.1 # 直接上传至伪装的ASP路径
3. 操作系统特性与字符混淆
- 空格/点号截断:
shell.asp. # Windows自动去除末尾点 → 保存为shell.asp shell.asp # 上传时添加空格 → shell.asp
- Unicode编码绕过:
shell.asp%80.jpg # 利用畸形Unicode字符干扰校验
4. 扩展名黑名单绕过
- 冷门扩展名:
.asa
、.cer
、.cdx
(IIS默认允许执行)。 - 大小写混淆:
Shell.PhP
、BACKDOOR.aSpX
(针对校验逻辑不严谨的系统)。
5. 结合其他漏洞的链式攻击
- 文件包含+上传绕过:
- 上传包含PHP代码的
1.txt
。 - 利用本地文件包含(LFI)漏洞执行:
http://target.com/index.php?file=./uploads/1.txt
- 上传包含PHP代码的
- HTTP PUT方法利用:
若服务器开启WebDAV且配置不当,可直接通过PUT方法上传脚本文件:PUT /uploads/shell.asp HTTP/1.1
三、防御方案:从代码到架构的多层防护
1. 代码层加固
- 白名单校验:仅允许
jpg
、png
等静态后缀,禁止动态脚本后缀(如asp/php/jsp)。 - 文件重命名:使用哈希值或时间戳重命名文件,避免保留用户输入的文件名。
- 内容检测:通过文件头(Magic Bytes)验证文件真实性,例如检测JPEG文件的
FF D8 FF
标识。
2. 服务器配置优化
- 处理程序映射(IIS管理工具):
移除对.asp
、.php
等脚本文件的映射,或限制仅特定目录可执行脚本。 - URL重写规则(web.config示例):
<rule name="Block Dangerous Requests"><match url=".*\.(asp|php|asa)(;|%24|%00)" /><action type="AbortRequest" /> </rule>
- 关闭危险功能:禁用WebDAV、NTFS文件流支持,限制HTTP PUT方法。
3. 网络层防护
- WAF规则:拦截包含分号、%00、畸形路径的请求。
# 示例ModSecurity规则 SecRule REQUEST_FILENAME "@contains ;" "deny,log,status:403"
- 文件存储隔离:将上传目录设为不可执行,并使用独立域名(如
static.example.com
)。
4. 监控与应急响应
- 日志审计:监控上传目录的文件变更,重点关注
.asp
、.php
等敏感操作。 - 自动化扫描:定期使用工具(如Nessus、Xray)检测服务器解析漏洞。
四、实战复现:分阶段绕过防御
目标环境:IIS 6.0 + ASP黑名单校验 + 内容检测
绕过步骤:
- 生成免杀WebShell:
使用图片马工具(如ExifTool
)将ASP代码插入JPEG文件的注释区:exiftool -Comment="<?php @eval($_POST['cmd']); ?>" shell.jpg
- 分号截断绕过扩展名校验:
修改上传包文件名:shell.asp;.jpg
- 触发解析:
访问http://target.com/uploads/shell.asp;.jpg
,绕过内容检测,执行ASP代码。
五、总结与思考
IIS文件上传漏洞的核心在于解析逻辑与校验逻辑的脱节。防御需从以下角度入手:
- 纵深防御:结合代码校验、服务器配置、网络监控形成多层防护。
- 漏洞演化:随着IIS版本升级,新漏洞(如IIS 7.0的FastCGI解析问题)需持续关注。
- 红蓝对抗:定期模拟攻击测试(如上传绕过、路径遍历),验证防御体系有效性。
相关文章:
IIS文件上传漏洞绕过:深入解析与高效防御
目录 一、IIS解析漏洞的底层逻辑 二、绕过技巧:从基础到高级 1. 分号截断与路径拼接(经典手法) 2. 目录解析漏洞利用 3. 操作系统特性与字符混淆 4. 扩展名黑名单绕过 5. 结合其他…...

【node.js】数据库与存储
个人主页:Guiat 归属专栏:node.js 文章目录 1. 数据库概述1.1 数据库在Node.js中的作用1.2 Node.js支持的数据库类型 2. 关系型数据库集成2.1 MySQL与Node.js2.1.1 安装MySQL驱动2.1.2 建立连接2.1.3 执行CRUD操作 2.2 PostgreSQL与Node.js2.2.1 安装pg驱…...

leetcode2081. k 镜像数字的和-hard
1 题目:k 镜像数字的和 官方标定难度:难 一个 k 镜像数字 指的是一个在十进制和 k 进制下从前往后读和从后往前读都一样的 没有前导 0 的 正 整数。 比方说,9 是一个 2 镜像数字。9 在十进制下为 9 ,二进制下为 1001 ÿ…...

Halcon 单目相机标定测量
文章目录 双面相机标定链接一维测量gen_cam_par_area_scan_division -为区域扫描相机生成一个相机参数元组,该相机的变形由分割模型建模。(相机自带参数)create_calib_data -创建Halcon 数据标定模型set_calib_data_cam_param -设置校准数据模型中摄像机的类型和初始…...
git子模块--常见操作
克隆仓库 标准化克隆流程 基本命令git clone <父仓库远程URL> [本地文件名] cd <本地仓库名> git submodule init # 初始化子模块配置 git submodule update # 拉取子模块内容一次性完成克隆和初始化流程 基本命令git clone --recurse-submodules <父仓库远…...
解决SQL Server SQL语句性能问题(9)——创建和更新统计对象
9.3. 创建和更新统计对象 与Oracle中的统计数据相对应,SQL Server中的统计对象,本专栏6.3节中也提到,数据库CBO依赖其为SQL语句产生最合适、最高效的查询计划。数据库CBO结合各类统计对象,并利用其内置的、复杂而高级的模型与算法,尽可能的为SQL语句计算和评估出所有候选…...

数据被泄露了怎么办?
数据泄露是严重的网络安全事件,需立即采取行动以降低风险。以下是关键应对步骤: 1. 确认泄露范围 核实泄露内容:确定泄露的是密码、财务信息、身份证号还是其他敏感数据。 评估来源:检查是个人设备被入侵、某平台漏洞,…...

绩效管理缺乏数据支持,如何提高客观性?
要提高绩效管理的客观性,应从建立科学的指标体系、加强数据采集手段、引入自动化绩效工具、强化过程记录机制、定期评估与反馈优化五大方面着手。其中,建立科学的指标体系是关键基础。没有数据支撑的绩效体系,往往容易陷入主观打分、个人偏见…...

unity控制相机围绕物体旋转移动
记录一下控制相机围绕物体旋转与移动的脚本,相机操作思路分为两块,一部分为旋转,一部分为移动,旋转是根据当前center中心点的坐标,根据距离设置与默认的旋转进行位置移动,移动是根据相机的左右和前后进行计…...

线性代数:AI大模型的数学基石
🧑 博主简介:CSDN博客专家、CSDN平台优质创作者,高级开发工程师,数学专业,10年以上C/C, C#, Java等多种编程语言开发经验,拥有高级工程师证书;擅长C/C、C#等开发语言,熟悉Java常用开…...
【C/C++】从零开始掌握Kafka
文章目录 从零开始掌握Kafka一、Kafka 基础知识理解(理论)1. 核心组件与架构2. 重点概念解析 二、Kafka 面试重点知识梳理三、C 使用 Kafka 的实践(librdkafka)1. librdkafka 简介2. 安装 librdkafka 四、实战:高吞吐生…...
02_redis分布式锁原理
文章目录 一、redis如何实现分布式锁1. 使用 SETNX 命令2. 设置过期时间3. 释放锁4. 注意事项5. 示例代码 二、Java中分布式锁如何设置超时时间1. Redis分布式锁2. 基于Zookeeper的分布式锁3. 基于数据库的分布式锁注意事项 一、redis如何实现分布式锁 Redis 实现分布式锁是一…...

简单血条于小怪攻击模板
创建一个2d正方形(9-Sliced)命名为Player,在Player下面新建一个画布(Canvas)命名为PlayerHealthUI,在画布下面新建一个滑动条(Slider)命名为HealthBar 把PlayerHealthUI脚本挂载到Pl…...
Win11 系统登入时绑定微软邮箱导致用户名欠缺
Win11 系统登入时绑定微软邮箱导致用户名欠缺 解决思路 -> 解绑当前微软邮箱和用户名 -> 断网离线建立本地账户 -> 设置本地账户为Admin权限 -> 注销当前账户,登入新建的用户 -> 联网绑定微软邮箱 -> 删除旧的用户命令步骤 管理员权限打开…...

代码随想录算法训练营第四十六四十七天
卡码网题目: 110. 字符串接龙105. 有向图的完全联通106. 岛屿的周长107. 寻找存在的路径 其他: 今日总结 往期打卡 110. 字符串接龙 跳转: 110. 字符串接龙 学习: 代码随想录公开讲解 问题: 字典 strList 中从字符串 beginStr 和 endStr 的转换序列是一个按下述规格形成的序…...

华硕FL8000U加装16G+32G=48G内存条
华硕FL8000U加装16G32G48G内存条 一、华硕FL8000U加装内存条endl 一、华硕FL8000U加装内存条 相关视频链接: https://www.bilibili.com/video/BV1gw4dePED8/ endl...
前后端联调实战指南:Axios拦截器、CORS与JWT身份验证全解析
前言 在现代Web开发中,前后端分离架构已成为主流,而前后端联调则是开发过程中不可避免的关键环节。本文将深入探讨前后端联调中的三大核心技术:Axios拦截器的灵活运用、CORS跨域问题的全面解决方案以及JWT身份验证的安全实现。通过本文&…...
java高级 -Junit单元测试
Junit单元测试就是针对最小的功能:方法,编写测试代码对其进行正确性测试。用main方法进行测试的弊端是一个方法测试失败可能会影响别的方法的测试,也无法得到测试报告,需要我们自己观察数据是否正确。 此时,我们就需要…...
在 UVM验证环境中,验证 Out-of-Order或 Interleaving机制
在 UVM验证环境中,验证 Out-of-Order或 Interleaving机制 摘要:在 UVM (Universal Verification Methodology) 验证环境中,验证 Out-of-Order (乱序) 或 Interleaving (交错) 机制是验证复杂 SoC (System on Chip) 设计的重要任务,尤其是在验证高速接口(如 PCIe、AXI)、缓…...
V9数据库替换授权
文章目录 环境文档用途详细信息 环境 系统平台:Linux x86-64 Red Hat Enterprise Linux 7 版本:9.0 文档用途 1、本文档用于指导V9数据库替换授权。 2、V9数据库授权文件为license.dat。 详细信息 1、上传新的授权文件到服务器并修改授权文件属主为…...

勇闯Chromium—— Chromium的多进程架构
问题 构建一个永不崩溃或挂起的渲染引擎几乎是不可能的,构建一个绝对安全的渲染引擎也几乎是不可能的。 从某种程度上来说,2006 年左右的网络浏览器状态与过去单用户、协作式多任务操作系统的状况类似。正如在这样的操作系统中,一个行为不端的应用程序可能导致整个系统崩溃…...
Go语言中常量的命名规则详解
1. 常量的基本命名规则 1.1. 命名格式 1. 使用const关键字声明; 2. 命名格式:const 常量名 [类型] 值; 3. 类型可以省略,由编译器推断; 1.2. 命名风格 大小写规则: 1. 首字母大写:导出常…...

软件质量保证与测试实验
课程 软件质量保证与测试 目的:练习软件测试中白盒测试方法 内容: 测试如下程序段: #include <stdio.h>int main() {int i 1, n1 0, n2 0;float sum 0.0;float average;float score[100];printf("请输入分…...

历年华东师范大学保研上机真题
2025华东师范大学保研上机真题 2024华东师范大学保研上机真题 2023华东师范大学保研上机真题 在线测评链接:https://pgcode.cn/school?classification1 简单一位数代数式计算 题目描述 给一个小学生都会算的1位数与1位数运算的代数式,请你求出这个表…...
【C++】什么是静态库?什么是动态库?
静态库与动态库详解 静态库和动态库是软件开发中两种不同的代码共享和重用机制,它们在链接方式、内存使用和部署方式上有显著区别。 一、静态库(Static Library) 基本概念 静态库是在编译期间被完整复制到最终可执行文件中的预编译代码集合。 主要特点 链接时…...
项目阅读:Instruction Defense
总目录 大模型安全相关研究:https://blog.csdn.net/WhiffeYF/article/details/142132328 https://learnprompting.org/docs/prompt_hacking/defensive_measures/instruction https://www.doubao.com/chat/6945469301219586 速览 指令防御(Instructio…...
springboot中拦截器配置使用
文章目录 前置拦截器代码拦截器注册疑问 前置 你使用 javaspringboot 常用在: 身份验证与授权,使用拦截器检查用户的身份验证状态和权限级别,确保只有经过验证且有适当权限的用户能够访问特定资源日志记录与审计性能分析与监控࿰…...
用 Python 构建自动驾驶的实时通信系统:让车辆“交流”起来!
用 Python 构建自动驾驶的实时通信系统:让车辆“交流”起来! 自动驾驶技术正加速变革全球交通体系,它不仅是机器学习与计算机视觉的胜利,更是一场 高效通信架构的革命。自动驾驶汽车需要实时交换信息,比如: 传感器数据(雷达、激光雷达、摄像头)V2V(车与车通信)V2X(…...

在机器学习中,L2正则化为什么能够缓过拟合?为何正则化等机制能够使一个“过度拟合训练集”的模型展现出更优的泛化性能?正则化
在现代机器学习的发展历程中,过拟合(Overfitting)始终是亟需克服的重要挑战。其表现如同在训练数据上构建过度复杂的映射函数,虽能实现近乎完美的拟合,但其泛化能力却显著受限,导致模型在测试集或实际应用中…...
day36 python神经网络训练
目录 一、数据准备与预处理 二、数据集划分与归一化 三、构建神经网络模型 四、定义损失函数和优化器 五、训练模型 六、评估模型 在机器学习和深度学习的实践中,信贷风险评估是一个非常重要的应用场景。通过构建神经网络模型,我们可以对客户的信用…...