本文主要探討在工作組和域橫向移動中,由於默認remote UAC啟用對橫向移動造成的影響以及一些解決辦法。主要分為了工作組橫向和域橫向兩個板塊。
1.工作組橫向
workgroup相關環境如下
主機A: | |
---|---|
ip地址 | 192.168.178.169 |
操作系統版本 | windows 10 |
主機名 | DESKTOP-CBBH65I |
主機B: | |
---|---|
ip地址 | 192.168.178.225 |
操作系統版本 | windows server 2008 |
工作組橫向比較常見,用以下一個攻擊場景為例:
滲透測試人員在B主機上,獲取到了A服務器一個名為dev的管理員賬戶密碼(或hash),那在B服務器上應當怎么登陸A服務器進行遠程管理?(排除RDP)
常見的有sc類(psexec,scshell)、wmi類(wmiexec.wmic)、smb類(smbexec,ipc,smbclient)、winrm類等工具可以進行橫向移動
但是,在windows Vista之后引入了一種默認開啟的remote UAC,計算機的任何非SID 500本地管理員帳戶, 用戶在遠程計算機上沒有特權提升能力,並且用戶無法執行管理任務。
下圖是當remote UAC啟用時,對以上部分工具的測試:
Schtasks:
Psexec:
Wmiexec:
IPC:
Reg:
Scshell:
默認情況下,這些工具都無法正常工作。根據官方文檔中的方法,我們可以使用如下命令,修改A主機的注冊表鍵值:LocalAccountTokenFilterPolicy 為1,即在主機A執行以下命令:
reg.exe ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v LocalAccountTokenFilterPolicy /t REG_DWORD /d 1 /f
然后即可在主機B使用dev賬戶憑據進行遠程管理,其他師傅已經寫了不少這類文章,這里不再贅述,提一種比較新的方法:
通過ChangeServiceConfigA接口來無文件橫向移動。這種方法依賴於DCERPC,優點在於無文件,不會注冊創建服務也不通過smb認證。
項目地址:https://github.com/Mr-Un1k0d3r/SCShell
作者原文中采用了XblAuthManager這個xbox服務進行測試,我們可以用例如 vss(卷影拷貝服務) 這樣更加通用的服務來進行遠程命令執行,效果如下圖:
以上方法都依賴於LocalAccountTokenFilterPolicy值為1,那么在LocalAccountTokenFilterPolicy值為0的時,有沒有可能進行遠程管理呢?
1.當管理員對C:\usser內任意文件進行共享后,即使關閉了文件共享,也會默認將Users目錄進行共享。
我們可以使用dev用戶的憑據建立ipc連接然后查看共享資源
隨后,我們對啟動項等目錄復制文件,達到進一步控制的效果。當然這種方法需要目標主機曾經共享過C:\users下的文件且需要主機dev用戶重啟觸發payload(可能還需要繞過uac)。
2.winrm
如下圖,我在主機A上對winrm進行快速設置時候,會將LocalAccountTokenFilterPolicy設置為1
此時意味着之前sc類(psexec,scshell)、wmi類(wmiexec.wmic)、smb類(smbexec,ipc,smbclient)等遠程訪問工具都可用,z=這里就不再詳細測試了,winrm只需要在B主機上添加信任A主機即可,直接連接會被拒絕。當然,在本機添加信任對我們來說很簡單。
如下圖,我在主機B上添加了信任所有主機。
然后在主機B上通過ps remoting進程遠程管理主機A
總結:
從以上結果可以看出,在工作組環境中,由於默認LocalAccountTokenFilterPolicy=1,極大地限制了橫向移動。但是由於一些windows自身或者其他程序的配置,將LocalAccountTokenFilterPolicy設置為0,又為pth等橫向手法提供了更多可能。
2.域橫向
testdomain.local相關環境如下
主機A: | |
---|---|
ip地址 | 192.168.124.134 |
操作系統版本 | windows server 2012 |
主機名 | DC1 |
域管理員 | administrator、admin |
主機B: | |
---|---|
ip地址 | 192.168.124.135 |
操作系統版本 | windows server 2008 |
主機名 | SQL01 |
本地管理員用戶 | administrator、dev |
在域環境中,remote UAC只是對本地用戶進行限制,並沒有對域用戶進行限制,所以當獲取到域管理員的密碼(或hash),我們可以使用sc類(psexec,scshell)、wmi類(wmiexec.wmic)、smb類(smbexec,ipc,smbclient)、winrm類等工具進行遠程連接,如下圖所示,在SQL01上運行mimikatz,使用域管理員admin賬號,可以進行進行pth:
同樣地,由於remote UAC存在,即使域內互相信任的主機使用非sid500的本地管理員憑據也無法登陸。即在DC1上使用SQL01上的管理員用戶dev憑據登錄SQL01,也無法成功。
值得一提的是,由於多數域環境中,為了方便管理,采用域策略使域內所有電腦默認啟用了winrm服務,這為內網橫向提供了便利。如果主機沒有開啟winrm服務,遠程啟用winrm也比較簡單,以psexec為例,只需要如下命令即可:
psexec \ComputerName -s winrm.cmd quickconfig -q
我們都知道,psexec、wmiexec等工具可以使用哈希傳遞而不使用明文,那winrm能否使用pth呢?答案是可行的。方法有很多,以CobaltStrike為例,我們可以通過pth然后啟動進程然后steal_token,使用winrm執行命令,效果如下圖:
總結:由於域用戶不受LocalAccountTokenFilterPolicy限制,所以當獲取到高權限域用戶憑據時,可以比較方便地進行橫向。