尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
IIS短文件名扫描实战:从8.3命名规则到工具包使用与避坑
简介本资源聚焦 IIS 短文件名泄露这一经典 Web 安全检测场景面向渗透测试初学者、安全运维人员及 CTF 参赛者用于校验目标站点是否存在短文件名枚举风险。包内同时提供 Python 与 Java 两套实现并附带环境包下载地址方便在不同运行环境下快速开展验证。资源共 32 个文件压缩包约 87KB以 class 编译文件、java 源码、xml 配置、md 说明文档为主另含 py 脚本、jar 包、bat 与 sh 启动脚本等兼顾源码阅读与开箱即用。Python 版基于 2.7 环境Java 版采用 Eclipse 工程结构含 MANIFEST.MF、build.xml 与运行脚本便于二次编译调试。目前已有 248 人学习下载读者可借此理解短文件名漏洞原理、掌握扫描工具的使用与排错思路并对照源码梳理请求构造与结果判定逻辑。1. IIS 短文件名扫描从 8.3 命名规则到 .rar 工具包的实战拆解在 Windows Server 上跑 IIS 的站点很多人只盯着上传漏洞和解析漏洞却忽略了一个从 DOS 时代遗留下来的老问题——8.3 短文件名机制。IIS_shortname_Scanner.rar这个工具包针对的就是它利用 IIS 对短文件名请求的响应差异把目录和文件名的前六个字符逐个猜出来。听起来像玄学但我在一次内网评估里就是靠它从一个只开放 80 端口的 IIS 站点上把后台备份目录backup~1给还原成了backup_2023进而拿到了整站源码。这篇笔记不讲空泛概念而是把短文件名扫描的原理、工具包怎么用、参数怎么调、以及我在 Win11 配 IIS 环境复现时踩过的坑按可复现的步骤写清楚。适合做渗透测试、甲方安全巡检或者单纯想搞明白 IIS 短文件名到底能泄露多少信息的人。2. 短文件名机制与扫描原理为什么一个波浪号能泄露目录结构2.1 8.3 命名规则在 NTFS 上的残留逻辑Windows 为了兼容早期 16 位程序在 NTFS 卷上默认保留短文件名Short Name生成能力。规则很简单取长文件名的前六个字符去掉空格和特殊符号转大写后面跟~1扩展名取前三个字符。比如administrator.aspx会生成ADMINI~1.ASP。如果前六个字符相同的文件有多个数字递增为~2、~3。这个短名在文件系统层面是真实存在的可以通过dir /x看到。IIS 在处理请求时如果收到一个不存在的长文件名但匹配到了对应的短文件名会返回一个特定的响应。早期 IIS 版本会直接返回 404但响应时间或状态码有细微差别后续版本修补后仍然可以通过~请求的响应长度或状态码来区分“短名存在”和“短名不存在”。扫描器就是靠这个差异做暴力枚举。注意不是所有 IIS 都开启短名支持。NTFS 卷可以通过fsutil behavior set disable8dot3 1全局禁用或者在单个目录上禁用。很多运维在加固时会关掉它但内网老服务器上默认开启的比例仍然很高。2.2 扫描器如何把“猜”变成“枚举”IIS_shortname_Scanner这类工具的核心逻辑分两步。第一步枚举目录短名。发送类似http://target/AAAAAA~1/的请求如果返回 404 以外的状态码比如 400 或 200说明存在以AAAAAA开头的目录短名。第二步逐字符扩展。从A~1/开始不断追加字符直到找到完整短名再根据短名反推长名前六个字符。对于文件则用AAAAAA~1.EXT的形式探测。这个过程本质上是暴力枚举但因为短名只有前六个字符参与搜索空间被大幅压缩。一个字符集为a-z0-9_的 36 字符集六位组合是 36^6但实际扫描器会用字典和递增策略先猜常见前缀再逐位扩展把请求量降到几百次以内。2.3 工具包 .rar 里通常有什么拿到IIS_shortname_Scanner.rar后解压一般会看到几个部分一个 Python 或 C# 写的主扫描脚本、一个字典文件常见目录名和文件名前缀、一个说明文档。不同版本可能还带一个批量扫描的 shell 脚本。我手头这个版本主程序是 Python 3 写的依赖requests和urllib3字典里预置了admin、backup、upload、config等常见前缀。如果你拿到的包只有 exe建议在虚拟机里跑因为这类工具常被误报。3. 在 Win11 上搭 IIS 复现环境从安装到开启短名支持3.1 Win11 安装 IIS 的步骤与常见卡点Win11 家庭版默认没有 IIS 管理控制台需要先启用 Windows 功能。打开“启用或关闭 Windows 功能”勾选“Internet Information Services”和“IIS 管理控制台”。如果列表里没有说明系统版本不支持得换专业版或直接在 Server 上做。安装完成后浏览器访问http://localhost看到 IIS 欢迎页就算成功。常见卡点是端口 80 被占用。Win11 上World Wide Web Publishing Service可能被其他服务比如 Skype 或某些驱动抢占。用netstat -ano | findstr :80找到占用进程要么停掉要么把 IIS 站点绑定到 8080。3.2 创建测试站点并确认短名是否生效在C:\inetpub\wwwroot下新建一个长文件名目录比如backup_2023_files里面放一个administrator.aspx。然后在命令行进入该目录执行dir /x如果看到类似BACKUP~1和ADMINI~1.ASP的输出说明短名已生成。如果没有检查注册表HKLM\SYSTEM\CurrentControlSet\Control\FileSystem\NtfsDisable8dot3NameCreation是否为 0。Win11 默认可能是 2按卷设置需要改成 0 并重启。提示改注册表前先导出备份。改完不重启的话新创建的文件可能仍然不生成短名。3.3 用 curl 手动验证短名请求的响应差异在扫描之前先用 curl 确认目标对短名请求的反应。请求一个存在的短名和一个不存在的短名对比状态码和响应长度curl -I http://localhost/BACKUP~1/ curl -I http://localhost/ZZZZZZ~1/如果第一个返回 403 或 200第二个返回 404说明可以利用。如果两个都返回 404可能是 IIS 版本已修补或者短名被禁用。我在这步翻过车Win11 自带的 IIS 10 默认对短名请求返回 404但响应头里的Content-Length有细微差别扫描器需要开启“模糊模式”才能识别。4. 跑通 IIS_shortname_Scanner命令、参数与结果解读4.1 解压后的目录结构与依赖安装假设解压到C:\tools\IIS_shortname_Scanner目录里通常有scanner.py主扫描脚本dict.txt前缀字典requirements.txt依赖列表README.md用法说明先装依赖cd C:\tools\IIS_shortname_Scanner pip install -r requirements.txt如果requirements.txt里锁定了旧版本requests在 Python 3.11 上可能报ImportError。我一般直接pip install requests urllib3装最新版然后手动改一下脚本里的导入语句。4.2 最小扫描命令与参数含义最简用法是指定目标 URL 和字典python scanner.py -u http://localhost -d dict.txt常用参数我整理成表参数含义建议值-u目标 URL带协议和端口-d字典文件先用内置 dict.txt-t线程数内网 10公网 3--delay请求间隔秒0.1 到 0.5避免触发 WAF--fuzzy模糊模式IIS 10 上建议开启-o输出文件保存扫描结果线程数别开太高。我有一次在客户内网用 50 线程扫直接把 IIS 应用池打挂日志里全是 503。后来改成 5 线程加 0.2 秒延迟稳定跑完。4.3 扫描结果怎么读短名到长名的还原扫描器输出通常是一行一个短名比如BACKUP~1 - backup ADMINI~1.ASP - admini注意它只能还原前六个字符后面的部分需要结合其他信息猜。比如BACKUP~1可能是backup_2023、backup_files、backupdb。我一般会把短名丢进一个自定义字典用dirb或ffuf再跑一轮把完整路径拼出来。如果扫描器支持--expand参数它会自动尝试常见后缀组合。但别指望它全自动短名扫描只是信息收集的起点不是终点。4.4 用 Python 脚本批量验证短名是否存在有时候扫描器输出太多需要自己写个小脚本过滤。下面这段代码检查一批短名是否返回非 404import requests base http://localhost/ shortnames [BACKUP~1/, ADMINI~1.ASP, UPLOAD~1/] for sn in shortnames: url base sn try: r requests.get(url, timeout5, allow_redirectsFalse) # 404 表示不存在其他状态码都值得关注 if r.status_code ! 404: print(f[] {sn} - {r.status_code} (len{len(r.content)})) except requests.RequestException as e: print(f[-] {sn} 请求失败: {e})逻辑说明allow_redirectsFalse防止 302 跳转干扰判断len(r.content)用于区分 IIS 返回的“短名存在但无权访问”和“短名不存在”两种 404 变体。参数timeout5避免卡死内网可以设 2 秒。5. 避坑与排查短名扫描翻车实录5.1 扫描器报 404 但目录明明存在现象手动dir /x能看到短名但扫描器全部返回 404。 原因IIS 10 默认启用了requestFiltering里的denyUrlSequences其中包含~字符。或者短名请求被 URL 重写规则拦截。 解决在 IIS 管理器中检查请求筛选-拒绝序列移除~。如果是重写规则加一条排除*~*的条件。5.2 扫描速度极慢几分钟才出一个结果现象线程调到 20但每秒请求数不到 1。 原因DNS 解析慢或者requests没有复用连接。另外如果目标开启了keep-alive但脚本每次新建会话握手开销会拖慢速度。 解决在脚本里用requests.Session()并设置session.mount(http://, HTTPAdapter(max_retries3))。线程数别超过目标 IIS 的应用池队列长度。5.3 扫出来的短名拼不出完整路径现象得到BACKUP~1但尝试backup_2023、backup_files都 404。 原因短名只保留前六个字符且去掉了空格和特殊符号。backup 2023的短名也是BACKUP~1但实际 URL 里空格要编码成%20。 解决把短名对应的可能长名列表扩大包含空格、下划线、连字符的组合。用ffuf配合字典跑ffuf -u http://localhost/FUZZ -w candidates.txt -mc 200,301,302,4035.4 Win11 上 IIS 短名功能被系统更新重置现象昨天还能扫今天全部 404。 原因Windows 更新可能重置了NtfsDisable8dot3NameCreation注册表值或者 IIS 的requestFiltering被组策略覆盖。 解决把注册表修改和 IIS 配置导出成.reg和.config备份每次更新后对比恢复。我习惯在测试环境写个 PowerShell 脚本一键检查并修复。5.5 工具包被杀软直接删除现象解压后scanner.py或 exe 文件消失。 原因短名扫描行为被 Defender 标记为HackTool。 解决在虚拟机里关掉实时防护或者把工具目录加入排除项。别在物理机主系统上跑血泪经验。6. 进阶把短名扫描接进自动化信息收集流水线短名扫描单独用价值有限但接进自动化流程后它能补上目录爆破扫不到的死角。我现在的做法是用httpx批量探活对存活 IIS 目标自动跑短名扫描把结果喂给ffuf做二次扩展最后用nuclei匹配已知的短名泄露模板。具体技巧是写一个 Python 包装脚本调用scanner.py的--json输出如果没有就自己解析文本把短名转成候选长名列表。下面是一个简化的流水线片段import subprocess import json def run_shortname_scan(target): # 调用扫描器假设支持 --json 输出 result subprocess.run( [python, scanner.py, -u, target, -d, dict.txt, --fuzzy, --json], capture_outputTrue, textTrue, timeout300 ) try: data json.loads(result.stdout) except json.JSONDecodeError: return [] # 提取短名并生成候选长名 candidates [] for item in data.get(found, []): short item[shortname].rstrip(/) prefix short.split(~)[0].lower() for suffix in [, _backup, _files, _2023, _old, .bak, .zip]: candidates.append(prefix suffix) return candidates # 对多个目标批量执行 targets [http://192.168.1.10, http://192.168.1.11] for t in targets: cands run_shortname_scan(t) with open(fcands_{t.replace(://,_)}.txt, w) as f: f.write(\n.join(cands))这段代码的关键在于--fuzzy参数必须开否则 IIS 10 上漏报严重。timeout300是给慢速目标留余量。生成的候选列表直接丢给ffuf通常能把短名还原成可访问的完整路径。验证方法很简单拿一个已知的短名手动构造完整路径看是否返回 200。如果ffuf跑出来一堆 403说明路径对了但权限不够这时候可以尝试HEAD请求或者换GET带Range头有时候能绕过部分权限检查。我自己的习惯是每次做完短名扫描不管结果多少都把目标 IIS 的web.config和applicationHost.config里的requestFiltering段导出来看一眼。很多运维以为关了短名其实只关了dir /x的显示文件系统层面还在生成。这个习惯帮我省过好几次后悔药——有一次客户坚称短名已禁用结果配置文件里NtfsDisable8dot3NameCreation是 2按卷设置而数据卷恰好没关。希望帮到你。本文还有配套的精品资源点击获取
RELATED

