1. 程式人生 > 實用技巧 >域滲透基本概念

域滲透基本概念

域滲透基本概念

0x01 什麼是內網?

內網就是區域網(LAN),比如內網中的機器,輸入ipconfig /all發現我們的ip是192.168..,內網中一號機器是192.168.0.1,二號機器是192.168.0.2,以此類推,但是我們在瀏覽器中輸入 ip.cn 發現都是同一個ip。

0x02 什麼是工作組?

這是區域網中的一個概念,當我們區域網內的主機太多時,或者需要對不使用者進行功能分類時,就需要用到工作組。就相當於把我們的檔案分類裝在不同的資料夾中,一個是學習一個是工作。我們可以右擊 此電腦 的屬性,發現可以直接看到我們所處的工作組,其右側可以進行設定更改。工作組的憑證都是放在本地的。

0x03 什麼是域?

域英文叫DOMAIN——域(Domain)是Windows網路中獨立執行的單位,域之間相互訪問則需要建立信任關係(即Trust Relation)。信任關係是連線在域與域之間的橋樑。當一個域與其他域建立了信任關係後,2個域之間不但可以按需要相互進行管理,還可以跨網分配檔案和印表機等裝置資源,使不同的域之間實現網路資源的共享與管理,以及相互通訊和資料傳輸。

域既是 Windows 網路作業系統的邏輯組織單元,也是Internet的邏輯組織單元,在 Windows 網路作業系統中,域是安全邊界。域管理員只能管理域的內部,除非其他的域顯式地賦予他管理許可權,他才能夠訪問或者管理其他的域,每個域都有自己的安全策略,以及它與其他域的安全信任關係。

可以把域和工作組聯絡起來理解,在工作組上你一切的設定在本機上進行包括各種策略,使用者登入也是登入在本機的,密碼是放在本機的資料庫來驗證的。而如果你的計算機加入域的話,各種策略是域控制器統一設定,使用者名稱和密碼也是放到域控制器去驗證,也就是說你的賬號密碼可以在同一域的任何一臺計算機登入。登陸到域中的時候,身份驗證是採用Kerberos協議在域控制器上進行的,登陸到此計算機則是通過SAM來進行NTLM驗證的

0x04 什麼是域控制器?

在“域”模式下,至少有一臺伺服器負責每一臺聯入網路的電腦和使用者的驗證工作,相當於一個單位的門衛一樣,稱為“域控制器(Domain Controller,簡寫為DC)”。 域控制器中包含了由這個域的賬戶、密碼、屬於這個域的計算機等資訊構成的資料庫。當電腦聯入網路時,域控制器首先要鑑別這臺電腦是否是屬於這個域的,使用者使用的登入賬號是否存在、密碼是否正確。如果以上資訊有一樣不正確,那麼域控制器就會拒絕這個使用者從這臺電腦登入。不能登入,使用者就不能訪問伺服器上有許可權保護的資源,他只能以對等網使用者的方式訪問Windows共享出來的資源,這樣就在一定程度上保護了網路上的資源。

域控是活動目錄的儲存地方,也就是說活動目錄儲存在域控制器內。安裝了活動目錄的計算機就稱為域控制器,其實在你第一次安裝活動目錄的時候,你安裝活動目錄的那臺計算機就成為了域控制器。一個域可以有一臺或多臺域控制器。最經典的做法是做一個主輔域控。

0x05 什麼是活動目錄?

活動目錄(Active Directory)簡稱AD。它基於DNS,以樹狀結構儲存了一個域內有關網路物件(例如使用者、使用者組、計算機、域、安全策略等等)的資訊,其中包含所有域使用者和計算機帳戶的密碼雜湊值。它提供基礎網路服務(DNS/DHCP等)、計算機管理、使用者服務、資源管理、桌面配置、應用系統支撐等功能。

活動目錄是微軟Windows Server中,負責架構中大型網路環境的集中式目錄管理服務(Directory Services)。目錄服務在微軟平臺上從Windows Server 2000開始引入,所以我們可以理解為活動目錄是目錄服務在微軟平臺的一種實現方式。當然目錄服務在非微軟平臺上都有相應的實現。

