WEB安全--內網滲透--LMNTLM基礎

一、前言

LM HashNTLM Hash是Windows系統中的兩種加密算法,不過LM Hash加密算法存在缺陷,在Windows Vista 和 Windows Server 2008開始,默認情況下只存儲NTLM Hash,LM Hash將不再存在。所以我們會著重分析NTLM Hash。

在我們內網滲透的過程中,有通過抓取Windows服務器內部的hash值登錄到域環境中的其他服務器進行橫向滲透這一方式。

Windows(登錄)的認證方式有兩種:

?

1.1、本地認證

本地認證指操作系統運行winlogon進程顯示登錄界面,接收用戶的輸入,然后將輸入的密碼交給lsass進程,這個進程執行兩個操作:①使用動態秘鑰對稱加密(mimikatz可以解密)的方式在內存中緩存一份“明文密碼”? ②將密碼轉換成NTLM Hash,然后會將NTLM Hash與本地的SAM數據庫中存儲的密碼進行比對,如果一致則通過驗證。

補充:

windows內部是不保存明文密碼的,只保存密碼的hash。其中本機用戶的密碼hash是放在 本地的SAM文件 里面,域內用戶的密碼hash是存在域控的NTDS.DIT文件 里面。

?

1.2、網絡認證

內網中的網絡環境可以分為工作組環境域環境,它們使用的加密協議:

工作組環境:NTLM Hash(默認) ||? ?LM Hash(被淘汰)

域環境:Kerberos(默認)? ||? NTLM Hash(不滿足Kerberos條件)

所以在某些情況下,域環境中的服務器也可以使用NTLM Hash加密算法。

用戶在內網中服務器之間的登錄操作是基于這些協議加密算法來建立安全的連接的,具體的實現請看下面的解析。

?

二、SSPI&SSP

在學習NTLM協議之前,我們需先了解兩個概念:SSPI&SSP

2.1、SSPI

SSPI是Windows定義的一套接口,該接口定義了與安全有關的功能函數,如:

????????1、身份驗證機制

????????2、為其他協議提供的Session Security機制(會話安全機制),為通訊提供數據完整性校驗以及數據的加、解密功能

該接口只是定義了一套接口函數,但是并沒有實現具體的內容。

?

2.2、SSP

SSP是SSPI的具體實現,微軟自己實現了如下的SSP,用于提供安全功能,如:

????????1、NTLM SSP:為Windows 2000之前的客戶端-服務器域和非身份域驗證(SMB/CIFS)提供NTLM質詢/響應身份驗證

????????2、Kerberos SSP:Windows2000及更高版本中首選的客戶端-服務器域相互身份驗證

????????3、Digest SSP

????????4、Negotiate SSP

? ? ? ? 5、Cred SSP

? ? ? ? 6、Schannel SSP

????????......

?

三、NTLM身份認證

NTLM協議是一種網絡協議認證,采用一種質詢/應答(Challenge/Response)的信息交換模式。

認證流程:

? ? ? ? 1、協商:確定雙方協議版本、加密等級

? ? ? ? 2、質詢:質詢/應答(Challenge/Response)信息交換的過程

? ? ? ? 3、認證:驗證結果

?

3.1、質詢過程

在工作組環境下:

①:用戶通過密碼登錄客戶端電腦

②:(type 1)客戶端向服務器發送type 1(協商)消息,它主要包含客戶端支持和服務器請求的功能列表,如設備信息、密碼信息等

③:接收請求,生成Challenge。加密Challenge,生成Net-NTLM Hash

④:(type 2)服務器用type 2消息(質詢)進行響應,這包含服務器支持和同意的功能列表。但是,最重要的是,它包含服務器產生的Challenge

⑤:接收到Challenge后,使用將要登錄到賬戶對應的NTLM Hash加密Challenge生成Response

⑥:(type 3)客戶端用type 3消息(身份驗證)回復質詢。將response,username,challenge發給服務器。消息中的response是最關鍵的部分,因為它們向服務器證明客戶端用戶已經知道帳戶密碼

