Translated ['src/pentesting-web/hacking-with-cookies/README.md'] to tr

This commit is contained in:
Translator 2025-05-18 03:21:47 +00:00
parent da7ee1c925
commit 0d61ed9197

View File

@ -23,11 +23,11 @@ Bir çerezi alacak olan ana bilgisayarlar `Domain` özelliği ile belirtilir. Va
İki çerez aynı isme sahip olduğunda, gönderilmek üzere seçilen çerez:
- İstenen URL'deki en uzun yolu eşleşen çerez.
- Yollar aynıysa en son ayarlanan çerez.
- Eğer yollar aynıysa, en son ayarlanan çerez.
### SameSite
- `SameSite` özelliği, çerezlerin üçüncü taraf alanlardan gelen isteklerde gönderilip gönderilmeyeceğini belirler. Üç ayarı vardır:
- `SameSite` özelliği, çerezlerin üçüncü taraf alanlardan gelen isteklerde gönderilip gönderilmeyeceğini belirler. Üç ayar sunar:
- **Strict**: Çerezin üçüncü taraf isteklerinde gönderilmesini kısıtlar.
- **Lax**: Çerezin üçüncü taraf web siteleri tarafından başlatılan GET istekleri ile gönderilmesine izin verir.
- **None**: Çerezin herhangi bir üçüncü taraf alanından gönderilmesine izin verir.
@ -44,7 +44,7 @@ Bir çerezi alacak olan ana bilgisayarlar `Domain` özelliği ile belirtilir. Va
| AJAX | $.get("...") | NotSet\*, None |
| Resim | \<img src="..."> | NetSet\*, None |
Tablo [Invicti](https://www.netsparker.com/blog/web-security/same-site-cookie-attribute-prevent-cross-site-request-forgery/) kaynağından alınmış ve biraz değiştirilmiştir.\
Tablo [Invicti](https://www.netsparker.com/blog/web-security/same-site-cookie-attribute-prevent-cross-site-request-forgery/) kaynağından alınmış ve hafifçe değiştirilmiştir.\
_**SameSite**_ özelliğine sahip bir çerez, **CSRF saldırılarını azaltacaktır**.
**\*Chrome80 (şub/2019) itibarıyla, bir çerez için varsayılan davranış, çerez samesite** **özelliği yoksa lax olacaktır** ([https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/](https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/)).\
@ -60,9 +60,9 @@ Bu, **istemcinin** çereze erişimini engeller (Örneğin **Javascript** ile: `d
- Eğer sayfa, bir isteğin yanıtı olarak çerezleri **gönderiyorsa** (örneğin bir **PHPinfo** sayfasında), XSS'i kötüye kullanarak bu sayfaya bir istek göndermek ve yanıtından **çerezleri çalmak** mümkündür (örneği kontrol edin [https://blog.hackcommander.com/posts/2022/11/12/bypass-httponly-via-php-info-page/](https://blog.hackcommander.com/posts/2022/11/12/bypass-httponly-via-php-info-page/)).
- Bu, **TRACE** **HTTP** istekleri ile aşılabilir çünkü sunucudan gelen yanıt, gönderilen çerezleri yansıtır (bu HTTP yöntemi mevcutsa). Bu teknik **Cross-Site Tracking** olarak adlandırılır.
- Modern tarayıcılar, JS'den TRACE isteği göndermeye izin vermeyerek bu tekniği engeller. Ancak, IE6.0 SP2'ye `\r\nTRACE` göndermek gibi belirli yazılımlarda bazı aşmalar bulunmuştur.
- Modern tarayıcılar, JS'den TRACE isteği göndermeye izin vermeyerek bu tekniği engeller. Ancak, IE6.0 SP2'ye `TRACE` yerine `\r\nTRACE` göndererek bazı aşmalar bulunmuştur.
- Diğer bir yol, tarayıcıların sıfır/günlük açıklarını istismar etmektir.
- Bir Çerez Jar taşma saldırısı gerçekleştirerek **HttpOnly çerezlerini** **üst üste yazmak** mümkündür:
- Bir Çerez Jar taşma saldırısı gerçekleştirerek **HttpOnly çerezleri** **üst üste yazmak** mümkündür:
{{#ref}}
cookie-jar-overflow.md
@ -72,7 +72,7 @@ cookie-jar-overflow.md
### Güvenli
İstek, yalnızca güvenli bir kanal üzerinden (tipik olarak **HTTPS**) iletilirse çerezi **sadece** HTTP isteğinde gönderir.
İstek, yalnızca güvenli bir kanal üzerinden (genellikle **HTTPS**) iletilirse çerezi **sadece** HTTP isteğinde gönderir.
## Çerez Ön Ekleri
@ -82,18 +82,18 @@ cookie-jar-overflow.md
- `secure` bayrağı ile ayarlanmalıdır.
- HTTPS ile güvence altına alınmış bir sayfadan gelmelidir.
- Alt alan adlarına iletilmesini engellemek için bir alan belirtmeleri yasaktır.
- Alt alan adlarına iletilmelerini engellemek için bir alan belirtmeleri yasaktır.
- Bu çerezlerin yolu `/` olarak ayarlanmalıdır.
`__Host-` ile başlayan çerezlerin süper alan adlarına veya alt alan adlarına gönderilmesine izin verilmediğini belirtmek önemlidir. Bu kısıtlama, uygulama çerezlerini izole etmeye yardımcı olur. Bu nedenle, tüm uygulama çerezleri için `__Host-` ön ekinin kullanılması, güvenliği ve izolasyonu artırmak için iyi bir uygulama olarak kabul edilebilir.
### Çerezleri Üst Üste Yazma
Dolayısıyla, `__Host-` ile başlayan çerezlerin korunmasından biri, alt alan adlarından üst üste yazılmalarını engellemektir. Örneğin [**Cookie Tossing saldırılarını**](cookie-tossing.md) önlemek. [**Cookie Crumbles: Web Oturum Bütünlüğü Açıklarını Ortaya Çıkarma**](https://www.youtube.com/watch?v=F_wAzF4a7Xg) ([**makale**](https://www.usenix.org/system/files/usenixsecurity23-squarcina.pdf)) konuşmasında, çerez adının başına veya başına ve sonuna `=` ekleyerek alt alan adlarından \_\_HOST- ile başlayan çerezlerin ayarlanmasının mümkün olduğu sunulmuştur:
Dolayısıyla, `__Host-` ile başlayan çerezlerin korunmasından biri, alt alan adlarından üst üste yazılmalarını engellemektir. Örneğin [**Cookie Tossing saldırılarını**](cookie-tossing.md) önlemek. [**Cookie Crumbles: Web Oturum Bütünlüğü Açıklarını Ortaya Çıkarma**](https://www.youtube.com/watch?v=F_wAzF4a7Xg) ([**makale**](https://www.usenix.org/system/files/usenixsecurity23-squarcina.pdf)) konuşmasında, çerezleri ayarlamanın mümkün olduğu gösterilmiştir. \_\_HOST- ile başlayan çerezler, ayrıştırıcıyı kandırarak, örneğin, başına veya başına ve sonuna "=" ekleyerek ayarlanmıştır:
<figure><img src="../../images/image (6) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
Ya da PHP'de çerez adının başına **diğer karakterler ekleyerek**, bu karakterlerin **alt çizgi** karakterleri ile değiştirilmesi sağlanarak `__HOST-` çerezlerinin üst üste yazılması mümkündür:
Ya da PHP'de çerez adının başına **diğer karakterler ekleyerek**, bu karakterlerin **alt çizgi** karakterleri ile değiştirilmesi sağlanarak `__HOST-` çerezlerini üst üste yazmak mümkündür:
<figure><img src="../../images/image (7) (1) (1) (1) (1).png" alt="" width="373"><figcaption></figcaption></figure>
@ -103,7 +103,7 @@ Ya da PHP'de çerez adının başına **diğer karakterler ekleyerek**, bu karak
### Çerezleri Çözme ve Manipüle Etme
Çerezlerde gömülü hassas veriler her zaman incelenmelidir. Base64 veya benzeri formatlarda kodlanmış çerezler genellikle çözülebilir. Bu zafiyet, saldırganların çerezin içeriğini değiştirmesine ve diğer kullanıcıları taklit etmek için değiştirilmiş verilerini çereze geri kodlamasına olanak tanır.
Çerezlerde gömülü hassas veriler her zaman incelenmelidir. Base64 veya benzeri formatlarda kodlanmış çerezler genellikle çözülebilir. Bu zafiyet, saldırganların çerezin içeriğini değiştirmesine ve değiştirilmiş verilerini çereze geri kodlayarak diğer kullanıcıları taklit etmesine olanak tanır.
### Oturum Ele Geçirme
@ -133,7 +133,7 @@ cookie-tossing.md
JWT'deki olası hatalarııklayan bir sayfaya erişmek için önceki bağlantıya tıklayın.
Çerezlerde kullanılan JSON Web Token'lar (JWT) da zafiyetler içerebilir. Potansiyel hatalar ve bunları nasıl istismar edeceğiniz hakkında derinlemesine bilgi için, JWT hacking ile ilgili bağlantılı belgeyi erişmeniz önerilir.
Çerezlerde kullanılan JSON Web Token'lar (JWT) da zafiyetler içerebilir. Potansiyel hatalar ve bunları nasıl istismar edeceğiniz hakkında derinlemesine bilgi için, JWT hacking ile ilgili bağlantılı belgeye erişmeniz önerilir.
### Cross-Site Request Forgery (CSRF)
@ -155,15 +155,15 @@ document.cookie = `${name}=${value}`
setCookie("", "a=b") // Setting the empty cookie modifies another cookie's value
```
Bu, tarayıcının her web sunucusu tarafından `a` adlı ve `b` değerine sahip bir çerez olarak yorumlanan bir çerez başlığı göndermesine yol açar.
Bu, tarayıcının her web sunucusu tarafından `a` adında ve `b` değerine sahip bir çerez olarak yorumlanan bir çerez başlığı göndermesine yol açar.
#### Chrome Hatası: Unicode Yedek Kod Noktası Sorunu
Chrome'da, bir Unicode yedek kod noktası ayarlanmış bir çerezin parçasıysa, `document.cookie` bozulur ve sonrasında boş bir dize döner:
Chrome'da, eğer bir Unicode yedek kod noktası ayarlanmış bir çerezin parçasıysa, `document.cookie` bozulur ve sonrasında boş bir dize döner:
```js
document.cookie = "\ud800=meep"
```
Bu, `document.cookie`'nin boş bir dize döndürmesiyle sonuçlanır ve kalıcı bir bozulmayı gösterir.
Bu, `document.cookie`'nin boş bir dize döndürmesine neden olur ve kalıcı bir bozulmayı gösterir.
#### Ayrıştırma Sorunlarından Kaynaklanan Cookie Smuggling
@ -179,21 +179,21 @@ RENDER_TEXT="hello world; JSESSIONID=13371337; ASDF=end";
- Zope, bir sonraki çerezi analiz etmeye başlamak için bir virgül arar.
- Python'un çerez sınıfları, bir boşluk karakterinde analiz yapmaya başlar.
Bu zafiyet, çerez tabanlı CSRF korumasına dayanan web uygulamalarında özellikle tehlikelidir, çünkü saldırganların taklit CSRF-token çerezlerini enjekte etmesine olanak tanır ve bu da güvenlik önlemlerinin aşılmasına yol açabilir. Sorun, Python'un tekrar eden çerez adlarını ele almasıyla daha da kötüleşir; burada son gerçekleşme, önceki olanları geçersiz kılar. Ayrıca, güvensiz bağlamlarda `__Secure-` ve `__Host-` çerezleri için endişeleri artırır ve çerezlerin taklit edilme eğiliminde olan arka uç sunuculara iletilmesi durumunda yetkilendirme aşımına yol açabilir.
Bu zafiyet, çerez tabanlı CSRF korumasına dayanan web uygulamalarında özellikle tehlikelidir, çünkü saldırganların taklit CSRF-token çerezleri enjekte etmesine olanak tanır ve bu da güvenlik önlemlerinin aşılmasına yol açabilir. Sorun, Python'un tekrar eden çerez adlarını ele almasıyla daha da kötüleşir; burada son gerçekleşme, önceki olanları geçersiz kılar. Ayrıca, güvensiz bağlamlarda `__Secure-` ve `__Host-` çerezleri için endişeleri artırır ve çerezlerin taklit edilme eğiliminde olan arka uç sunuculara iletilmesi durumunda yetkilendirme aşımına yol açabilir.
### Cookies $version
#### WAF Bypass
[**bu blog yazısına**](https://portswigger.net/research/bypassing-wafs-with-the-phantom-version-cookie) göre, **RFC2109** nedeniyle arka ucun çerezi analiz etmek için eski bir mantığı kullanmasını sağlamak için çerez niteliği **`$Version=1`** kullanmak mümkün olabilir. Ayrıca, **`$Domain`** ve **`$Path`** gibi diğer değerler, çerezin arka uç üzerindeki davranışını değiştirmek için kullanılabilir.
According to [**this blogpost**](https://portswigger.net/research/bypassing-wafs-with-the-phantom-version-cookie), arka ucu çerezi analiz etmek için eski bir mantık kullanmaya zorlamak amacıyla çerez niteliği **`$Version=1`** kullanmak mümkün olabilir, bu da **RFC2109**'dan kaynaklanmaktadır. Ayrıca, **`$Domain`** ve **`$Path`** gibi diğer değerler, çerezin arka uç üzerindeki davranışını değiştirmek için kullanılabilir.
#### Cookie Sandwich Attack
[**bu blog yazısına**](https://portswigger.net/research/stealing-httponly-cookies-with-the-cookie-sandwich-technique) göre, HttpOnly çerezlerini çalmak için çerez sandviçi tekniğini kullanmak mümkündür. İşte gereksinimler ve adımlar:
According to [**this blogpost**](https://portswigger.net/research/stealing-httponly-cookies-with-the-cookie-sandwich-technique) çerez sandviçi tekniğini kullanarak HttpOnly çerezleri çalmak mümkündür. İşte gereksinimler ve adımlar:
- Görünüşte işe yaramaz bir **çerezin yanıtta yansıtıldığı** bir yer bulun
- **Değeri `1` olan `$Version`** adında bir çerez oluşturun (bunu JS'den bir XSS saldırısı ile yapabilirsiniz) ve başlangıç konumunu almak için daha spesifik bir yol belirleyin (Python gibi bazı çerçeveler bu adımı gerektirmez)
- **Yansıtılan çerezi oluşturun** ve değeri **açık çift tırnak** bırakan ve önceki çerezin (`$Version`) ardından çerez veritabanında konumlanacak şekilde spesifik bir yol ile
- **Değeri `1` olan `$Version`** adında bir çerez oluşturun (bunu JS'den bir XSS saldırısı ile yapabilirsiniz) daha spesifik bir yol ile böylece başlangıç konumunu alır (bazı çerçeve dilleri bu adımı gerektirmez)
- **Yansıtılan çerezi oluşturun** ve değeri **açık çift tırnak** bırakan ve belirli bir yol ile böylece önceki çerezin (`$Version`) ardından çerez veritabanında konumlanacak şekilde
- Sonra, meşru çerez sırada bir sonraki olacaktır
- **Değeri içinde çift tırnağı kapatan bir sahte çerez oluşturun**
@ -210,18 +210,18 @@ document.cookie = `param2=end";`;
Önceki bölüme bakın.
#### Bypassing value analysis with quoted-string encoding
#### Alıntı dizgesi kodlaması ile değer analizini atlama
Bu ayrıştırma, çerezler içindeki kaçış karakterlerini çözmek için kaçış değerlerini geri almayı gösterir, böylece "\a" "a" olur. Bu, WAF'ları aşmak için yararlı olabilir:
Bu ayrıştırma, çerezler içindeki kaçış karakterlerini çözmek için kaçış değerlerini geri almayı gösterir, böylece "\a" "a" olur. Bu, WAF'ları atlamak için yararlı olabilir:
- `eval('test') => forbidden`
- `"\e\v\a\l\(\'\t\e\s\t\'\)" => allowed`
#### Bypassing cookie-name blocklists
#### Çerez adı kara liste atlaması
RFC2109'da **virgülün çerez değerleri arasında ayırıcı olarak kullanılabileceği** belirtilmiştir. Ayrıca **eşittir işaretinden önce ve sonra boşluklar ve sekmeler eklemek mümkündür**. Bu nedenle, `$Version=1; foo=bar, abc = qux` gibi bir çerez, `"foo":"bar, admin = qux"` çerezini oluşturmaz, bunun yerine `foo":"bar"` ve `"admin":"qux"` çerezlerini oluşturur. İki çerez nasıl oluşturulduğuna ve admin'in eşittir işaretinden önce ve sonra boşluğun nasıl kaldırıldığına dikkat edin.
#### Bypassing value analysis with cookie splitting
#### Çerez bölme ile değer analizini atlama
Son olarak, farklı arka kapılar, farklı çerez başlıklarında geçen farklı çerezleri bir dize içinde birleştirebilir:
```
@ -244,14 +244,14 @@ Resulting cookie: name=eval('test//, comment') => allowed
- **Çerez** her seferinde **giriş yaptığınızda** **aynıdır**.
- Çıkış yapın ve aynı çerezi kullanmayı deneyin.
- Aynı çerezi kullanarak 2 cihazda (veya tarayıcıda) aynı hesaba giriş yapmayı deneyin.
- Çerezde herhangi bir bilgi olup olmadığını kontrol edin ve bunu değiştirmeyi deneyin.
- Neredeyse aynı kullanıcı adıyla birkaç hesap oluşturmayı deneyin ve benzerlikleri görüp göremediğinizi kontrol edin.
- Varsa "**beni hatırla**" seçeneğini kontrol edin ve nasıl çalıştığını görün. Varsa ve savunmasız olabileceğini düşünüyorsanız, her zaman başka bir çerez olmadan **beni hatırla** çerezini kullanın.
- Çerezin içinde herhangi bir bilgi olup olmadığını kontrol edin ve değiştirmeyi deneyin.
- Neredeyse aynı kullanıcı adıyla birkaç hesap oluşturmaya çalışın ve benzerlikleri görebiliyor musunuz kontrol edin.
- Varsa "**beni hatırla**" seçeneğini kontrol edin ve nasıl çalıştığını görün. Varsa ve hassas olabileceğini düşünüyorsanız, her zaman başka bir çerez olmadan **beni hatırla** çerezini kullanın.
- Önceki çerezin şifreyi değiştirdikten sonra bile çalışıp çalışmadığını kontrol edin.
#### **Gelişmiş çerez saldırıları**
Çerez giriş yaptığınızda aynı (veya neredeyse aynı) kalıyorsa, bu muhtemelen çerezin hesabınızdaki bazı alanlarla (muhtemelen kullanıcı adıyla) ilişkili olduğu anlamına gelir. O zaman şunları yapabilirsiniz:
Eğer çerez giriş yaptığınızda aynı (veya neredeyse aynı) kalıyorsa, bu muhtemelen çerezin hesabınızdaki bir alanla (muhtemelen kullanıcı adıyla) ilişkili olduğu anlamına gelir. O zaman şunları yapabilirsiniz:
- Çok **benzer** kullanıcı adlarına sahip birçok **hesap** oluşturmaya çalışın ve algoritmanın nasıl çalıştığını **tahmin** etmeye çalışın.
- **Kullanıcı adını brute force** etmeyi deneyin. Eğer çerez yalnızca kullanıcı adınız için bir kimlik doğrulama yöntemi olarak kaydediliyorsa, o zaman "**Bmin**" kullanıcı adıyla bir hesap oluşturabilir ve çerezin her bir **bitini brute force** edebilirsiniz çünkü deneyeceğiniz çerezlerden biri "**admin**"e ait olan olacaktır.
@ -267,9 +267,9 @@ padbuster http://web.com/index.php u7bvLewln6PJPSAbMb5pFfnCHSEd6olf 8 -cookies a
padBuster http://web.com/home.jsp?UID=7B216A634951170FF851D6CC68FC9537858795A28ED4AAC6
7B216A634951170FF851D6CC68FC9537858795A28ED4AAC6 8 -encoding 2
```
Padbuster birkaç deneme yapacak ve size hangi durumun hata durumu olduğunu soracaktır (geçersiz olan).
Padbuster birkaç deneme yapacak ve size hangi durumun hata durumu olduğunu soracaktır (geçerli olmayan).
Ardından çerezi şifrelemeye başlayacaktır (bu birkaç dakika sürebilir).
Daha sonra çerezi şifrelemeye başlayacaktır (bu birkaç dakika sürebilir).
Eğer saldırı başarıyla gerçekleştirilmişse, o zaman seçtiğiniz bir dizeyi şifrelemeyi deneyebilirsiniz. Örneğin, **encrypt** **user=administrator** istiyorsanız.
```
@ -279,13 +279,13 @@ Bu yürütme, içinde **user=administrator** dizesi bulunan çerezi doğru bir
**CBC-MAC**
Belki bir çerez bazı değerlere sahip olabilir ve CBC kullanılarak imzalanabilir. O zaman, değerin bütünlüğü, aynı değerle CBC kullanılarak oluşturulan imzadır. IV olarak null bir vektör kullanılması önerildiğinden, bu tür bir bütünlük kontrolü savunmasız olabilir.
Belki bir çerez bazı değerlere sahip olabilir ve CBC kullanılarak imzalanabilir. O zaman, değerin bütünlüğü, aynı değerle CBC kullanılarak oluşturulan imzadır. IV olarak null vektör kullanılması önerildiğinden, bu tür bir bütünlük kontrolü savunmasız olabilir.
**Saldırı**
1. Kullanıcı adı **administ** için imzayı al = **t**
2. Kullanıcı adı **rator\x00\x00\x00 XOR t** için imzayı al = **t'**
3. Çerezde değeri **administrator+t'** olarak ayarla (**t'** geçerli bir imza olacaktır **(rator\x00\x00\x00 XOR t) XOR t** = **rator\x00\x00\x00**)
3. Çerezde değeri **administrator+t'** olarak ayarla (**t'** geçerli bir imza olacaktır **(rator\x00\x00\x00 XOR t) XOR t** = **rator\x00\x00\x00**
**ECB**
@ -294,11 +294,11 @@ Giriş yaptığınızda aldığınız çerez her zaman aynı olmalıdır.
**Nasıl tespit edilir ve saldırılır:**
Neredeyse aynı verilere sahip 2 kullanıcı oluşturun (kullanıcı adı, şifre, e-posta vb.) ve verilen çerez içinde bazı desenleri keşfetmeye çalışın.
Neredeyse aynı verilere (kullanıcı adı, şifre, e-posta vb.) sahip 2 kullanıcı oluşturun ve verilen çerez içinde bir desen keşfetmeye çalışın.
Örneğin "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" adında bir kullanıcı oluşturun ve çerezde herhangi bir desen olup olmadığını kontrol edin (çünkü ECB her bloğu aynı anahtarla şifrelediğinden, kullanıcı adı şifrelendiğinde aynı şifrelenmiş baytlar görünebilir).
Kullanılan bir bloğun boyutunda bir desen olmalıdır. Yani, bir grup "a"nın nasıl şifrelendiğini bilerek bir kullanıcı adı oluşturabilirsiniz: "a"*(blok boyutu)+"admin". Ardından, çerezden bir "a" bloğunun şifrelenmiş desenini silebilirsiniz. Ve "admin" kullanıcı adının çerezine sahip olacaksınız.
Kullanılan bir bloğun boyutunda bir desen olmalıdır. Yani, bir grup "a" nın nasıl şifrelendiğini bilerek bir kullanıcı adı oluşturabilirsiniz: "a"\*(bloğun boyutu)+"admin". Ardından, çerezden bir "a" bloğunun şifrelenmiş desenini silebilirsiniz. Ve "admin" kullanıcı adının çerezine sahip olacaksınız.
## Referanslar