Windows Server 2003的域環境與工作組環境最大的不同是,域內所有的計算機共享一個集中式的目錄資料庫(又稱為活動目錄資料庫),它包含著整個域內的物件(使用者賬戶、計算機賬戶、印表機、共享檔案等)和安全資訊等等,而活動目錄負責目錄資料庫的新增,修改,更新和刪除。所以我們要在Windows Server 2003上實現域環境,其實就是要安裝活動目錄。活動目錄為我們實現了目錄服務,提供對企業網路環境的集中式管理。比如在域環境中,只需要在活動目錄中建立一次Bob賬戶,那麼就可以在任意200臺電腦中的一臺上登入Bob,如果要為Bob賬戶更改密碼,只需要在活動目錄中更改一次就可以了,也就是說域使用者資訊儲存在活動目錄中。

ntds.dit是AD中的資料庫檔案,它被儲存在域控制器中c:\windows\system32\ntds\ntds.dit的位置。

0x06 什麼是域樹、林和組織單元

活動目錄的邏輯結構包裹:域(Domain)、域樹(Domain Tree)、林(Forest)和組織單元(Organization Unit)。

  • 域是一種邏輯分組,準確的說是一種環境,域是安全的最小邊界。域環境能對網路中的資源集中統一的管理,要想實現域環境,你必須要計算機中安裝活動目錄。 域樹是由一組具有連續名稱空間的域組成的。
  • 假如最上層的域名為contoso.com,這個域是這棵域樹的根域(root domain),此根域下面
    有2個子域,分別是gsd.contoso.com和ged.contoso.com。我們可以看出他們的名稱空間具有連續性。例如,域gsd.contoso.com的字尾名包含著上一層父域的域名contoso.com。其實子域gsd.contoso.com和ged.contoso.com還都可以有自己的子域。域樹內的所有域共享一個Active Directory(活動目錄),這個活動目錄內的資料分散地儲存在各個域內,且每一個域只儲存該域內的資料,如該域內的使用者賬戶,計算機賬戶等,Windows Server 2003將儲存在各個域內的物件總稱為Active Directory。
  • 林(Forest)是有一棵或多棵域樹組成的,每棵域樹獨享連續的名稱空間,不同域樹之間沒有名稱空間的連續性。林中第一棵域樹的根域也整個林的根域,同時也是林的名稱。
  • 組織單元(OU)是一種容器,它裡面可以包含物件(使用者賬戶,計算機賬戶等),也可以包含其他的組織單元(OU)。

0x07 什麼是SAM?

SAM(security account manager 安全賬戶管理器)。就是我們建立電腦使用者時的一個使用者唯一標識,它存在c:/windows/system32/config/SAM,類似於linux裡的/etc/passwd檔案,不過它是加密了的,顯得更加複雜。而且我們可以通過刪除/替換 SAM檔案,通過PE 免密登入一些老版本系統的管理員賬號。

0x08 什麼是Kerberos協議?

kerberos 是一種由MIT(麻省理工大學)提出的一種網路身份驗證協議,它旨在通過使用加密技術為客戶端/服務端應用程式提供強大的認證服務。

kerberos協議中主要由三個角色:

(1)訪問服務的client(一下表述為Client或者使用者)

(2)提供服務的server(一下表述為服務)

(3)KDC(Key Distribution Center)金鑰分發中心

其中KDC服務預設會安裝在一個域的域控中,而Client和Server為域內的使用者或者是服務,如HTTP服務,SQL服務,遠端桌面服務。在kerberos中Client是否有許可權訪問Server端的服務有KDC發放的票據決定。

