---
title: "Force-Set SPN: GenericWrite ile Hedefli Kerberoasting"
description: "Kerberoasting normalde bir servis hesabının zaten SPN sahibi olmasını bekler. Bir kullanıcı üzerinde GenericWrite hakkın varsa SPN'i kendin ekleyebilir ve o hesabı istediğin anda Kerberoast edebilirsin — böylece yazabildiğin zayıf parolalı her kullanıcı kırılabilir bir hedefe dönüşür."
date: 2026-11-04
author: Sevban Dönmez (@jankesec)
canonical: https://jankesec.com/tr/yazilar/force-set-spn/
---

## Kerberoasting, ama hedefi sen seçersin

Sıradan Kerberoasting yalnızca *zaten* bir Service Principal Name taşıyan hesaplarda çalışır — dünyanın `sql_svc` ve `jon.snow` gibi hesapları. Elinde Kerberoast edilecek bir servis hesabı yoksa ya da SPN taşıyan hesapların hepsinin kırılamaz parolaları varsa, beklemekten başka yapacak bir şey yoktur.

Bir kullanıcı üzerinde yazma hakkın varsa durum değişir. `GenericWrite` (veya `GenericAll`) bir hedefin özniteliklerini düzenlemeni sağlar; `servicePrincipalName` de yalnızca bir özniteliktir. Bir kullanıcıya SPN eklediğinde o hesap aniden Kerberoast edilebilir hale gelir — TGS'si hesabın parola hash'iyle şifrelenir ve sen bunu çevrimdışı kırarsın. Artık zayıf bir servis hesabının ortaya çıkmasını beklemiyorsun; hangi zayıf parolalı kullanıcıyı roast edeceğini kendin *seçiyorsun*. Bu, saldırıyı pasif bir fırsat avından aktif, hedefli bir işleme dönüştürür.

Geriye tek soru kalır: hangi kullanıcıya yazabildiğin. `essos.local` ortamında `missandei`, `viserys.targaryen` üzerinde `GenericWrite` hakkına sahiptir — [Bölüm 4](/tr/yazilar/owning-essos-forest-trust/)'te izlediğimiz kenarın aynısı. Bu tür bir yazma hakkı, çoğu zaman zararsız bir yönetim izni gibi görünür; oysa doğru öznitelikle birleştiğinde doğrudan hesap devralmaya dönüşebilir.

## SPN'i yazmak

`bloodyAD`, özniteliği LDAP üzerinden tek seferde yazar:

```bash
$ bloodyAD -u missandei -p fr3edom -d essos.local --host 192.168.56.12 \
    set object "viserys.targaryen" servicePrincipalName -v "HTTP/fakesvc.essos.local"
[+] viserys.targaryen’s servicePrincipalName has been updated
```

`viserys.targaryen` artık bir SPN taşıyor. Bu tek yazma işlemi ön koşulun tamamıdır — gerisi sıradan Kerberoasting'den ibarettir. SPN'in gerçek bir servise işaret etmesi gerekmez; KDC yalnızca özniteliğin var olmasına bakar ve bilet isteğini o hesabın anahtarıyla şifreleyerek yanıtlar. Bu yüzden sahte bir SPN, gerçek bir servis kadar işe yarar.

## Az önce yarattığın hedefi roast etmek

TGS'yi iste ve kır:

```bash
$ nxc ldap 192.168.56.12 -u missandei -p fr3edom --kerberoast force_tgs.txt
LDAP  [+] essos.local\missandei:fr3edom
LDAP  $krb5tgs$23$*viserys.targaryen$ESSOS.LOCAL$...*$cc284a89c4f8a5864d90a1dc37a43145$...

$ hashcat -m 13100 force_tgs.txt /usr/share/wordlists/rockyou.txt --force
$krb5tgs$23$*viserys.targaryen$...:GoldCrown
```

Sonuç `GoldCrown`. Parola zayıf olduğu için zorla eklenen SPN, bir `GenericWrite` hakkını geçerli bir hesap ele geçirmeye dönüştürdü. Bunu daha önce kullandığımız shadow-credentials yolundan ayıran noktaya dikkat et: burada **AD CS de yok, PKINIT de yok**. Yöntem yalnızca hedefin parolası kırılabilir olduğunda işe yarar — ki hedefli bir Kerberoast tam olarak bu durum için tasarlanmıştır.

İki teknik birbirini tamamlar. Shadow credentials, parola gücüne *bakmaksızın* bir hesabı ele geçirir ama çalışan bir CA'ya dayanır. Zorla-SPN Kerberoasting ise CA olmadan çalışır, ancak güçlü bir parola karşısında tıkanır. İkisini birlikte düşündüğünde, bir `GenericWrite` kenarı seni nadiren saldırı yolu olmadan bırakır: hedefin parolası zayıfsa Kerberoast, değilse shadow credentials devreye girer.