⑦:比對Server生成的Net-NTLM Hash與Response是否相等

⑧:驗證成功

?

3.2、數據包信息

NTLM只是底層的認證協議,其必須鑲嵌在上層應用協議里面,消息的傳輸依賴于使用NTLM的上層協議,如SMB、HTTP等。

數據包的關鍵信息如下:

協商(type1):

Negotiate Flags具體內容如下:

質詢(type2):

其中最主要的信息是challenge,如下:

?

?

認證(type3):

這里的Challenge不同于type2 的Challenge,這里的Challenge是一個隨機的客戶端nonce。

?

數據包內容如下:


可以看到type3 Response響應消息數據包中的是NTLMv2響應。那NTLMv2響應是怎樣構建出type3 Response的呢?

請看下面介紹:

?

3.3、NTLMv2響應

在type3中的響應,有六種類型的響應:

  • LM(LAN Manager)響應 - 由大多數較早的客戶端發送,這是“原始”響應類型。

  • NTLMv1響應 - 這是由基于NT的客戶端發送的,包括Windows 2000和XP。

  • NTLMv2響應 - 在Windows NT Service Pack 4中引入的一種較新的響應類型。它替換啟用了 NTLM版本2的系統上的NTLM響應。

  • LMv2響應 - 替代NTLM版本2系統上的LM響應。

  • NTLM2會話響應 - 用于在沒有NTLMv2身份驗證的情況下協商NTLM2會話安全性時,此方案會更改LM NTLM響應的語義。

  • 匿名響應 - 當匿名上下文正在建立時使用; 沒有提供實際的證書,也沒有真正的身份驗證。“存 根”字段顯示在類型3消息中。

NTLMv2加密算法

Net-ntlm hash v2的格式為:

username::domain:challenge:HMAC-MD5:blob

type3中Response的構成方式:

①將Unicode后的大寫用戶名與Unicode后的身份驗證目標(在Type 3消息的"TargetName"字段中指定的域或服務器名稱)拼在一起;

②構建一個blob信息;

③使用16字節NTLMv2哈希作為密鑰,將HMAC-MD5消息認證代碼算法加密一個值(來自type 2的Challenge與Blob拼接在一起),得到一個16字節的NTProofStr;

NTLMv2 Hash = HMAC-MD5(unicode(hex((upper(UserName)+DomainName))),NTLM Hash)
NTProofStr = HMAC-MD5(challenge+blob,NTLMv2 Hash)

④將NTProofStr與Blob拼接起來形成得到response。

?

3.4、MIC

MIC是校驗和,設計MIC主要是為了防止這個包中途被修改。

計算公式:

MIC = HMAC_MD5(exportedSessionKey,NEGOTIATE_MESSAGE+CHALLENGE_MESSAGE+AUTHENTICATE_MESSAGE)

?

關于exportedSessionKey,請看下面

3.5、簽名

keyExchangeKey是使用用戶password和severChallenge經過一定運算得到

SessionKey是由keyExchangeKey和exportedSessionKey經過一定運算得到

SessionKey是在要求進行簽名的時候用的,用來進行協商加密密鑰。

首先,客戶端會生成一個隨機數exportedSessionKey,后續都是使用這個exportedSessionKey來加解密流量。由于exportedSessionKey是客戶端生成的,服務端并不知道,那么是通過什么手段進行協商的呢?

客戶端使用keyExchangeKey做為Key,RC4加密算法加密exportedSessionKey,得到我們流量中看到的SessionKey。服務端拿到流量后,使用用戶密碼和質詢值Challenge經過運算生成keyExchangeKey,然后使用SessionKey跟keyExchangeKey一起運算(解密)得到exportedSessionKey,然后使用exportedSessionKey進行加解密流量。對于攻擊者來說,由于沒有用戶的密碼,無法生成keyExchangeKey。因此,攻擊者即使在拿到流量后,也無法計算出exportedSessionKey,自然也就無法解密流量了。

