taibeihacker
Moderator
1 目录服务简介
日常生活中使用的電話薄內記錄著親朋好友的姓名、電話與地址等數據,它就是telephone directory(電話目錄);計算機中的文件系統(file system)內記錄著文件的文件名、大小與日期等數據,它就是file directory(文件目錄)。如果這些目錄內的數據能夠由系統加以整理,用戶就能夠容易且迅速地查找到所需的數據,而directory service(目錄服務)提供的服務,就是要達到此目的。
目錄服務是一個特殊的非關係型數據庫,用來保存描述性的、基於屬性的詳細信息,支持過濾功能。 這種數據庫與我們常⻅的關係型數據庫(Mysql、SQL Server、Oracle等)的區別在於目錄服務以樹狀的層次結構來存儲數據,就好像Linux/Unix 系統中的文件目錄一樣。此外,目錄服務是一個專⻔為搜索和瀏覽而優化的數據庫,有著優異的讀性能,但寫性能差,並且沒有事務處理、回滾等複雜功能,不適於存儲修改頻繁的數據。
綜上所述,目錄服務更適用於存儲如組織架構之類的信息。
2 LDAP 简介
LDAP(Light Directory Access Portocol)是基於X.500 標準的輕量級目錄訪問協議。 LDAP 協議之前有一個X.500 DAP 協議規範,該協議十分複雜,是一個重量級的協議,後來對X.500 進行了簡化,誕生了LDAP 協議,與X.500 相比變得較為輕量,其實LDAP 協議依然複雜。LDAP 約定了Client 與Server 之間的信息交互格式、使用的端口號、認證方式等內容。而LDAP 協議的實現,有著眾多版本,例如微軟的Active Directory 是LDAP 在Windows 上的實現,AD 實現了LDAP 所需的樹形數據庫、具體如何解析請求數據並到數據庫查詢然後返回結果等功能。再例如OpenLDAP 是可以運行在Linux 上的LDAP 協議的開源實現。而我們平常說的LDAP Server,一般指的是安裝並配置了Active Directory、OpenLDAP 這些程序的服務器。
3 LDAP 的基本模型
每一個系統、協議都會有屬於自己的模型,LDAP 也不例外,在了解LDAP 的基本模型之前我們需要先了解幾個LDAP 的目錄樹概念:目錄樹:在一個目錄服務系統中,整個目錄信息集可以表示為一個目錄信息樹,樹中的每個節點是一個條目。
條目:每個條目就是一條記錄,每個條目有自己的唯一可區別的名稱(DN)。
對像類:objectClass,與某個實體類型對應的一組屬性,對像類是可以繼承的,這樣父類的必須屬
性也會被繼承下來。
屬性:描述條目的某個方面的信息,一個屬性由一個屬性類型和一個或多個屬性值組成,屬性有必須屬性和非必須屬性。
LDAP 目錄以樹狀的層次結構來存儲數據,最頂層即根部稱作「基準DN」,形如dc=geekby,dc=xyz 或者ou=geekby.xyz,前一種方式更為靈活也是Windows AD 中使用的方式。在根目錄的下面有很多的文件和目錄,為了把這些大量的數據從邏輯上分開,LDAP 像其它的目錄服務協議一樣使用OU(Organization Unit),可以用來表示公司內部機構,如部⻔等,也可以用來表示設備、人員等。同時OU 還可以有子OU,用來表示更為細緻的分類。 LDAP 中每一條記錄都有一個唯一的區別於其它記錄的名字DN(Distinguished Name),其處在「葉子」位置的部分稱作RDN;如dn:cn=tom,ou=animals,dc=geekby,dc=xyz 中tom 即為RDN;RDN 在一個OU 中必須是唯一的。
因為LDAP 數據是「樹」狀的,而且這棵樹是可以無限延伸的,假設你要樹上的一條記錄,如何尋找它的位置呢?當然首先要說明是哪一棵樹(dc),然後是從樹根到那個蘋果所經過的所有「分叉」(ou),最後就是這個蘋果的名字(cn)。知道了樹(dc=geekby,dc=xyz),分叉(ou=IT,ou=Worker,ou=Pentester),蘋果(cn=abc),就可以找到我們想要的蘋果了:
1
dn:cn=abc,ou=IT,ou=Worker,ou=Pentester,dc=geekby,dc=xyz
LDAP 的功能模型中定義了一系列利用LDAP 協議的操作。它包含了三個部分:
查詢操作(Interrogation Operations):容許查詢目錄和取得數據。它包含Search Operating 和Compare Operation。
更新操作(Update Operations):容許添加(ADD)、刪除(Delete)、重命名(Rename)和改變目錄(Modify)
認證和管理操作(Authentication And Control Operations)容許客戶端在目錄中識別自己,並且能夠控制一個Session 的性質。
4 LDAP 和 AD 的关系
Active Directory 是微軟基於LDAP 協議的一套解決方案(LDAP 服務器+ 應用), 而LDAP 是與AD 交互的協議之一。Active Directory 解決了細粒度的權限控制「誰」以「什麼權限」訪問「什麼」。 AD 在LDAP v3 規範之上還有自定義擴展,例如,帳戶鎖定,密碼到期等。
5 利用 LDAP 收集域信息
通常情況下,任何一名認證用戶都可以通過LDAP 來獲取大量有趣的域信息。因此,在信息收集階段,可以利用LDAP 查詢、整理域環境的相關信息。5.1 相关工具
adfind 可以在命令下獲取域的詳細信息,用法參考:http://www.joeware.net/freetools/tools/adfind/usage.htmADExplorer 是獨立的可執行軟件,無需安裝。 除了查詢域信息外,ADExplorer 還可以拍攝快照,可以快照保存在本地,並可以使用ADExplorer 打開進行操作。
ldapsearch
LDAPDomainDump 為python 開發,可以通過LDAP 收集和解析數據,並將其輸出為人類可讀的HTML 格式以及機器可讀的JSON 和CSV/TSV 格式。
1
2
3
4
5
domain_groups: 目標域的組列表
domain_users: 目標域的用戶列表
domain_computers: 目標域的計算機賬號列表
domain_policy: 域策略,例如是否需要密碼等
domain_trusts: 傳入和傳出域屬性以及是否受信任
5.2 获取域信息实例
環境:1
2
3
域控:192.168.66.26 (dc.company.com)
域用戶憑證:pentest\win7user:123456aB
使用工具Adfind.exe
下面列出了Adfind 的一些使用實例,主要是對工具參數進行介紹。我們可以根據需求修改命令,查詢我們所關注的任何信息。比如查詢已控憑證所屬的組、查詢特定組的成員、根據計算機名推測用戶可能有權限的計算機等。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#查詢域內所有用戶詳細信息
adfind -h 10.1.26.128 -u company\test -up Geekby -sc u:*
#查詢域內特定用戶詳細信息
adfind -h 10.1.26.128 -u company\test -up Geekby -sc u:test
#查詢域內特定用戶特定信息(mail)
adfind -h 10.1.26.128 -u company\test -up Geekby -sc u:test mail
#查詢域內所有用戶dn信息
adfind -h 10.1.26.128 -u company\test -up Geekby -sc u:* -dn
#查詢域內用戶數量
adfind -h 10.1.26.128 -u company\test -up Geekby -sc u:* -c
#查詢域內所有組詳細信息
adfind -h 10.1.26.128 -u company\test -up Geekby -sc g:*
#查詢域內組名內包含“Admin”的所有組詳細信息
adfind -h 10.1.26.128 -u company\test -up Geekby -sc g:*Admin* #查詢域內所有OU詳細信息
adfind -h 10.1.26.128 -u company\test -up Geekby -sc o:* #查詢域內所有計算機詳細信息
adfind -h 10.1.26.128 -u company\test -up Geekby -sc c:* #查詢域內所有站點詳細信息
adfind -h 10.1.26.128 -u company\test -up Geekby -sc site:* #查詢域內所有子網詳細信息
adfind -h 10.1.26.128 -u company\test -up Geekby -sc subnet:* #查詢域的信任關係
adfind -h 10.1.26.128 -u company\test -up Geekby -sc trustdmp #查詢域內spn的詳細信息
adfind -h 10.1.26.128 -u company\test -up Geekby -sc spn:*
#搜索禁用的用戶dn
adfind -h 10.1.26.128 -u company\test -up Geekby -b DC=company,DC=com -f userAccountControl:AND:=514 -dn