<figure class="diagram">
<svg viewBox="0 0 760 220" xmlns="http://www.w3.org/2000/svg" role="img" aria-label="Force-set SPN: GenericWrite ile bir kullanıcıya sahte service principal name yazılır, kullanıcı TGS isteğiyle Kerberoast edilir ve bilet parolayı kurtarmak için çevrimdışı kırılır.">
<defs><marker id="fs1" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="7" markerHeight="7" orient="auto"><path d="M0,0 L8,4 L0,8 z" class="dg-arrow-crit" /></marker></defs>
<text x="0" y="16" class="dg-muted">FORCE-SET SPN · HEDEFLİ KERBEROASTING</text>
<rect x="0" y="40" width="220" height="120" rx="8" class="dg-box" />
<text x="14" y="66" class="dg-label">1 · GenericWrite</text>
<text x="14" y="88" class="dg-mono dg-compact">missandei → viserys</text>
<text x="14" y="108" class="dg-mono dg-compact">set servicePrincipalName</text>
<line x1="220" y1="100" x2="262" y2="100" class="dg-line-crit" marker-end="url(#fs1)" />
<rect x="266" y="40" width="230" height="120" rx="8" class="dg-box-accent" />
<text x="280" y="66" class="dg-label">2 · Kerberoast</text>
<text x="280" y="88" class="dg-mono dg-compact">TGS iste → hash</text>
<text x="280" y="108" class="dg-muted">kullanıcının parolasıyla şifreli</text>
<line x1="496" y1="100" x2="538" y2="100" class="dg-line-crit" marker-end="url(#fs1)" />
<rect x="542" y="40" width="218" height="120" rx="8" class="dg-box-danger" />
<text x="556" y="66" class="dg-label">3 · Çevrimdışı kır</text>
<text x="556" y="88" class="dg-mono dg-compact">hashcat -m 13100</text>
<text x="556" y="108" class="dg-crit">viserys : GoldCrown</text>
</svg>
<figcaption>Üç adım: yazılabilir bir kullanıcıya SPN yaz, yeni SPN'i Kerberoast et ve bileti kır — AD CS yok, parola sıfırlama yok, yalnızca zayıf bir parola ve bir yazma hakkı.</figcaption>
</figure>

## Tespit ve çözüm

**Tespit:** Yazma işlemi, `servicePrincipalName` üzerinde bir `5136` olayıdır — normal bir kullanıcının aniden SPN kazanması yüksek sesli bir sinyaldir; özellikle SPN değeri gerçek bir servis yerine bir yer tutucuysa (`HTTP/fakesvc...`). Roast'un kendisi ise her zamanki Kerberoasting ipucudur: yeni oluşturulan SPN'e karşı `RC4` (`etype 23`) için bir `4769` TGS isteği.

**Kontrol:** Sıradan kullanıcılar arasındaki `GenericWrite`/`GenericAll` ACE'lerini kaldır ([Bölüm 3](/tr/yazilar/sevenkingdoms-acl-chain/)'te yaptığımız budama gibi), `servicePrincipalName` üzerine yapılan `5136` yazmalarını izle ve zorla eklenen bir SPN'in hiçbir yere varmaması için güçlü parolaları zorunlu kıl. Bu üç önlem birlikte çalışır: ACE'yi kaldırmak saldırının ön koşulunu yok eder, izleme yazmayı yakalar, güçlü parola ise yazma gerçekleşse bile sonucu etkisiz kılar. Tutmaya değer bir temizlik alışkanlığı da şudur: engagement bittikten sonra eklediğin SPN'i sil; aksi halde geride kalıcı ve gereksiz bir saldırı yüzeyi bırakırsın.

## Özet

| Adım | Araç | Sonuç |
| --- | --- | --- |
| SPN'i yaz | `bloodyAD set object <user> servicePrincipalName` | hedef artık Kerberoast edilebilir |
| Roast et | `nxc ldap ... --kerberoast` | TGS hash |
| Kır | `hashcat -m 13100` | kullanıcının parolası |

## Kanıt ve sınırlar

Zorla yazılan `servicePrincipalName` değeri (`HTTP/fakesvc.essos.local`), TGS isteği ve çevrimdışı `hashcat` kırma işlemi, izole GOAD laboratuvarındaki `MEEREEN` (`192.168.56.12`) üzerinde `viserys.targaryen` hesabına karşı yürütülmüştür. Eklenen sentetik SPN, doğrulama tamamlandıktan sonra kaldırılmıştır; böylece laboratuvar temiz durumuna döndürülmüştür.

## Referanslar

- **Orange Cyberdefense, GOAD:** [orange-cyberdefense.github.io/GOAD](https://orange-cyberdefense.github.io/GOAD/)
- **The Hacker Recipes, Kerberoast:** [thehacker.recipes/ad/movement/kerberos/kerberoast](https://www.thehacker.recipes/ad/movement/kerberos/kerberoast)
- **HackTricks, Kerberoast:** [book.hacktricks.xyz](https://book.hacktricks.xyz/windows-hardening/active-directory-methodology/kerberoast)
- **MITRE ATT&CK, Kerberoasting (T1558.003):** [attack.mitre.org/techniques/T1558/003](https://attack.mitre.org/techniques/T1558/003/)
