一台部署了ASP.NET的短洞验Windows Server,如果开启了短文件名支持,文件攻击者敲几行命令就能把网站后台的名泄目录结构摸个底朝天。这不是露漏理论推演,是短洞验我上周在客户那亲眼见到的场景。
验证方法比想象中简单。文件打开命令行,名泄对着目标URL发一个带星号的露漏请求:
http://target/*~1*/.aspx。服务器返回404,短洞验但注意看响应头里的文件X-ASPNET-Version,如果存在且响应时间有明显波动,名泄基本能断定短文件名功能是露漏开着的。更直接的短洞验,用工具如IIS_shortname_Scanner,文件几秒钟内就能列出所有匹配的名泄目录名。原理不复杂。Windows为了兼容老程序,自动给超过8.3格式的文件生成别名,比如
WebAdmin变成WEBAD~1。IIS处理请求时,先解析短文件名再映射到真实路径,攻击者利用这个特性,配合通配符和字典爆破,就能逐个字符推断出文件名。每个字符猜一次,请求量不大但精准。我那次测试,客户是个中型电商平台。扫描器跑完,后台登录地址
/admin_login.aspx直接暴露——短文件名ADMIN~1.ASP被解析出来。整个扫描过程不到30秒,没触发任何WAF告警。为什么?因为请求看起来就是普通的404探测,流量特征和目录扫描完全不同。修复倒是干脆。在系统盘执行
fsutil behavior set disable8dot3 1,重启后新创建的文件不再生成短名。但有个坑:已经存在的文件,短名还在。你得把现有网站目录里的文件全部复制一遍再覆盖,或者用dir /x查出来手动处理。更省事的办法是在IIS里配置URL过滤规则,把包含~的请求直接拦掉,但注意这会误伤部分合法请求。还有个细节容易被忽略。如果网站用的是.NET 4.5以下版本,光关短文件名没用,IIS自身的
RequestFiltering模块还留着后门。得在web.config里加上,否则响应头里的版本号照样泄露信息。这漏洞的危害不在直接攻击,而在信息铺垫。攻击者拿到目录结构后,能精准锁定后台、备份文件、敏感配置的路径,后续攻击成功率翻倍。我见过太多团队只盯着SQL注入和XSS,对这种“小问题”不以为然——直到某天备份文件被扫出来,才追悔莫及。
测试时留个心眼。别在生产环境直接跑扫描器,请求量再小也可能影响日志分析。先在测试环境验证,确认漏洞存在后,用单个手工请求(比如
/a~1*/.aspx)做最终确认。响应时间差超过30毫秒,基本实锤。要是服务器开了防火墙日志,记得清理测试痕迹,别给运维添乱。说到底,安全验证不是走流程,而是理解每个漏洞背后的设计缺陷。短文件名这问题,微软十年前就该彻底修掉,但为了兼容性一直拖到现在。作为防守方,你知道原理,就能在攻击者动手前堵住这个口子。
顶: 662踩: 6952






评论专区