• Welcome to the world's largest Chinese hacker forum

    Welcome to the world's largest Chinese hacker forum, our forum registration is open! You can now register for technical communication with us, this is a free and open to the world of the BBS, we founded the purpose for the study of network security, please don't release business of black/grey, or on the BBS posts, to seek help hacker if violations, we will permanently frozen your IP and account, thank you for your cooperation. Hacker attack and defense cracking or network Security

    business please click here: Creation Security  From CNHACKTEAM

活动目录信息的获取


This Wind

Recommended Posts

0x00 前言

在域渗透中,活动目录信息的获取必不可少。

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

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服务。

0x03 域外获取活动目录信息的方法

1.Kali系统通过ldapsearch进行数据查询

测试环境如下图:

渗透基础——活动目录信息的获取

前提:我们能够访问到域控制器(DC)的389端口,并且我们至少已经获得了域内一个普通用户的口令。

这个测试环境中,我们获得了域内普通用户testa的口令为DomainUser123!

连接命令如下:

[rihide]
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"
[/rihide]

参数说明:

· -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进行数据查询

测试环境如下图:

渗透基础——活动目录信息的获取

前提:我们能够访问到域控制器(DC)的389端口,并且我们至少已经获得了域内一个普通用户的口令。

这个测试环境中,我们获得了域内普通用户testa的口令为DomainUser123!

PowerView的地址:

https://github.com/PowerShellMafia/PowerSploit/blob/master/Recon/PowerView.ps1

(1)查询所有域用户

这里需要使用凭据信息,所以完整的命令如下:

$uname="testa"                                                      
$pwd=ConvertTo-SecureString "DomainUser123!" -AsPlainText –Force                   
$cred=New-Object System.Management.Automation.PSCredential($uname,$pwd)        
Get-NetUser -Domain test.com -DomainController 192.168.1.1 -ADSpath "LDAP://DC=test,DC=com" -Credential $cred

为了便于统计名称,可以选择只列出name项,完整命令如下:

$uname="testa"                                                      
$pwd=ConvertTo-SecureString "DomainUser123!" -AsPlainText –Force                   
$cred=New-Object System.Management.Automation.PSCredential($uname,$pwd)        
Get-NetUser -Domain test.com -DomainController 192.168.1.1 -ADSpath "LDAP://DC=test,DC=com" -Credential $cred | fl name

结果输出如下图:

渗透基础——活动目录信息的获取

(2)查询所有计算机

$uname="testa"                                                      
$pwd=ConvertTo-SecureString "DomainUser123!" -AsPlainText –Force                   
$cred=New-Object System.Management.Automation.PSCredential($uname,$pwd)        
Get-NetComputer -Domain test.com -DomainController 192.168.1.1 -ADSpath "LDAP://DC=test,DC=com" -Credential $cred | fl name

结果输出如下图:

渗透基础——活动目录信息的获取

(3)查询所有组

$uname="testa"                                                      
$pwd=ConvertTo-SecureString "DomainUser123!" -AsPlainText –Force                   
$cred=New-Object System.Management.Automation.PSCredential($uname,$pwd)        
Get-NetGroup -Domain test.com -DomainController 192.168.1.1 -ADSpath "LDAP://DC=test,DC=com" -Credential $cred | fl name

结果输出如下图:

渗透基础——活动目录信息的获取

0x04 域内获取活动目录信息的方法

前提是已经获得了域内一台主机的权限。

测试环境如下图:

渗透基础——活动目录信息的获取

原理:通过ADSI(ActiveDirectoryServicesInterface)(活动目录服务接口)进行LDAP查询,获得结果。

1.使用Powershell实现

参照PowerView,地址:

https://github.com/PowerShellMafia/PowerSploit/blob/master/Recon/PowerView.ps1

2.使用C#实现

参照SharpView,地址:

https://github.com/tevora-threat/SharpView

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

结果输出如下图:

渗透基础——活动目录信息的获取

0x05 小结

本文以获取活动目录中所有用户、所有计算机和所有组为例,分别介绍了从域外和域内获取信息的方法。

Link to comment
Share on other sites

  • 1 month later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now