?

?

?

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

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

相關文章

時尚優雅奢華品牌包裝徽標設計襯線英文字體安裝包 Kagea – Luxury Women Ligature Font

Kagea 是一種復雜的襯線字體,有常規和壓縮兩種樣式,具有 50 連字和替代字體,并支持多種語言。其精致的比例和別致的字體使其成為高端品牌、編輯布局、高檔包裝、時尚品牌和奢侈品設計的理想選擇。 包含內容: TTF、OTF 和 WOFF 格…

cut命令用法

cut 是 Linux/Unix 系統中一個用于按列提取文本內容的命令,常用于處理結構化文本(如 CSV、日志、配置文件等)。它通過分隔符、字符位置或字節位置來切割文本,提取指定部分。 核心功能 按字段(列)提取&#…

美國mlb與韓國mlb的關系·棒球9號位

MLB(Major League Baseball,美國職業棒球大聯盟)作為全球最高水平的職業棒球聯賽,與韓國市場流行的“MLB”時尚品牌之間存在著授權合作關系,但兩者在業務范疇和品牌定位上存在顯著差異。 一、品牌授權背景:…

從吉卜力漫畫到藝術創造:GPT-4o多種風格繪圖Prompt大全

在3月底,GPT-4o掀起了一陣吉卜力繪圖浪潮,大家紛紛輸入一張圖片,讓4o模型進行風格化遷移,其中吉卜力風格的漫畫在社交媒體上最為火熱。在大家爭議4o的訓練數據是否侵權和4o背后的技術原理的時候,我們先來玩一玩&#x…

Leetcode 3510. Minimum Pair Removal to Sort Array II

Leetcode 3510. Minimum Pair Removal to Sort Array II 1. 解題思路2. 代碼實現 題目鏈接:3510. Minimum Pair Removal to Sort Array II 1. 解題思路 這一題和題目3507. Minimum Pair Removal to Sort Array I本質上是同一道題目,唯一的區別在于時間…

【數學建模】(時間序列模型)ARIMA時間序列模型

ARIMA時間序列模型詳解及常見時間序列模型概覽 文章目錄 ARIMA時間序列模型詳解及常見時間序列模型概覽1 引言2 ARIMA模型的基本概念3 ARIMA模型的組成部分詳解3.1 AR模型 (自回歸模型)3.2 MA模型 (移動平均模型)3 I (差分) 4 ARIMA模型的建模步驟5 Python實現ARIMA模型6 常見時…

嵌入式AI開發者職業成長路線圖

嵌入式AI開發者職業成長路線圖 一、核心技術能力構建 1. 深度學習框架 TensorFlow/TensorFlow Lite:適合部署到嵌入式設備PyTorch:研究和原型開發ONNX:模型轉換與部署 2. 模型理解與應用 卷積神經網絡(CNN):圖像識別、目標檢…

單元測試之mockito

簡介 mockito是一款模擬測試框架,用于Java開發中的單元測試。通過mockito,可以創建和配置一個對象,通過它來替換對象的外部依賴。 作用:模擬一個類的外部依賴,保證單元測試的獨立性。例如,在類A中會調用類…

Oracle數據庫數據編程SQL<5 正則表達式函數*****>

Oracle 提供了一組強大的正則表達式函數,用于在 SQL 和 PL/SQL 中進行復雜的模式匹配和文本處理。這些函數基于 POSIX 標準正則表達式,功能強大且靈活。 目錄 一、Oracle 正則表達式函數概覽 二、函數詳解及示例 1. REGEXP_LIKE 2. REGEXP_INSTR 3. REGEXP_SUBSTR 4. …

el-tabs添加按鈕增加點擊禁止樣式

前置文章 一、vue使用element-ui自定義樣式思路分享【實操】 二、vue3&ts&el-tabs多個tab表單校驗 現狀確認 點擊添加按鈕,沒有點擊樣式,用戶感知不明顯沒有限制最大的tab添加數量,可以無限添加 調整目標&代碼編寫 調整目標…