相关推荐

Redis延时队列+Swoole多进程:PHP订单超时关闭实战

Redis延时队列+Swoole多进程:PHP订单超时关闭实战

简介:这份资源面向PHP后端开发者与消息队列学习者,提供一套基于Redis延时队列与Swoole多进程模型构建的高并发消费端实现,可用于订单超时关闭、定时任务触发等需要延迟处理的业务场景。压缩包为zip格式,大小约1.66MB,内…

📅 2026/10/11 16:56:46
Fiddler抓包实战:从HTTPS解密到弱网模拟,解决联调难题

Fiddler抓包实战:从HTTPS解密到弱网模拟,解决联调难题

打开Fiddler的那一瞬间,很多人以为这只是个“看请求”的小工具,但真正用熟之后你会发现,它其实是排查问题时的第一现场。前几天帮一个同事定位接口偶发超时的问题,前端说后端慢,后端说网关在重试,扯了半小时…

📅 2026/10/11 16:56:46
Fiddler抓包实战:从代理原理到HTTPS解密与接口调试

Fiddler抓包实战:从代理原理到HTTPS解密与接口调试

提到抓包工具,很多搞开发、做测试的朋友第一个想到的肯定是Fiddler。我在不同项目里用它做接口联调、移动端调试、性能分析,加起来也有好多年了。有人会把名字写成Fidder,其实官方拼法是Fiddler,但大家都知道说的是同一个工具。简…

