Windows下的"你画我猜" -- 告别效率低下的目录扫描方法
字数 1212 2025-08-29 08:32:10
Windows环境下的高效目录扫描技术详解
0x01 前言
在Web应用安全测试中,目录和文件结构的探测是基础且关键的环节。传统Linux环境下通常只能依赖指纹识别或暴力枚举,效率低下。而在Windows环境下,利用系统特有机制可以实现更高效的目录扫描方法。
0x02 Windows API与通配符特性
Windows API函数FindFirstFileExW()和FindFirstFile()对特殊字符有特殊处理:
>等价于通配符?(匹配0或1个字符)<等价于通配符*(匹配0或多个字符)"等价于通配符.(匹配单个字符,除换行符外)
受影响PHP函数:
include(), include_once(), require(), require_once()
fopen(), copy(), file_get_contents(), readfile()
file_put_contents(), mkdir(), opendir(), readdir()
move_uploaded_file(), getimagesize()
注意:这是Windows API层面的特性,任何调用这些API的语言都可能存在此问题,PHP只是其中之一。
0x03 IIS短文件名机制
Windows为兼容MS-DOS,为长文件名创建8.3格式的短文件名:
- 文件名显示前6字符,后接
~1(同名文件数字递增) - 扩展名显示前3字符
查看方法:
cmd > dir /x
0x04 Windows + IIS 6 + .NET环境探测
适用条件
- 文件名>8字符或扩展名>3字符
- Windows + IIS + .NET环境
- 只能获取文件名前6位和扩展名前3位
探测方法
-
文件名猜测:
http://target/a*~1****/xxx.aspx # 404表示存在 http://target/aa*~1****/xxx.aspx # 400表示不存在 -
判断文件/目录:
http://target/abc775*~1/xxx.aspx # 404表示目录 -
扩展名猜测:
http://target/abc775*~1*a**/xxx.aspx http://target/abc775*~1*as*/xxx.aspx http://target/abc775*~1*asp/xxx.aspx
0x05 Windows + IIS 7.x + .NET环境探测
关键差异
默认情况下GET请求无论是否存在都返回404,需使用OPTIONS方法:
- 存在:返回404
- 不存在:返回200
开启详细错误后:
- 存在:错误代码
0x00000000 - 不存在:错误代码
0x80070002
0x06 Windows + Apache + PHP环境探测
特性1:利用PHP函数逐位猜测
示例代码:
<?php
$filename = $_GET['filename'];
$file = "./abcdefg1234567aaabb/" . $filename;
var_dump(getimagesize($file));
?>
目录猜测:
http://target/1.php?filename=../a</01.png # 正常表示存在
http://target/1.php?filename=../aa</01.png # 错误表示不存在
文件猜测:
http://target/1.php?filename=../path/w<.php
http://target/1.php?filename=../path/wo<.php
特性2:直接使用短文件名访问
http://target/abcdef~1/woaini~1.php
http://target/uploads/abcdef~1.zip
0x07 Windows + IIS + PHP环境探测
组合特性
- 使用OPTIONS方法猜测短文件名
- 利用PHP函数猜测完整路径
- 使用通配符直接访问文件
示例:
http://target/1.php?filename=../abcdefg1234567aaabbb/<.php
http://target/abcdefg1234567aaabbb/w<.php
0x08 Windows + Nginx + PHP环境探测
特性差异
- 可直接用短文件名访问目录和文件
- 可用通配符访问文件(不能访问目录)
- 保留PHP函数特性
示例:
http://target/abcdef~1/xxxaaa~1.php
http://target/abcdef~1/x<.php
0x09 技术原理总结
这些技术本质上是Windows三个特性的组合应用:
- Windows API对特殊字符的处理
- 8.3短文件名机制
- 不同Web服务器和语言对这些特性的实现差异
0x10 防御建议
- 禁用短文件名生成(修改注册表)
- 对用户输入进行严格过滤
- 避免将敏感函数与用户输入直接关联
- 关闭不必要的详细错误信息