協議過程:

  1. AS_REQ:Client向KDC發起AS_REQ請求內容為:明文形式的使用者名稱、通過Client密碼Hash 後加密的時間戳、ClientID、網路地址、加密型別等內容。

  2. AS_REP:當KDC接收到請求之後,通過AD獲取該使用者的資訊。通過獲取的密碼資訊生成一個祕鑰對Authenticator進行解密。如果解密後的內容和已知的內容一致,則證明請求著提供的密碼正確,即確定了登入者的真實身份。AS成功認證對方的身份之後,會先生成一個用於確保該使用者和KDC之間通訊安全的會話祕鑰——Logon Session Key,並採用該使用者密碼派生的祕鑰進行加密。KAS接著為該使用者建立“認購權證”——TGT。TGT主要包含兩方面的內容:使用者相關資訊和Logon Session Key,而整個TGT則通過KDC自己的金鑰進行加密。最終,被不同金鑰加密的Logon Session Key和TGT返回給客戶端。

  3. TGS_REQ:Client憑藉TGT票據向KDC發起針對特定服務的TGS_REQ請求,該請求主要包含如下的內容:客戶端使用者名稱、通過Logon Session Key加密的Authenticator、TGT和訪問的伺服器(其實是服務)名。

  4. TGS_REP:KDC使用 NTLM-hash進行解密獲取Logon Session Key,然後通過Logon Session Key解密Authenticator,進而驗證了對方的真實身份。TGS完成對客戶端的認證之後,會生成一個用於確保客戶端-伺服器之間通訊安全的會話祕鑰——Service Session Key,該會話祕鑰通過Logon Session Key進行加密。然後出售給客戶端需要的入場券——ST。ST主要包含兩方面的內容:客戶端使用者資訊和Service Session Key,整個ST通過伺服器密碼派生的祕鑰進行加密。最終兩個被加密的Service Session Key和ST回覆給客戶端。

  5. AP_REQ:Client拿著TGS票據去請求服務,但是,服務端在接收到ST之後,如何確保它是通過TGS購買,而不是自己偽造的呢?這很好辦,不要忘了ST是通過自己密碼派生的祕鑰進行加密的。具體的操作過程是這樣的,除了ST之外,服務請求還附加一份通過Service Session Key加密的Authenticator。

  6. AP_REP:伺服器在接收到請求之後,先通過自己密碼派生的祕鑰解密ST,並從中提取Service Session Key。然後通過提取出來的Service Session Key解密Authenticator,進而驗證了客戶端的真實身份。現在伺服器已經可以確保客戶端是它所聲稱的那麼使用者,客戶端還沒有確認它所訪問的不是一個釣魚服務呢。為了解決客戶端對伺服器的驗證,服務要需要將解密後的Authenticator再次用Service Session Key進行加密,併發揮給客戶端。客戶端再用快取的Service Session Key進行解密,如果和之前的內容完全一樣,則可以證明自己正在訪問的伺服器和自己擁有相同的Service Session Key,而這個會話祕鑰不為外人知曉。解出來之後伺服器會得到一個賬戶的PAC,然後伺服器會就拿著PAC去KDC那邊問Client有沒有訪問許可權,域控解密PAC。獲取Client的sid,以及所在的組,再根據該服務的ACL,判斷Client是否有訪問服務的許可權。

PAC的全稱是Privilege Attribute Certificate(特權屬證書)。不同的賬號有不同的許可權,PAC就是為了區別不同許可權的一種方式。

TGT:認證票據(購票許可證)

TGS:票據發放服務

TGS tikcet:服務票據 後面簡稱ST(Service ticket,入場券)

0x09 什麼是NTLM?

在允許的環境下,Kerberos是首選的認證方式。在這之前,Windows主要採用另一種認證協議——NTLM(NT Lan Manager)。NTLM使用在Windows NT和Windows 2000 Server(or later)工作組環境中(Kerberos用在域模式下)。在AD域環境中,如果需要認證Windows NT系統,也必須採用NTLM。較之Kerberos,基於NTLM的認證過程要簡單很多。NTLM採用一種質詢/應答(Challenge/Response)訊息交換模式。

  1. 首先,使用者通過輸入Windows帳號和密碼登入客戶端主機。在登入之前,客戶端會快取輸入密碼的雜湊值,原始密碼會被丟棄(“原始密碼在任何情況下都不能被快取”,這是一條基本的安全準則)。成功登入客戶端Windows的使用者如果試圖訪問伺服器資源,需要向對方傳送一個請求。該請求中包含一個以明文表示的使用者名稱。

  2. 伺服器接收到請求後,生成一個16位的隨機數。這個隨機數被稱為Challenge或者Nonce。伺服器在將該Challenge傳送給客戶端之前,該Challenge會先被儲存起來。Challenge是以明文的形式傳送的。

  3. 客戶端在接收到伺服器發回的Challenge後,用在步驟一中儲存的密碼雜湊值對其加密,然後再將加密後的Challenge傳送給伺服器。

  4. 伺服器接收到客戶端傳送回來的加密後的Challenge後,會向DC(Domain)傳送針對客戶端的驗證請求。該請求主要包含以下三方面的內容:客戶端使用者名稱;客戶端密碼雜湊值加密的Challenge和原始的Challenge。

  5. DC根據使用者名稱獲取該帳號的密碼雜湊值,對原始的Challenge進行加密。如果加密後的Challenge和伺服器傳送的一致,則意味著使用者擁有正確的密碼,驗證通過,否則驗證失敗。DC將驗證結果發給伺服器,並最終反饋給客戶端。

