域滲透基本概念
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 安全賬戶管理器)。SAM是用來存儲Windows操作系統密碼的數據庫文件,為了避免明文密碼泄漏,SAM文件中保存的是明文密碼經過一系列算法處理過的Hash值,被保存的Hash分為LM Hash、NTLMHash。在用戶在本地或遠程登陸系統時,會將Hash值與SAM文件中保存的Hash值進行對比。在后期的Windows系統中,SAM文件中被保存的密碼Hash都被密鑰SYSKEY加密。它存在c:/windows/system32/config/SAM
,類似於linux里的/etc/shadow文件。我們可以通過刪除/替換 SAM文件,通過PE 免密登錄一些老版本系統的管理員賬號。
獲取Hash方法:
- 使用mimikatz等工具讀取lsass.exe進程,獲取Hash
- net-NTLM Hash可以使用Responder或Inveigh等工具獲取
破解Hash:
- LM Hash
- john –format=lm hash.txt
- hashcat -m 3000 -a 3 hash.txt
- NTLM Hash
- john –format=nt hash.txt
- hashcat -m 1000 -a 3 hash.txt
- Net-NTLMv1
- john –format=netntlm hash.txt
- hashcat -m 5500 -a 3 hash.txt
- Net-NTLMv2
- john –format=netntlmv2 hash.txt
- hashcat -m 5600 -a 3 hash.txt
0x08 什么是Kerberos協議?
kerberos 是一種由MIT(麻省理工大學)提出的一種網絡身份驗證協議,它旨在通過使用加密技術為客戶端/服務端應用程序提供強大的認證服務。
kerberos協議中主要由三個角色:
(1)訪問服務的client(一下表述為Client或者用戶)
(2)提供服務的server(一下表述為服務)
(3)KDC(Key Distribution Center)密鑰分發中心
其中KDC服務默認會安裝在一個域的域控中,而Client和Server為域內的用戶或者是服務,如HTTP服務,SQL服務,遠程桌面服務。在kerberos中Client是否有權限訪問Server端的服務有KDC發放的票據決定。
協議過程:
-
AS_REQ:Client向KDC發起AS_REQ請求內容為:明文形式的用戶名、通過Client密碼Hash 后加密的時間戳、ClientID、網絡地址、加密類型等內容。
-
AS_REP:當KDC接收到請求之后,通過AD獲取該用戶的信息。通過獲取的密碼信息生成一個秘鑰對Authenticator進行解密。如果解密后的內容和已知的內容一致,則證明請求着提供的密碼正確,即確定了登錄者的真實身份。AS成功認證對方的身份之后,會先生成一個用於確保該用戶和KDC之間通信安全的會話秘鑰——Logon Session Key,並采用該用戶密碼派生的秘鑰進行加密。KAS接着為該用戶創建“認購權證”——TGT。TGT主要包含兩方面的內容:用戶相關信息和Logon Session Key,而整個TGT則通過KDC自己的密鑰進行加密。最終,被不同密鑰加密的Logon Session Key和TGT返回給客戶端。
-
TGS_REQ:Client憑借TGT票據向KDC發起針對特定服務的TGS_REQ請求,該請求主要包含如下的內容:客戶端用戶名、通過Logon Session Key加密的Authenticator、TGT和訪問的服務器(其實是服務)名。
-
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回復給客戶端。
-
AP_REQ:Client拿着TGS票據去請求服務,但是,服務端在接收到ST之后,如何確保它是通過TGS購買,而不是自己偽造的呢?這很好辦,不要忘了ST是通過自己密碼派生的秘鑰進行加密的。具體的操作過程是這樣的,除了ST之外,服務請求還附加一份通過Service Session Key加密的Authenticator。
-
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)消息交換模式。
-
首先,用戶通過輸入Windows帳號和密碼登錄客戶端主機。在登錄之前,客戶端會緩存輸入密碼的哈希值,原始密碼會被丟棄(“原始密碼在任何情況下都不能被緩存”,這是一條基本的安全准則)。成功登錄客戶端Windows的用戶如果試圖訪問服務器資源,需要向對方發送一個請求。該請求中包含一個以明文表示的用戶名。
-
服務器接收到請求后,生成一個16位的隨機數。這個隨機數被稱為Challenge或者Nonce。服務器在將該Challenge發送給客戶端之前,該Challenge會先被保存起來。Challenge是以明文的形式發送的。
-
客戶端在接收到服務器發回的Challenge后,用在步驟一中保存的密碼哈希值對其加密,然后再將加密后的Challenge發送給服務器。
-
服務器接收到客戶端發送回來的加密后的Challenge后,會向DC(Domain)發送針對客戶端的驗證請求。該請求主要包含以下三方面的內容:客戶端用戶名;客戶端密碼哈希值加密的Challenge和原始的Challenge。
-
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可以通過這些方式獲取:
- 導出SAM文件,配合SYSKEY利用mimikatz等工具獲得
- 改注冊表用minikatz讀取lsass.exe進程獲取(2012 r2和8.1及以上版本都禁止明文緩存到內存,而mimikatz是基於內存獲取明文密碼)
- NTLM哈希傳遞
- 對NET-NTLM HASH 可通過使用Responder和Inveigh等工具進行中間人攻擊,偽造服務器端簡歷SMB連接獲取。
0x10 什么是SMB?
SMB(Server Message Block)被稱為服務器消息塊,又叫網絡文件共享系統(CIFS)。在Windows2000中,SMB除了基於NBT實現,還可以直接通過445端口實現。主要作用是使網絡上的機器能夠共享計算機文件、打印機、串行端口和通訊等資源。
CIFS消息一般使用NetBIOS或TCP協議發送,分別使用不同的端口139或445,當前傾向於使用445端口。
- 直接運行在 TCP 上 port 445
- 通過使用 NetBIOS API
- 基於 UDP ports 137, 138 & TCP ports 137, 139
- 基於一些傳統協議,例如 NBF
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(網絡基本輸入輸出系統),嚴格講不屬於網絡協議,NETBIOS是應用程序接口(API),早期使用NetBIOS Frames(NBF)協議進行運作,是一種非路由網絡協議,位於傳輸層;后期NetBIOS over TCP/IP(縮寫為NBT、NetBT)出現,使之可以連接到TCP/IP,是一種網絡協議,位於會話層。基於NETBIOS協議廣播獲得計算機名稱——解析為相應IP地址,WindowsNT以后的所有操作系統上均可用,不支持IPV6
NETBIOS提供三種服務
- NetBIOS-NS(名稱服務):為了啟動會話和分發數據報,程序需要使用Name Server注冊NETBIOS名稱,可以告訴其他應用程序提供什么服務,默認監聽UDP137端口,也可以使用TCP 137端口。
- Datagram distribution service(數據報分發服務):無連接,負責錯誤檢測和恢復,默認在UDP 138端口。
- Session Server(會話服務):允許兩台計算機建立連接,默認在TCP 139端口。
利用NETBIOS發現主機
nbtstat(Windows自帶命令)
獲取目標主機MAC地址
nbtstat -A 192.168.100.200
nbtscan
掃描指定網段的主機名和網絡開放共享
nbtscan.exe 192.168.100.1/24
0x13 什么是WMI?
WMI(Windows管理規范)是Windows 2K/XP管理系統的核心;對於其他的Win32操作系統,WMI是一個有用的插件。用戶可以使用 WMI 管理本地和遠程計算機。它提供了一個訪問操作系統構成單元的公共接口。其默認打開的是135端口。
WMI由一系列對Windows Driver Model的擴展組成,它通過儀器組件提供信息和通知,提供了一個操作系統的接口。在滲透測試過程中,攻擊者往往使用腳本通過WMI接口完成對Windows操作系統的操作,遠程WMI連接通過DCOM進行。例如:WMIC、Invoke-WmiCommand、Invoke-WMIMethod等。另一種方法是使用Windows遠程管理(WinRM)。
0x14 什么是Windows Access Token?
windows訪問令牌,包含了登陸會話的安全信息(比如各種SID)。當用戶登陸時,系統創建一個訪問令牌,然后以該用戶身份運行的的所有進程都擁有該令牌的一個拷貝。該令牌唯一表示該用戶、用戶的組和用戶的特權。有兩種令牌:主令牌和模擬的令牌。主令牌是與進程相關的;模擬的令牌是與模擬令牌的線程相關的。當用戶注銷后,系統將會使主令牌切換為模擬令牌,不會將令牌清 除,只有在重啟機器后才會清除 。
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):所有域成員所在的組。