前言
這又是一個關于域內基礎概念與原理的系列
Active Directory 的查詢基礎語法
BaseDN
BaseDN 即基礎可分辨名稱,其指定了這棵樹的根,比如指定 BaseDN 為DC=whoamianony,DC=org就是以DC=whoamianony,DC=org為根往下搜索,類似于在檔案系統中指定了一個根目錄:

2021最新整理網路安全\滲透測驗/安全學習(全套視頻、大廠面經、精品手冊、必備工具包)一>戳我拿<一
若指定 BaseDN 為CN=Computers,DC=whoamianony,DC=org那么就是以CN=Computers,DC=whoamianony,DC=org為根往下搜索
過濾規則
LDAP 搜索過濾器語法有以下邏輯運算子:
| 運算子 | 說明 |
|---|---|
| & | AND 運算子 |
| OR 運算子 | |
| ! | NOT 運算子 |
| = | 用與名稱和值做相等比較 |
| * | 通配符 |
下面舉幾個例子
(uid=testuser):匹配 uid 屬性為 testuser 的所有物件
(uid=test*):匹配 uid 屬性以 test 開頭的所有物件
(!(uid=test*)):匹配 uid 屬性不以 test 開頭的所有物件
(&(department=1234)(city=Paris)):匹配 department 屬性為1234且city屬性為Paris的所有物件
(|(department=1234)(department=56*)):匹配 department 屬性的值剛好為1234或者以56開頭的所有物件,
一個需要注意的點就是運算子是放在前面的,跟我們之前常規思維的放在中間不一樣,
LDAP 查找中的按位搜索
在 LDAP 里面,有些屬性欄位是位欄位,這里以 userAccountControl 舉例,其記錄了用戶的 AD 賬號的很多屬性資訊,該欄位就是一個的位欄位,之所以說 userAccountControl 是一個位欄位,是因為它是由一個個位構成:
| 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 |
比如一個賬戶,他的 userAccountControl 屬性只有 LOCKOUT 和 NOT_DELEGATED 這兩個位有值,其他的位都沒有,那這個用戶的 userAccountControl 屬性的值就為 0x100000+0x0010,是個32 位 INT 型別,
現在,如果我要搜索域內所有設定了 NOT_DELEGATED 位的所有物件,那么像之前那樣簡單的 LDAP 搜索語法肯定是不行了,因為簡單的 LDAP 搜索語法只能對某個屬性進行過濾,還不能對屬性里面的某個具體的位進行過濾,這就引出了 LDAP 的按位搜索,
LDAP 的按位搜索的語法如下:
<屬性名稱>:<BitFilterRule-ID>:=<十進制比較值>
其中的<BitFilterRule-ID>指的是位過濾規則所對應的 ID,大致內容如下:
| 位過濾規則 | 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 |
比如我們查詢域內所有設定了 NOT_DELEGATED 位的所有物件,NOT_DELEGATED 對應的十進制比較值位 1048576,那么根據語法,我們便可以構造以下過濾語法:
(userAccountControl:1.2.840.113556.1.4.803:=1048576)
Active Directory 訪問查詢工具
ADSI 編輯器
ADSI Edit(AdsiEdit.msc)是一個 Microsoft Windows Server 工具,可用于通過 Active Directory 活動目錄服務介面(ADSI)查看和編輯原始 Active Directory 目錄服務屬性,ADSI Edit 適用于編輯 Active Directory 中的單個物件或少量物件,ADSI Edit 不具備搜索功能,因此,必須預先知道要編輯的物件及其在 Active Directory 中的位置,
在域控中(普通域成員主機沒有 ADSI 編輯器)執行 adsiedit.msc 打開 ADSI 編輯器,“操作” —> “連接” 即可:

LDP
LDP 是微軟自帶的一款域內資訊查詢工具,在域控中執行 ldp 即可打開 LDP,普通域成員主機默認是沒有LDP的,可以自行上傳 ldp.exe 工具上去,
打開 LDP 后,輸入域控的 IP 和 389 埠進行連接:

然后點擊 “連接” —> “系結”,輸入賬號密碼進行認證:


然后再點擊 “查看” —> “數”,輸入一個 BaseDN 基礎可分辨名稱,指定這棵樹的根,便可以用指定 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 會以DC=whoamianony,DC=org為根往下搜索:


如果想要查看某個條目的資訊,則 “右鍵” —> “搜索”,即可對指定的 BaseDN 進行過濾搜索:


Active Directory Explorer
Active Directory Explorer(AD Explorer)是微軟的一款域內資訊查詢工具,它是獨立的可執行檔案,無需安裝,它能夠列出域組織架構、用戶賬號、計算機賬號等,它可以幫助你尋找特權用戶和資料庫服務器等敏感目標,
我們可以使用 AD Explorer 工具連接域控來訪問活動目錄,它可以方便的幫助用戶進行瀏覽 Active Directory 資料庫、自定義快速入口、查看物件屬性、編輯權限、進行精確搜尋等操作,如下,在域內任意一臺主機上,以域用戶身份進行連接即可:


