IIS 的录遍历漏目录遍历漏洞,说白了就是录遍历漏服务器把不该给外人看的文件路径,原原本本交到了你手上。录遍历漏你本来只想看个网页,录遍历漏结果顺着 URL 一路往上翻,录遍历漏翻到了数据库配置、录遍历漏日志、录遍历漏甚至系统文件。录遍历漏这事在 2000 年代初到 2010 年前后特别常见,录遍历漏微软的录遍历漏 Internet Information Services 几乎每隔几个版本就要被安全研究者拎出来演示一遍。
最早让人记住的录遍历漏,是录遍历漏 IIS 4.0 和 5.0 时代的
..%c0%af这类畸形编码。正常来说,录遍历漏../会被 IIS 拦下来,录遍历漏但它对 URL 里的录遍历漏 Unicode 编码处理不严,攻击者把斜杠换成%c0%af或者%c1%9c,IIS 解码之后照样当路径分隔符用。结果就是http://target/scripts/..%c0%af../winnt/system32/cmd.exe这种请求可以直接执行系统命令。当年 Code Red 蠕虫就是靠这个把整个互联网搅得鸡飞狗跳。后来 IIS 6.0 做了改进,默认关闭了父路径,但问题没绝迹。2010 年前后爆出的
~短文件名枚举,又是另一种形式的目录遍历。Windows 为了兼容 DOS 的 8.3 命名规则,会给长文件名生成短名,IIS 在处理带波浪号的请求时,会返回不同的响应码,攻击者靠这个就能猜出目录里有哪些文件。比如请求/a~1.txt返回 404,/b~1.txt返回 400,多试几次就能把文件名拼出来。这招在渗透测试里被用得滚瓜烂熟,微软后来发了补丁,但老系统上依然能碰到。我印象比较深的一次,是帮朋友看一台对外的小型服务器。IIS 7.5,站点根目录下有个
backup文件夹,里面躺着web.config的备份。攻击者不需要什么高级工具,浏览器地址栏敲/backup/../web.config,回车,连接字符串和数据库密码全出来了。更离谱的是,那个备份文件的名字就是web.config.bak,连猜都不用猜。这种配置错误和目录遍历漏洞叠加,杀伤力翻倍。为什么 IIS 老出这类问题?一部分原因是它和 Windows 文件系统的耦合太深。NTFS 支持长文件名、短文件名、交替数据流、Unicode 路径,IIS 在解析 URL 时要一层层映射到这些特性上,中间任何一步校验不严,就可能被绕过。另一部分原因是管理员习惯把敏感文件扔在网站目录里,觉得改个复杂文件名就安全了,实际上目录遍历一开,文件名根本不重要。
防御手段其实不复杂。IIS 管理器里把“目录浏览”关掉,这是最基本的。请求筛选里配置好隐藏段,禁止访问
web.config、bin、App_Data这些目录。URL 重写模块可以拦掉带..的请求,但别只依赖字符串匹配,编码变体太多了。最实在的做法是敏感文件根本别放网站目录,数据库配置走环境变量或者独立的配置中心。现在 IIS 的目录遍历漏洞不像以前那么泛滥了,但老版本还在跑,配置错误还在犯。渗透测试报告里隔三差五就能看到“目录遍历”这一条,说明它从来没真正消失过。技术控看这事,核心就一句:路径解析的边界没划清楚,服务器就会变成文件浏览器。
顶: 767踩: 42






评论专区