前言
這又是一個(gè)關(guān)于域內(nèi)基礎(chǔ)概念與原理的系列
Active Directory 的查詢基礎(chǔ)語法
BaseDN
BaseDN 即基礎(chǔ)可分辨名稱,其指定了這棵樹的根。比如指定 BaseDN 為DC=whoamianony,DC=org就是以DC=whoamianony,DC=org為根往下搜索,類似于在文件系統(tǒng)中指定了一個(gè)根目錄:
2021最新整理網(wǎng)絡(luò)安全滲透測試/安全學(xué)習(xí)(全套視頻、大廠面經(jīng)、精品手冊(cè)、必備工具包)一>關(guān)注我,私信回復(fù)"資料"獲取<一
若指定 BaseDN 為CN=Computers,DC=whoamianony,DC=org那么就是以CN=Computers,DC=whoamianony,DC=org為根往下搜索
過濾規(guī)則
LDAP 搜索過濾器語法有以下邏輯運(yùn)算符:
|
運(yùn)算符 |
說明 |
|
& |
AND 運(yùn)算符 |
|
|
OR 運(yùn)算符 |
|
! |
NOT 運(yùn)算符 |
|
= |
用與名稱和值做相等比較 |
|
* |
通配符 |
下面舉幾個(gè)例子
(uid=testuser):匹配 uid 屬性為 testuser 的所有對(duì)象
(uid=test*):匹配 uid 屬性以 test 開頭的所有對(duì)象
(!(uid=test*)):匹配 uid 屬性不以 test 開頭的所有對(duì)象
(&(department=1234)(city=Paris)):匹配 department 屬性為1234且city屬性為Paris的所有對(duì)象
(|(department=1234)(department=56*)):匹配 department 屬性的值剛好為1234或者以56開頭的所有對(duì)象。
一個(gè)需要注意的點(diǎn)就是運(yùn)算符是放在前面的,跟我們之前常規(guī)思維的放在中間不一樣。
LDAP 查找中的按位搜索
在 LDAP 里面,有些屬性字段是位字段,這里以 userAccountControl 舉例,其記錄了用戶的 AD 賬號(hào)的很多屬性信息,該字段就是一個(gè)的位字段。之所以說 userAccountControl 是一個(gè)位字段,是因?yàn)樗怯梢粋€(gè)個(gè)位構(gòu)成:
|
Property flag |
Value in hexadecimal |
Value in decimal |
|
SCRIPT |
0x0001 |
1 |
|
ACCOUNTDISABLE |
0x0002 |
2 |
|
HOMEDIR_REQUIRED |
0x0008 |
8 |
|
LOCKOUT |
0x0010 |
16 |
|
PASSWD_NOTREQD |
0x0020 |
32 |
|
PASSWD_CANT_CHANGE |
0x0040 |
64 |
|
ENCRYPTED_TEXT_PWD_ALLOWED |
0x0080 |
128 |
|
TEMP_DUPLICATE_ACCOUNT |
0x0100 |
256 |
|
NORMAL_ACCOUNT |
0x0200 |
512 |
|
INTERDOMAIN_TRUST_ACCOUNT |
0x0800 |
2048 |
|
WORKSTATION_TRUST_ACCOUNT |
0x1000 |
4096 |
|
SERVER_TRUST_ACCOUNT |
0x2000 |
8192 |
|
DONT_EXPIRE_PASSword |
0x10000 |
65536 |
|
MNS_LOGON_ACCOUNT |
0x20000 |
131072 |
|
SMARTCARD_REQUIRED |
0x40000 |
262144 |
|
TRUSTED_FOR_DELEGATION |
0x80000 |
524288 |
|
NOT_DELEGATED |
0x100000 |
1048576 |
|
USE_DES_KEY_ONLY |
0x200000 |
2097152 |
|
DONT_REQ_PREAUTH |
0x400000 |
4194304 |
|
PASSWORD_EXPIRED |
0x800000 |
8388608 |
|
TRUSTED_TO_AUTH_FOR_DELEGATION |
0x1000000 |
16777216 |
比如一個(gè)賬戶,他的 userAccountControl 屬性只有 LOCKOUT 和 NOT_DELEGATED 這兩個(gè)位有值,其他的位都沒有,那這個(gè)用戶的 userAccountControl 屬性的值就為 0x100000+0x0010,是個(gè)32 位 INT 類型。
現(xiàn)在,如果我要搜索域內(nèi)所有設(shè)置了 NOT_DELEGATED 位的所有對(duì)象,那么像之前那樣簡單的 LDAP 搜索語法肯定是不行了。因?yàn)楹唵蔚?LDAP 搜索語法只能對(duì)某個(gè)屬性進(jìn)行過濾,還不能對(duì)屬性里面的某個(gè)具體的位進(jìn)行過濾,這就引出了 LDAP 的按位搜索。
LDAP 的按位搜索的語法如下:
<屬性名稱>:<BitFilterRule-ID>:=<十進(jìn)制比較值>
其中的<BitFilterRule-ID>指的是位過濾規(guī)則所對(duì)應(yīng)的 ID,大致內(nèi)容如下:
|
位過濾規(guī)則 |
OID |
|
LDAP_MATCHING_RULE_BIT_AND |
1.2.840.113556.1.4.803 |
|
LDAP_MATCHING_RULE_OR |
1.2.840.113556.1.4.804 |
|
LDAP_MATCHING_RULE_TRANSITIVE_EVAL |
1.2.840.113556.1.4.1941 |
|
LDAP_MATCHING_RULE_DN_WITH_DATA |
1.2.840.113556.1.4.2253 |
比如我們查詢域內(nèi)所有設(shè)置了 NOT_DELEGATED 位的所有對(duì)象,NOT_DELEGATED 對(duì)應(yīng)的十進(jìn)制比較值位 1048576,那么根據(jù)語法,我們便可以構(gòu)造以下過濾語法:
(userAccountControl:1.2.840.113556.1.4.803:=1048576)
Active Directory 訪問查詢工具
ADSI 編輯器
ADSI Edit(AdsiEdit.msc)是一個(gè) Microsoft windows Server 工具,可用于通過 Active Directory 活動(dòng)目錄服務(wù)接口(ADSI)查看和編輯原始 Active Directory 目錄服務(wù)屬性。ADSI Edit 適用于編輯 Active Directory 中的單個(gè)對(duì)象或少量對(duì)象。ADSI Edit 不具備搜索功能。因此,必須預(yù)先知道要編輯的對(duì)象及其在 Active Directory 中的位置。
在域控中(普通域成員主機(jī)沒有 ADSI 編輯器)執(zhí)行 adsiedit.msc 打開 ADSI 編輯器,“操作” —> “連接” 即可:
LDP
LDP 是微軟自帶的一款域內(nèi)信息查詢工具,在域控中執(zhí)行 ldp 即可打開 LDP。普通域成員主機(jī)默認(rèn)是沒有LDP的,可以自行上傳 ldp.exe 工具上去。
打開 LDP 后,輸入域控的 IP 和 389 端口進(jìn)行連接:
然后點(diǎn)擊 “連接” —> “綁定”,輸入賬號(hào)密碼進(jìn)行認(rèn)證:
然后再點(diǎn)擊 “查看” —> “數(shù)”,輸入一個(gè) BaseDN 基礎(chǔ)可分辨名稱,指定這棵樹的根,便可以用指定 BaseDN 作為根根往下搜索了。這里的 BaseDN 可以參照如下:
DC=whoamianony,DC=org
CN=Users,DC=whoamianony,DC=org
CN=Builtin,DC=whoamianony,DC=org
CN=Computers,DC=whoamianony,DC=org
CN=Deleted Objects,DC=whoamianony,DC=org
OU=Domain Controllers,DC=whoamianony,DC=org
CN=ForeignSecurityPrincipals,DC=whoamianony,DC=org
......
比如這里我們輸入 BaseDN 為DC=whoamianony,DC=org,則 LDP 會(huì)以DC=whoamianony,DC=org為根往下搜索:
如果想要查看某個(gè)條目的信息,則 “右鍵” —> “搜索”,即可對(duì)指定的 BaseDN 進(jìn)行過濾搜索:
Active Directory Explorer
Active Directory Explorer(AD Explorer)是微軟的一款域內(nèi)信息查詢工具,它是獨(dú)立的可執(zhí)行文件,無需安裝。它能夠列出域組織架構(gòu)、用戶賬號(hào)、計(jì)算機(jī)賬號(hào)等,它可以幫助你尋找特權(quán)用戶和數(shù)據(jù)庫服務(wù)器等敏感目標(biāo)。
我們可以使用 AD Explorer 工具連接域控來訪問活動(dòng)目錄,它可以方便的幫助用戶進(jìn)行瀏覽 Active Directory 數(shù)據(jù)庫、自定義快速入口、查看對(duì)象屬性、編輯權(quán)限、進(jìn)行精確搜尋等操作。如下,在域內(nèi)任意一臺(tái)主機(jī)上,以域用戶身份進(jìn)行連接即可:
Adfind
AdFind一款 C++ 編寫的域內(nèi)查詢信息的命令行工具,在域滲透里面的出場率極高。還有一個(gè)叫做 Admod ,可以修改。使用方法如下:
AdFind.exe [switches] [-b basedn] [-f filter] [attr list]
-b:指定指定一個(gè) BaseDN 基礎(chǔ)可分辨名稱作為查詢的根節(jié)點(diǎn)
-f:LDAP 過濾條件
attr list:需要顯示的屬性
# 搜索 whoamianony.org 域下 objectcategory=computer 的所有對(duì)象,會(huì)顯示出所有對(duì)象以及對(duì)象的所有屬性
Adfind.exe -b dc=whoamianony,dc=org -f "objectcategory=computer"
# 搜索 whoamianony.org 域下 objectcategory=user 的所有對(duì)象,會(huì)顯示出所有對(duì)象以及對(duì)象的所有屬性
Adfind.exe -b dc=whoamianony,dc=org -f "objectcategory=user"
# 搜索 whoamianony.org 域下 objectcategory=computer 的所有對(duì)象,過濾出 name 和 operatingSystem 屬性
Adfind.exe -b dc=whoamianony,dc=org -f "objectcategory=computer" name operatingSystem
# 搜索 whoamianony.org 域下 objectcategory=user 的所有對(duì)象,過濾出 cn 和 createTimeStamp 屬性
Adfind.exe -b dc=whoamianony,dc=org -f "objectcategory=user" cn createTimeStamp</pre>
更多查詢命令:
Adfind.exe -f objectclass=trusteddomain # 信任關(guān)系
Adfind.exe -sc u:<username> # 查詢指定用戶
Adfind.exe -sc getacls -sddlfilter ;;;;; -recmute # 導(dǎo)出整個(gè)域的 ACL
Adfind.exe -sc u:<username> objectSid # 查詢指定用戶的 SID
Adfind.exe -f "(&(objectCategory=person)(objectClass=user))" # 查詢所有用戶
Adfind.exe -sc dclist # 查詢域控制器列表
Adfind.exe -schema -s base objectversion # 查詢域控制器版本
Adfind.exe -sc gpodmp # 導(dǎo)出域內(nèi)所有的 GPO
Adfind.exe -b "dc=whoamianony,dc=org" -f "mobile=*" mobile mail displayName title -s Subtree -recmute -csv mobile # 導(dǎo)出域內(nèi)所有的手機(jī)號(hào)為 csv 格式
Adfind.exe -b "dc=whoamianony,dc=org" -f "mail=*" mail displayName title -s Subtree -recmute -csv mobile # 導(dǎo)出域內(nèi)所有的郵箱為 csv 格式
Adfind.exe -b "dc=whoamianony,dc=org" -f "&(servicePrincipalName=*)(admincount=1)" servicePrincipalName # 查詢域內(nèi)高權(quán)限的 SPN 服務(wù)主體名稱
Adfind.exe -b "dc=whoamianony,dc=org" -f "useraccountcontrol:1.2.840.113556.1.4.803:=4194304" -dn # 查找域內(nèi)所有開啟了 "Do not require Kerberos preauthentication" 選項(xiàng)的用戶
并且 Adfind 還給我們提供了一個(gè)快捷的按位查詢方式,可以直接用來代替那些復(fù)雜的 BitFilterRule-ID:
|
位過濾規(guī)則 |
OID |
Adfind BitFilterRule |
|
LDAP_MATCHING_RULE_BIT_AND |
1.2.840.113556.1.4.803 |
:AND: |
|
LDAP_MATCHING_RULE_OR |
1.2.840.113556.1.4.804 |
:OR: |
|
LDAP_MATCHING_RULE_TRANSITIVE_EVAL |
1.2.840.113556.1.4.1941 |
:INCHAIN: |
|
LDAP_MATCHING_RULE_DN_WITH_DATA |
1.2.840.113556.1.4.2253 |
:DNWDATA: |
如下實(shí)例:
Adfind.exe -b dc=whoamianony,dc=org -f "(userAccountControl:AND:=524288)" -bit -dn
LDAP 查找中的 objectClass 和 objectCategory
objectClass
在對(duì)象的 objectClass 屬性里面,可以看到這個(gè)對(duì)象是哪一個(gè)類的實(shí)例,以及這個(gè)類所繼承的所有父類。例如,域內(nèi)主機(jī)CN=EWS,CN=Computers,DC=whoamianony,DC=org這個(gè)條目的objectClass屬性的值中包括 top、person、organizationalPerson、user 和 computer:
根據(jù)類的繼承關(guān)系可知,該對(duì)象是 computer 類的一個(gè)實(shí)例,而 computer 是 user 的子類,user 是 organizationalPerson 的子類,organizationalPerson 是 person 的子類,person 是 top 的子類。那么我們通過以下過濾語法都可以找到這個(gè)對(duì)象:
(objectClass=organizationalPerson)
由于所有的類都是 top 類的子類,所以當(dāng)我們使用(objectClass=top)語句進(jìn)行過濾時(shí),域內(nèi)所有的對(duì)象都可以搜索到
objectCategory
對(duì)象類的每個(gè)實(shí)例還具有一個(gè) objectCategory 屬性,該屬性是一個(gè)單值屬性。并且建立了索引。其中包含的值為該實(shí)例對(duì)象的類或該類所繼承的父類之一的專有名稱。如下所示,
域內(nèi)主機(jī)CN=EWS,CN=Computers,DC=whoamianony,DC=org這個(gè)條目的objectCategory屬性的值為CN=Computer,CN=Schema,CN=Configuration,DC=whoamianony,DC=org。如果我們想過濾所有 objectCategory 的屬性為CN=Computer,CN=Schema,CN=Configuration,DC=whoamianony,DC=org的對(duì)象,使用以下語法即可:
(objectCategory=CN=Computer,CN=Schema,CN=Configuration,DC=whoamianony,DC=org)
但是這樣的話需要記住完整的 DN,為了方便,對(duì)象所屬的類中還有一個(gè) lDAPDisplayName 屬性,用于指定該類所顯示的名稱。我們可以看到,對(duì)象CN=EWS所屬的類存儲(chǔ)在CN=Computer,CN=Schema,CN=Configuration,DC=whoamianony,DC=org中,里面有一個(gè) lDAPDisplayName 屬性的值正是 computer:
而且, LDAP 是支持直接使用類的 lDAPDisplayName 屬性作為條件進(jìn)行搜索的,所以如果我們想要查找所有 objectCategory 的屬性為CN=Computer,CN=Schema,CN=Configuration,DC=whoamianony,DC=org的對(duì)象,可以直接用 lDAPDisplayName 屬性的值代替那一長串 DN:
(objectCategory=computer)
二者查詢效果相同。
2021最新整理網(wǎng)絡(luò)安全滲透測試/安全學(xué)習(xí)(全套視頻、大廠面經(jīng)、精品手冊(cè)、必備工具包)一>關(guān)注我,私信回復(fù)"資料"獲取<一
由于 objectCategory 建立索引,所以查詢時(shí)間比較快,在對(duì) Active Directory 進(jìn)行查詢時(shí)可以將二者結(jié)合使用以提高查詢效率。