DB-Mysql中TIMESTAMP與DATETIME的區別

文章目錄 ?存儲范圍??時區處理?存儲空間?默認值和自動更新??零值處理?適用場景?總結 在MySQL中,TIMESTAMP和DATETIME是兩種常用的日期時間數據類型,它們雖然都用于存儲日期和時間,但在多個方面存在顯著差異。以下是它們的主要區別&a…

Spring 中有哪些設計模式?

🧠 一、Spring 中常見的設計模式 設計模式類型Spring 中的應用場景單例模式創建型默認 Bean 是單例的工廠模式創建型BeanFactory、FactoryBean抽象工廠模式創建型ApplicationContext 提供多個工廠接口代理模式結構型AOP 動態代理(JDK/CGLIB)…

C# Winform 入門(3)之尺寸同比例縮放

放大前 放大后 1.定義當前窗體的寬度和高度 private float x;//定義當前窗體的寬度private float y;//定義當前窗臺的高度 2.接收當前窗體的尺寸大小 x this.Width;//存儲原始寬度ythis.Height;//存儲原始高度setTag(this);//為控件設置 Tag 屬性 3.聲明方法,獲…

從零開始的編程-java篇1.6.3

前言: 通過實踐而發現真理,又通過實踐而證實真理和發展真理。從感性認識而能動地發展到理性認識,又從理性認識而能動地指導革命實踐,改造主觀世界和客觀世界。實踐、認識、再實踐、再認識,這種形式,循環往…

【Redis】數據的淘汰策略

目錄 淘汰策略方案(8種) LRU和LFU策略的區別 使用建議 手搓LRU算法 方式一 方式二 大家好,我是jstart千語。今天和大家回來聊一下redis,這次要講的是它的淘汰策略。為什么需要淘汰策略呢,就是當redis里面的內存占…

【前端】Node.js一本通

近兩天更新完畢,建議關注收藏點贊。 目錄 復習Node.js概述使用fs文件系統模塊path路徑模塊 http模塊 復習 為什么JS可以在瀏覽器中執行 原理:待執行的JS代碼->JS解析引擎 不同的瀏覽器使用不同的 JavaScript 解析引擎:其中,C…

【AI論文】JavisDiT: 具備層次化時空先驗同步機制的聯合音視頻擴散Transformer

摘要:本文介紹了一種新型的聯合音頻-視頻擴散變換器JavisDiT,該變換器專為同步音頻-視頻生成(JAVG)而設計。 基于強大的擴散變換器(DiT)架構,JavisDiT能夠根據開放式用戶提示同時生成高質量的音…

Java-實現公有字段自動注入(創建人、創建時間、修改人、修改時間)

文章目錄 Mybatis-plus實現自動注入定義 MetaObjectHandler配置 MyBatis-Plus 使用 MetaObjectHandler實體類字段注解使用服務類進行操作測試 Jpa啟用審計功能實現自動注入添加依賴啟動類啟用審計功能實現AuditorAware接口實體類中使用審計注解 總結 自動注入創建人、創建時間、…

金融機構開源軟件風險管理體系建設

開源軟件為金融行業帶來了創新活力的同時,也引入了一系列獨特的風險。金融機構需要構建系統化的風險管理體系,以識別和應對開源軟件在全生命周期中的各種風險點。下面我們將解析開源軟件在金融場景下的主要風險類別,并探討如何建立健全的風險…

圖形渲染中的定點數和浮點數

三種API的NDC區別 NDC全稱,Normalized Device Coordinates Metal、Vulkan、OpenGL的區別如下: featureOpenGL NDCMetal NDCVulkan NDC坐標系右手左手右手z值范圍[-1,1][0,1][0,1]xy視口范圍[-1,1][-1,1][-1,1] GPU渲染的定點數和浮點數 定點數類型&a…