Adfind
AdFind一款 C++ 撰寫的域內查詢資訊的命令列工具,在域滲透里面的出場率極高,還有一個叫做 Admod ,可以修改,使用方法如下:
AdFind.exe [switches] [-b basedn] [-f filter] [attr list]
-b:指定指定一個 BaseDN 基礎可分辨名稱作為查詢的根節點
-f:LDAP 過濾條件
attr list:需要顯示的屬性
# 搜索 whoamianony.org 域下 objectcategory=computer 的所有物件,會顯示出所有物件以及物件的所有屬性
Adfind.exe -b dc=whoamianony,dc=org -f "objectcategory=computer"
# 搜索 whoamianony.org 域下 objectcategory=user 的所有物件,會顯示出所有物件以及物件的所有屬性
Adfind.exe -b dc=whoamianony,dc=org -f "objectcategory=user"

# 搜索 whoamianony.org 域下 objectcategory=computer 的所有物件,過濾出 name 和 operatingSystem 屬性
Adfind.exe -b dc=whoamianony,dc=org -f "objectcategory=computer" name operatingSystem
# 搜索 whoamianony.org 域下 objectcategory=user 的所有物件,過濾出 cn 和 createTimeStamp 屬性
Adfind.exe -b dc=whoamianony,dc=org -f "objectcategory=user" cn createTimeStamp</pre>


更多查詢命令:
Adfind.exe -f objectclass=trusteddomain # 信任關系
Adfind.exe -sc u:<username> # 查詢指定用戶
Adfind.exe -sc getacls -sddlfilter ;;;;; -recmute # 匯出整個域的 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 # 匯出域內所有的 GPO
Adfind.exe -b "dc=whoamianony,dc=org" -f "mobile=*" mobile mail displayName title -s Subtree -recmute -csv mobile # 匯出域內所有的手機號為 csv 格式
Adfind.exe -b "dc=whoamianony,dc=org" -f "mail=*" mail displayName title -s Subtree -recmute -csv mobile # 匯出域內所有的郵箱為 csv 格式
Adfind.exe -b "dc=whoamianony,dc=org" -f "&(servicePrincipalName=*)(admincount=1)" servicePrincipalName # 查詢域內高權限的 SPN 服務主體名稱
Adfind.exe -b "dc=whoamianony,dc=org" -f "useraccountcontrol:1.2.840.113556.1.4.803:=4194304" -dn # 查找域內所有開啟了 "Do not require Kerberos preauthentication" 選項的用戶
并且 Adfind 還給我們提供了一個快捷的按位查詢方式,可以直接用來代替那些復雜的 BitFilterRule-ID:
| 位過濾規則 | 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: |
如下實體:
Adfind.exe -b dc=whoamianony,dc=org -f "(userAccountControl:AND:=524288)" -bit -dn

LDAP 查找中的 objectClass 和 objectCategory
objectClass
在物件的 objectClass 屬性里面,可以看到這個物件是哪一個類的實體,以及這個類所繼承的所有父類,例如,域內主機CN=EWS,CN=Computers,DC=whoamianony,DC=org這個條目的objectClass屬性的值中包括 top、person、organizationalPerson、user 和 computer:

根據類的繼承關系可知,該物件是 computer 類的一個實體,而 computer 是 user 的子類,user 是 organizationalPerson 的子類,organizationalPerson 是 person 的子類,person 是 top 的子類,那么我們通過以下過濾語法都可以找到這個物件:
(objectClass=organizationalPerson)
由于所有的類都是 top 類的子類,所以當我們使用(objectClass=top)陳述句進行過濾時,域內所有的物件都可以搜索到
objectCategory
物件類的每個實體還具有一個 objectCategory 屬性,該屬性是一個單值屬性,并且建立了索引,其中包含的值為該實體物件的類或該類所繼承的父類之一的專有名稱,如下所示,

域內主機CN=EWS,CN=Computers,DC=whoamianony,DC=org這個條目的objectCategory屬性的值為CN=Computer,CN=Schema,CN=Configuration,DC=whoamianony,DC=org,如果我們想過濾所有 objectCategory 的屬性為CN=Computer,CN=Schema,CN=Configuration,DC=whoamianony,DC=org的物件,使用以下語法即可:
(objectCategory=CN=Computer,CN=Schema,CN=Configuration,DC=whoamianony,DC=org)

但是這樣的話需要記住完整的 DN,為了方便,物件所屬的類中還有一個 lDAPDisplayName 屬性,用于指定該類所顯示的名稱,我們可以看到,物件CN=EWS所屬的類存盤在CN=Computer,CN=Schema,CN=Configuration,DC=whoamianony,DC=org中,里面有一個 lDAPDisplayName 屬性的值正是 computer:

而且, LDAP 是支持直接使用類的 lDAPDisplayName 屬性作為條件進行搜索的,所以如果我們想要查找所有 objectCategory 的屬性為CN=Computer,CN=Schema,CN=Configuration,DC=whoamianony,DC=org的物件,可以直接用 lDAPDisplayName 屬性的值代替那一長串 DN:
(objectCategory=computer)

二者查詢效果相同,
2021最新整理網路安全\滲透測驗/安全學習(全套視頻、大廠面經、精品手冊、必備工具包)一>戳我拿<一
由于 objectCategory 建立索引,所以查詢時間比較快,在對 Active Directory 進行查詢時可以將二者結合使用以提高查詢效率,
Ending…
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/297771.html
標籤:其他
上一篇:house of pig詳解