📅 2026/10/11 16:56:46
MORE NEWS

更多资讯

📰

从源码构建HaleHound-CYD:PlatformIO多环境编译、OTA升级与Python版本陷阱完整指南

【免费下载链接】HaleHound-CYD ESP32-DIV HaleHound Edition for Cheap Yellow Display - Multi-protocol offensive security toolkit 项目地址: https://gitcode.com/gh_mirrors/ha/HaleHound-CYD 点击查看 免费下载 HaleHound-CYD 是一款运行在 ESP32 Cheap Ye…

📰

Agent基础——HTTP API

假设现在我们的Agent需要向工厂服务器查询设备的数据,这时候可以通过工厂服务器提供的接口进行查询,大致过程如下图所示:1.了解HTTP API首先,我们要先了解什么是HTTP API?我们可以简单的将其理解为:程序通过…

📰

基于YOLOv5的猪脸目标检测实战:数据采集、模型训练到TensorRT部署

简介:基于YOLOv5的猪脸目标检测项目以PyTorch为框架,面向畜牧智能化管理场景,可服务于猪只健康监测、个体识别与行为分析,适配有一定深度学习基础并希望落地目标检测应用的开发者。压缩包共236个文件,大小约70.75MB&am…

📰

Python利用支持向量机SVM进行时间序列预测:数据+源码实战

简介:这份资源面向希望用Python实现时间序列预测的开发者与数据分析学习者,聚焦支持向量机(SVM)在回归预测场景中的落地应用。包内共2个文件,包含1个py源码与1个xlsx数据文件,压缩包约34KB,源码…

📰

AI Toolbox Skills 技能管理完整教程:从 Git 安装到按工具同步,一键搞定

【免费下载链接】ai-toolbox Personal AI Toolbox 项目地址: https://gitcode.com/gh_mirrors/aitoolbo/ai-toolbox 点击查看 免费下载 AI Toolbox 是一款跨平台个人 AI 工具箱,其中的 Skills 技能管理模块可以帮你把 AI 编程技能从 Git 仓库或本地目录…

📰

Postgres主从流复制+pgpool高可用方案:从WAL原理到Failover实操

简介:一份针对 PostgreSQL 高可用架构的完整方案文档,面向数据库运维与架构设计工程师,重点解决基于 WAL 流复制搭建主从库、实时数据同步,以及结合 pgpool-II 实现连接池管理、读写分离与故障自动切换的问题。文档详细介绍了同步…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