IIS 服务器渗透测试与枚举技术
Microsoft Internet Information Services (IIS) 服务器经常存在配置错误,为安全研究人员和漏洞赏金猎人提供了广泛的攻击面。核心结论是,默认的 IIS 欢迎页面往往掩盖了更深层次的漏洞,包括内部 IP 泄露、短文件名枚举以及可能导致远程代码执行 (RCE) 的关键配置文件暴露。
大规模识别 IIS 目标
可以使用被动侦察和主动指纹识别来识别 IIS 服务器,从而为进一步测试构建目标列表。
被动发现
- Shodan 查询: 使用类似
ssl:"target.com" http.title:"IIS"或org:"target" http.title:"IIS"的查询来查找暂存服务器和被遗忘的管理面板。 - Google Dorking: 搜索 IIS 特有的指示符,例如
site:target.com inurl:aspnet_client或site:target.com ext:aspx | ext:ashx | ext:asmx。使用堆叠通配符(例如site:*.*.target.com)可以揭示嵌套的子域名和开发环境。
主动指纹识别
- 响应头: 通过
nc或openssl发送原始请求通常会揭示Server: Microsoft-IIS/10.0和X-Powered-By: ASP.NET响应头。 - 自动化扫描: 可以使用
httpx等工具进行大规模目标指纹识别:httpx -l targets.txt -td | grep IIS。
初始信息收集
一旦识别出 IIS 服务器,特定的请求可能会泄露内部基础设施详情。
内部 IP 泄露
向某些 IIS 设置(特别是那些位于 Microsoft Exchange 或 OWA 前端的设置)发送 HTTP/1.0 请求,可能会触发服务器在 Location 响应头中返回内部 IP 地址。这通常伴随着 X-FEServer 响应头,从而揭示服务器的内部主机名。
处理 HTTPAPI 2.0 404 错误
HTTPAPI 2.0 404 错误通常表示服务器正在运行,但需要特定的 Host 响应头才能将请求路由到虚拟主机。可以通过以下方式绕过:
- 检查 SSL 证书的 Subject 或 Subject Alternative Name (SAN) 字段以获取正确的主机名。
- 使用
ffuf配合Host响应头字典进行虚拟主机爆破。
高级枚举:IIS 波浪号短文件名
IIS 保留了传统的 DOS 8.3 文件名约定,允许攻击者在禁用目录列表的情况下枚举文件和目录的短名称。
短文件名发现
使用 shortscan 或 Burp Suite IIS Tilde Enumeration Scanner 等工具可以识别短文件名片段(例如,WEB~1.CON 代表 web.config 或 SITEBA~1.ZIP 代表备份文件)。
将短文件名解析为完整文件名
由于短文件名仅提供前六个字符,必须通过外部数据来猜测或解析完整文件名:
- LLMs: 使用提示词引导大语言模型根据短文件名片段生成可能的完整单词列表。
- GitHub Dorking: 使用 GitHub 代码搜索(例如
path:/.ds_st)来查找匹配短文件名模式的真实文件名。 - BigQuery: 通过 Google BigQuery 查询公共 GitHub 数据集,以查找匹配短文件名正则表达式的独特路径(例如
REGEXP_CONTAINS(path, r'(?i)(\/siteba[a-z0-9]+\.zip|^siteba[a-z0-9]+\.zip)'))。 - 爆破: 使用
crunch生成剩余字符的组合,并使用ffuf进行模糊测试,测试各种分隔符,如连字符、下划线和 URL 编码的空格 (%20)。
高价值目标模糊测试
通用的字典文件对于 IIS 往往是无效的。模糊测试应侧重于 .NET 特有的文件和扩展名。
关键路径与扩展名
高价值目标包括:
配置文件:
/web.config,/web.config.bak,/appsettings.json, 以及/connectionstrings.config。调试端点:
/trace.axd(ASP.NET trace viewer) 和/elmah.axd(error log viewer),它们可能会泄露请求/响应日志和凭据。扩展名:
.asp,.aspx,.ashx,.asmx,.config,.json,.xml,.zip,.bak,.txt。
推荐字典文件
有效的字典文件包括 SecLists 的 IIS.txt, Orwa 的 iis.txt 和 aspx.txt, 以及 Assetnote 自动生成的 ASP/ASPX 列表。
利用与绕过技术
web.config RCE 链
访问 web.config 文件是一个关键发现。这些文件通常包含用于签名和加密 ViewState 的 machine keys。如果获取了这些密钥,攻击者可以使用 ysoserial.net 来伪造恶意的序列化 ViewState 负载,从而导致远程代码执行 (RCE)。
通过无 Cookie 会话访问 DLL
攻击者可以通过滥用 ASP.NET 的无 Cookie 会话语法 (S(X)) 来绕过目录限制以访问 /bin 文件夹。例如,GET /(S(X))/b/(S(X))in/WebApplication1.dll 可以解析为 /bin/WebApplication1.dll,从而允许攻击者下载编译后的 DLL 文件,以便在 dnSpy 或 JetBrains dotPeek 等工具中进行反编译。
路径与身份验证绕过
- 反向代理路径混淆: 使用
%2f(URL 编码的斜杠) 来绕过代理访问控制(例如/anything/..%2fadmin/)。 - NTFS 元数据黑客技术: 通过请求 NTFS 备用数据流 (例如
/admin::$INDEX_ALLOCATION/admin.php) 来绕过 IIS 7.5 中的基本身份验证。 - 文件上传绕过: 通过在文件名末尾添加点号(例如
shell.aspx.)来绕过.aspx过滤器,因为 IIS 在提供文件时会剥离掉这些点号。
通过 HTTP 参数污染 (HPP) 实现 WAF 绕过
IIS 和 ASP.NET 拼接重复的参数值,并使用逗号分隔。这可以用于将负载拆分到多个参数中(例如 ?param=<svg/¶m=onload=alert(1)>)以规避 WAF 检测,同时后端服务器会重新组合负载。