NTLM(New Technologies Lan Manager)HASH,通常是指SAM檔案或ntds.dit檔案中儲存的HASH,生成流程是 :16進位制編碼 ==> unicode編碼 ==> MD4加密。

NET-NTLM HASH 是在上面的NTLM認證過程中,從伺服器端返回的一個hash值,裡面儲存了使用者名稱、ip、加密演算法,密碼hash等。

對NTLM Hash可以通過這些方式獲取:

  1. 匯出SAM檔案,配合SYSKEY利用mimikatz等工具獲得
  2. 改登錄檔用minikatz讀取lsass.exe程序獲取(2012 r2和8.1及以上版本都禁止明文快取到記憶體,而mimikatz是基於記憶體獲取明文密碼)
  3. NTLM雜湊傳遞
  4. 對NET-NTLM HASH 可通過使用Responder和Inveigh等工具進行中間人攻擊,偽造伺服器端簡歷SMB連接獲取。

0x10 什麼是SMB?

SMB是一種協議,它執行在其他幾種協議之上,通過SMB可以共享訪問伺服器上的各種資源和檔案。如果是使用NetBIOS協議就是139埠,如果是使用的TCP協議就是445埠,現在使用445更多。

0x11 什麼是IPC?

IPC(Inter-Process Communication 程序間通訊),用於程序之間的通訊。

在NT/2000以後開始使用IPC$(Internet Process Connection),它是為了讓程序間通訊而開放的命名管道,通過驗證賬號和密碼,連線雙方可以建立安全的通道並以此通道進行加密資料的交換,從而實現在遠端管理和檢視計算機的共享資源。

IPC$(Internet Process Connection)可以被理解為一種“專用管道”,可以在連線雙方建立一條安全的通道,實現對遠端計算機的訪問。Windows NT/2000/XP提供了IPC$功能的同時,在初次安裝系統時還打開了預設共享,即所有的邏輯共享(C$,D$,E$……)和系統目錄(ADMIN$)共享。所有這些共享的目的,都是為了方便管理員的管理,但在有意無意中,導致了系統安全性的隱患,我們在cmd命令列中輸入 net share 就能檢視共享。

我們常說的IPC$漏洞就是IPC的空連線,但是它原本的危害就很小,只能訪問 everyone 許可權的共享,訪問小部分登錄檔等。而且在2000及之後的版本,更是設定了許可權和禁用空連線。

IPC$是基於SMB和NetBIOS,所以使用的埠也是139/445,實際訪問哪個埠由是否允許NetBIOS決定。

建立空會話:net use \\ip\ipc$ "" /user:"" (注:前邊引號“”內為空密碼,後邊user:""引號中為空使用者名稱)

刪除IPC$連線:net use \\192.168.1.101\ipc$ /del

已建立連線後:

檢視遠端主機的共享資源:net view \\ip

得到遠端主機的 NetBIOS 使用者名稱列表(需要開啟自己的 NBT ):nbtstat -A ip

將目標C盤對映到本地Z盤:net use z: \\192.168.1.101\c$

注意:不管我們是否建立IPC$成功,都會在日誌中留下記錄。

0x12 什麼是NetBIOS?

NetBIOS(NETwork Basic Input/Output System 網路基本輸入輸出系統)是一種協議,主要用於數十臺計算機的小型區域網,也是一種應用程式程式設計介面(API),被區域網上的程式所使用。

在利用Windows NT4.0 構建的網路系統中,對每一臺主機的唯一標識資訊是它的NetBIOS名。系統可以利用WINS服務、廣播及Lmhost檔案等多種模式通過139埠將NetBIOS名解析為相應IP地址,從而實現資訊通訊。

0x13 什麼是WMI?

是Windows 2K/XP管理系統的核心;對於其他的Win32作業系統,WMI是一個有用的外掛。使用者可以使用 WMI 管理本地和遠端計算機。它提供了一個訪問作業系統構成單元的公共介面。其預設開啟的是135埠,

0x14 什麼是Windows Access Token?

windows訪問令牌,包含了登陸會話的安全資訊(比如各種SID)。當用戶登陸時,系統建立一個訪問令牌,然後以該使用者身份執行的的所有程序都擁有該令牌的一個拷貝。該令牌唯一表示該使用者、使用者的組和使用者的特權。有兩種令牌:主令牌和模擬的令牌。主令牌是與程序相關的;模擬的令牌是與模擬令牌的執行緒相關的。關於利用Windows Access Token攻擊的視訊,今天漏洞銀行剛發了一個。

0x15 什麼是SID?

SID是安全識別符號,是標識使用者、組和計算機帳戶的唯一的號碼。在第一次建立該帳戶時,將給網路上的每一個帳戶釋出一個唯一的 SID。它用來跟蹤每個賬戶,而且永遠不會更改,即使我們更改了管理員的名字它也不會變。

0x16 虛擬安全域

虛擬安全域是指,把相同安全等級、相同安全需求的計算機,歸入一個邏輯組內,對這個組配置訪問控制策略。可在複雜的網路中進行簡單方便的安全管理。通常安全域之間通過防火牆進行危險隔離,常見的劃分如下。


DMZ區裡是一些需要被外網訪問到的伺服器(比如Web伺服器,郵件伺服器等),而我們內網中的檔案伺服器和資料庫伺服器又是不想被外網訪問到的,如果把它們都放在一個區域,制定相同的策略,會有很大的風險,所以用防火牆裝置把它們分割開。內網部分又可以分為辦公區和核心區,只有運維人員和IT主管能進入核心區。

0x17 什麼是堡壘機?

堡壘機是一種針對 內部運維人員 的運維安全審計系統。它的主要的功能是就是限制登入入口,集中許可權賬號管理,對不合法命令進行命令阻斷,記錄運維人員的操作,出事了追責。它和防火牆直觀上的區別就是,防火牆是用於外網和DMZ,DMZ和內網之間的,堡壘機是用於運維人員和內網之間的。

0x18 域中計算機的分類

域類的計算機分為域控制器、成員伺服器、獨立伺服器和客戶機四種。

域控制器:在第四點已經說了;
成員伺服器:加入了域,但是沒有安裝AD,例如Web伺服器、郵件伺服器、防火牆這些;
獨立伺服器:既沒有加入域也沒有安裝AD,可有可無。
客戶機:使用資源的機器。

0x19 域內許可權

域相關內建組分為域本地組、全域性組、通用組。組的概念在上面說過了。

域本地組:域本地組的成員可以來自森林中的任何域,用來規定訪問同一個域內的資源許可權,儲存在DC中,不可巢狀在其他組下;

全域性組:全域性組的成員來自自己的域(必須同一個域),用來訪問任意域中的資源,儲存在DC中,可巢狀在其他組中;

通用組:通用組成員來自森林中的任何域,用來訪問任意域中的資源,儲存在GC(全域性編錄)中。

A-G-DL-P 策略:
先將A(Account使用者賬號)新增到G(Global Group全域性組)中,再將其新增到DL(Domain Local Group域本地組)中,最後授予P(Permission 資源許可許可權)。

一些重要的域本地組:
管理員組(Administratos):權力值max;

遠端登入組(Remote Desktop Users):具有遠端登入許可權;

印表機操作員組(Print Operators):管印表機,並且可以在登入登入和關閉域控;

賬號操作員組(Account Operators):建立和管理域內的使用者和組,可登入域控,預設沒有成員;

伺服器操作員組(Server Operators):管理域伺服器,可管理共享目錄、印表機、備份、關閉域控等,預設沒有成員;

備份操作員組(Backup Operators):執行備份和還原操作,可登入域控和關閉域控,預設沒有成員。

一些重要的全域性組、通用組:
域管理員組(Domain Admins):該組成員預設會被新增到每臺域成員計算機的管理員組,所以也繼承了管理員組的許可權;

企業系統管理員組(Enterprise Admins):是域森林根域中的一個組,該組成員在域森林的每個域內都是管理員組成員;

架構管理員組(Schema Admins):是域森林根域中的一個組,可以修改AD和域森林的模式;

域使用者組(Domain Users):所有域成員所在的組。


域滲透基本概念詳解