Translated ['src/pentesting-web/domain-subdomain-takeover.md', 'src/pent

This commit is contained in:
Translator 2025-02-04 18:46:34 +00:00
parent 64fc530fc9
commit 1a643d3815
2 changed files with 98 additions and 56 deletions

View File

@ -5,13 +5,13 @@
## Domain takeover ## Domain takeover
Eğer **kapsam içinde bir hizmet tarafından kullanılan** bir alan adı (domain.tld) keşfettiyseniz ancak **şirket** bu alan adının **sahipliğini kaybetmişse**, bunu **kaydetmeyi** (eğer yeterince ucuzsa) deneyebilir ve şirkete bildirebilirsiniz. Eğer bu alan adı, bir oturum çerezi gibi **hassas bilgiler** alıyorsa **GET** parametresi veya **Referer** başlığı aracılığıyla, bu kesinlikle bir **ık**tır. Eğer **kapsam içinde bir hizmet tarafından kullanılan** bir alan adı (domain.tld) keşfettiyseniz ancak **şirket** bu alanın **sahipliğini kaybetmişse**, bunu **kaydetmeyi** (eğer yeterince ucuzsa) deneyebilir ve şirkete bildirebilirsiniz. Eğer bu alan adı, bir oturum çerezi gibi **duyarlı bilgiler** alıyorsa **GET** parametresi veya **Referer** başlığı aracılığıyla, bu kesinlikle bir **zafiyet**dir.
### Subdomain takeover ### Subdomain takeover
Şirketin bir alt alan adı, **kayıtlı olmayan bir üçüncü taraf hizmete** işaret ediyor. Eğer bu **üçüncü taraf hizmette** bir **hesap oluşturabilir** ve kullanılan **adı kaydedebilirseniz**, alt alan adı ele geçirme işlemini gerçekleştirebilirsiniz. Şirketin bir alt alan adı, **kayıtlı olmayan bir üçüncü taraf hizmete** işaret ediyor. Eğer bu **üçüncü taraf hizmette** bir **hesap oluşturabilir** ve kullanılan **adı kaydedebilirseniz**, alt alan adı ele geçirmeyi gerçekleştirebilirsiniz.
Olası ele geçirmeleri kontrol etmek için çeşitli sözlüklerle birlikte birçok araç bulunmaktadır: Olası ele geçirmeleri kontrol etmek için çeşitli sözlüklerle birlikte birk araç bulunmaktadır:
- [https://github.com/EdOverflow/can-i-take-over-xyz](https://github.com/EdOverflow/can-i-take-over-xyz) - [https://github.com/EdOverflow/can-i-take-over-xyz](https://github.com/EdOverflow/can-i-take-over-xyz)
- [https://github.com/blacklanternsecurity/bbot](https://github.com/blacklanternsecurity/bbot) - [https://github.com/blacklanternsecurity/bbot](https://github.com/blacklanternsecurity/bbot)
@ -29,53 +29,70 @@ Olası ele geçirmeleri kontrol etmek için çeşitli sözlüklerle birlikte bir
### Subdomain Takeover Generation via DNS Wildcard ### Subdomain Takeover Generation via DNS Wildcard
Bir alan adında DNS wildcard kullanıldığında, o alan adının farklı bir adresi olmayan herhangi bir istenen alt alan adı **aynı bilgilere çözümlenecektir**. Bu bir A IP adresi, bir CNAME olabilir... Bir alan adında DNS wildcard kullanıldığında, o alan adının farklı bir adresi olmayan herhangi bir istenen alt alan adı **aynı bilgilere çözür**. Bu bir A IP adresi, bir CNAME olabilir...
Örneğin, `*.testing.com` `1.1.1.1` adresine wildcard olarak ayarlandıysa, `not-existent.testing.com` `1.1.1.1` adresine işaret edecektir. Örneğin, `*.testing.com` `1.1.1.1`'e wildcard olarak ayarlandıysa, `not-existent.testing.com` `1.1.1.1`'e işaret edecektir.
Ancak, bir IP adresine işaret etmek yerine, sistem yöneticisi bunu bir **üçüncü taraf hizmete CNAME aracılığıyla** yönlendirirse, örneğin bir G**ithub alt alan adı** (`sohomdatta1.github.io`) gibi. Bir saldırgan, **kendi üçüncü taraf sayfasını** (bu durumda Gihub'da) oluşturabilir ve `something.testing.com` adresinin oraya işaret ettiğini söyleyebilir. Çünkü, **CNAME wildcard** saldırgana **kurbanın alan adı için keyfi alt alan adları oluşturma** yetkisi verecektir. Ancak, bir IP adresine işaret etmek yerine, sistem yöneticisi bunu bir **üçüncü taraf hizmete CNAME aracılığıyla** yönlendirirse, örneğin bir G**ithub alt alan adı** (`sohomdatta1.github.io`) gibi. Bir saldırgan, **kendi üçüncü taraf sayfasını** (bu durumda Gihub'da) oluşturabilir ve `something.testing.com`'un oraya işaret ettiğini söyleyebilir. Çünkü, **CNAME wildcard** saldırgana **kurbanın alanı için keyfi alt alan adları oluşturma** yetkisi verecektir.
Bu ığın bir örneğini CTF yazısında bulabilirsiniz: [https://ctf.zeyu2001.com/2022/nitectf-2022/undocumented-js-api](https://ctf.zeyu2001.com/2022/nitectf-2022/undocumented-js-api) Bu zafiyetin bir örneğini CTF yazısında bulabilirsiniz: [https://ctf.zeyu2001.com/2022/nitectf-2022/undocumented-js-api](https://ctf.zeyu2001.com/2022/nitectf-2022/undocumented-js-api)
## Exploiting a subdomain takeover ## Exploiting a subdomain takeover
Alt alan adı ele geçirme, temelde internet üzerindeki belirli bir alan adı için DNS sahtekarlığıdır ve saldırganların bir alan adı için A kayıtları ayarlamasına olanak tanır, bu da tarayıcıların saldırganın sunucusundan içerik göstermesine neden olur. Bu **şeffaflık**, tarayıcıların alan adlarını oltalama saldırılarına karşı savunmasız hale getirir. Saldırganlar bu amaçla [_typosquatting_](https://en.wikipedia.org/wiki/Typosquatting) veya [_Doppelganger domains_](https://en.wikipedia.org/wiki/Doppelg%C3%A4nger) kullanabilir. Özellikle, oltalama e-postasında URL'nin meşru göründüğü alan adları savunmasızdır, bu da kullanıcıları kandırarak alan adının doğuştan güveni nedeniyle spam filtrelerinden kaçınmalarına neden olur. Alt alan adı ele geçirme, temelde belirli bir alan adı için internet genelinde DNS sahtekarlığıdır ve saldırganların bir alan adı için A kayıtları ayarlamasına olanak tanır, bu da tarayıcıların saldırganın sunucusundan içerik göstermesine neden olur. Bu tarayıcılardaki **şeffaflık**, alan adlarını phishing'e yatkın hale getirir. Saldırganlar bu amaçla [_typosquatting_](https://en.wikipedia.org/wiki/Typosquatting) veya [_Doppelganger domains_](https://en.wikipedia.org/wiki/Doppelg%C3%A4nger) kullanabilir. Özellikle, bir phishing e-postasındaki URL'nin meşru göründüğü alan adları, kullanıcıları kandırarak ve alan adının doğuştan güveni nedeniyle spam filtrelerinden kaçınarak daha savunmasızdır.
Daha fazla ayrıntı için bu [gönderiyi kontrol edin](https://0xpatrik.com/subdomain-takeover/) Daha fazla ayrıntı için bu [gönderiyi kontrol edin](https://0xpatrik.com/subdomain-takeover/)
### **SSL Certificates** ### **SSL Certificates**
SSL sertifikaları, saldırganlar tarafından [_Let's Encrypt_](https://letsencrypt.org/) gibi hizmetler aracılığıyla oluşturulursa, bu sahte alan adlarının meşruiyetini artırır ve oltalama saldırılarını daha inandırıcı hale getirir. SSL sertifikaları, saldırganlar tarafından [_Let's Encrypt_](https://letsencrypt.org/) gibi hizmetler aracılığıyla oluşturulursa, bu sahte alanların meşruiyetini artırarak phishing saldırılarını daha inandırıcı hale getirir.
### **Cookie Security and Browser Transparency** ### **Cookie Security and Browser Transparency**
Tarayıcı şeffaflığı, [Aynı köken politikası](https://en.wikipedia.org/wiki/Same-origin_policy) gibi politikalarla yönetilen çerez güvenliğine de uzanır. Oturumları yönetmek ve giriş belirteçlerini depolamak için sıklıkla kullanılan çerezler, alt alan adı ele geçirme yoluyla istismar edilebilir. Saldırganlar, kullanıcıları tehlikeye atarak, tehlikeye atılmış bir alt alan adına yönlendirerek **oturum çerezlerini** toplayabilir. Tarayıcı şeffaflığı, [Aynı köken politikası](https://en.wikipedia.org/wiki/Same-origin_policy) gibi politikalarla yönetilen çerez güvenliğine de uzanır. Oturumları yönetmek ve giriş belirteçlerini depolamak için sıklıkla kullanılan çerezler, alt alan adı ele geçirme yoluyla istismar edilebilir. Saldırganlar, kullanıcıları tehlikeye atarak çerezleri toplamak için yalnızca kullanıcıları tehlikeye atılmış bir alt alan adına yönlendirebilir.
### CORS Bypass
Her alt alan adının ana alan veya diğer alt alanlardan CORS kaynaklarına erişmesine izin verilebilir. Bu, bir saldırganın CORS isteklerini kötüye kullanarak **duyarlı bilgilere erişmesine** olanak tanıyabilir.
### CSRF - Same-Site Cookies bypass
Alt alan adının, çerezlerin `Same-Site` niteliği tarafından engellenen alan veya diğer alt alanlara çerez göndermesine izin verilebilir. Ancak, anti-CSRF belirteçlerinin düzgün bir şekilde uygulanması durumunda bu saldırıyı engelleyeceğini unutmayın.
### OAuth tokens redirect
Kompromize edilmiş alt alan adının, bir OAuth akışının `redirect_uri` URL'sinde kullanılmasına izin verilebilir. Bu, bir saldırganın **OAuth belirtecini çalmasına** olanak tanıyabilir.
### CSP Bypass
Kompromize edilmiş alt alan adı (veya her alt alan adı), örneğin CSP'nin `script-src`'sinde kullanılmasına izin verilebilir. Bu, bir saldırganın **kötü niyetli betikler enjekte etmesine** ve potansiyel XSS zafiyetlerini kötüye kullanmasına olanak tanıyabilir.
### **Emails and Subdomain Takeover** ### **Emails and Subdomain Takeover**
Alt alan adı ele geçirmenin bir diğer yönü, e-posta hizmetleridir. Saldırganlar, meşru bir alt alan adından e-posta almak veya göndermek için **MX kayıtlarını** manipüle edebilir, bu da oltalama saldırılarının etkinliğini artırır. Alt alan adı ele geçirmenin bir diğer yönü, e-posta hizmetleridir. Saldırganlar, meşru bir alt alan adından e-posta almak veya göndermek için **MX kayıtlarını** manipüle edebilir, bu da phishing saldırılarının etkinliğini artırır.
### **Higher Order Risks** ### **Higher Order Risks**
Daha fazla risk, **NS kayıt ele geçirme** içerir. Eğer bir saldırgan bir alan adının bir NS kaydını kontrol altına alırsa, trafiğin bir kısmını kendi kontrolündeki bir sunucuya yönlendirebilir. Bu risk, saldırganın DNS kayıtları için yüksek bir **TTL (Time to Live)** ayarlaması durumunda artar ve saldırının süresini uzatır. Daha fazla risk, **NS kayıt ele geçirme** içerir. Eğer bir saldırgan bir alanın bir NS kaydını kontrol altına alırsa, trafiğin bir kısmını kendi kontrolündeki bir sunucuya yönlendirebilir. Bu risk, saldırganın DNS kayıtları için yüksek bir **TTL (Time to Live)** ayarlaması durumunda artar ve saldırının süresini uzatır.
### CNAME Record Vulnerability ### CNAME Record Vulnerability
Saldırganlar, artık kullanılmayan veya devre dışı bırakılan dış hizmetlere işaret eden talep edilmemiş CNAME kayıtlarını istismar edebilir. Bu, onlara güvenilir bir alan adı altında bir sayfa oluşturma imkanı tanır ve oltalama veya kötü amaçlı yazılım dağıtımını daha da kolaylaştırır. Saldırganlar, artık kullanılmayan veya devre dışı bırakılan dış hizmetlere işaret eden talep edilmemiş CNAME kayıtlarını istismar edebilir. Bu, onlara güvenilir bir alan altında bir sayfa oluşturma olanağı tanır ve phishing veya kötü amaçlı yazılım dağıtımını kolaylaştırır.
### **Mitigation Strategies** ### **Mitigation Strategies**
Azaltma stratejileri şunları içerir: Azaltma stratejileri şunları içerir:
1. **Savunmasız DNS kayıtlarını kaldırmak** - Bu, alt alan adı artık gerekli değilse etkilidir. 1. **Zayıf DNS kayıtlarını kaldırmak** - Bu, alt alan adı artık gerekli değilse etkilidir.
2. **Alan adını talep etmek** - İlgili bulut sağlayıcısıyla kaynağı kaydetmek veya süresi dolmuş bir alan adını yeniden satın almak. 2. **Alan adını talep etmek** - İlgili bulut sağlayıcısıyla kaynağı kaydetmek veya süresi dolmuş bir alan adını yeniden satın almak.
3. **Savunmasızlıklar için düzenli izleme** - [aquatone](https://github.com/michenriksen/aquatone) gibi araçlar, savunmasız alan adlarını tanımlamaya yardımcı olabilir. Kuruluşlar ayrıca, DNS kayıtlarının oluşturulmasının kaynak oluşturmanın son adımı ve kaynak yok etmenin ilk adımı olduğundan emin olarak altyapı yönetim süreçlerini gözden geçirmelidir. 3. **Zafiyetler için düzenli izleme** - [aquatone](https://github.com/michenriksen/aquatone) gibi araçlar, savunmasız alan adlarını tanımlamaya yardımcı olabilir. Kuruluşlar ayrıca, DNS kayıtlarının oluşturulmasının kaynak oluşturmanın son adımı ve kaynak yok etmenin ilk adımı olduğundan emin olarak altyapı yönetim süreçlerini gözden geçirmelidir.
Bulut sağlayıcıları için, alan adı sahipliğini doğrulamak, alt alan adı ele geçirmelerini önlemek için kritik öneme sahiptir. Bazıları, [GitLab](https://about.gitlab.com/2018/02/05/gitlab-pages-custom-domain-validation/) gibi, bu sorunu tanımış ve alan adı doğrulama mekanizmaları uygulamıştır. Bulut sağlayıcıları için, alan adı sahipliğini doğrulamak, alt alan adı ele geçirmelerini önlemek için kritik öneme sahiptir. Bazıları, [GitLab](https://about.gitlab.com/2018/02/05/gitlab-pages-custom-domain-validation/) gibi, bu sorunu tanımış ve alan doğrulama mekanizmaları uygulamıştır.
## References ## References
- [https://0xpatrik.com/subdomain-takeover/](https://0xpatrik.com/subdomain-takeover/) - [https://0xpatrik.com/subdomain-takeover/](https://0xpatrik.com/subdomain-takeover/)
- [https://www.stratussecurity.com/post/subdomain-takeover-guide](https://www.stratussecurity.com/post/subdomain-takeover-guide) - [https://www.stratussecurity.com/post/subdomain-takeover-guide](https://www.stratussecurity.com/post/subdomain-takeover-guide)
- [https://www.hackerone.com/blog/guide-subdomain-takeovers-20](https://www.hackerone.com/blog/guide-subdomain-takeovers-20)
{{#include ../banners/hacktricks-training.md}} {{#include ../banners/hacktricks-training.md}}

View File

@ -12,7 +12,7 @@ Bir çerezin son kullanma tarihi `Expires` niteliği ile belirlenir. Tersine, `M
### Alan ### Alan
Bir çerezi alacak ana bilgisayarlar `Domain` niteliği ile belirtilir. Varsayılan olarak, bu çerezi veren ana bilgisayara ayarlanır, alt alan adlarını içermez. Ancak, `Domain` niteliği açıkça ayarlandığında, alt alan adlarını da kapsar. Bu, `Domain` niteliğinin belirlenmesini daha az kısıtlayıcı bir seçenek haline getirir ve alt alan adları arasında çerez paylaşımının gerekli olduğu senaryolar için faydalıdır. Örneğin, `Domain=mozilla.org` ayarlandığında, `developer.mozilla.org` gibi alt alan adlarında çerezlere erişim sağlanır. Bir çerezi alacak olan ana bilgisayarlar `Domain` niteliği ile belirtilir. Varsayılan olarak, bu çerezi veren ana bilgisayara ayarlanır, alt alan adlarını içermez. Ancak, `Domain` niteliği açıkça ayarlandığında, alt alan adlarını da kapsar. Bu, `Domain` niteliğinin belirlenmesini daha az kısıtlayıcı bir seçenek haline getirir ve alt alan adları arasında çerez paylaşımının gerekli olduğu senaryolar için faydalıdır. Örneğin, `Domain=mozilla.org` ayarlandığında, `developer.mozilla.org` gibi alt alan adlarında çerezlere erişim sağlanır.
### Yol ### Yol
@ -20,9 +20,9 @@ Bir çerezi alacak ana bilgisayarlar `Domain` niteliği ile belirtilir. Varsayı
### Sıralama Kuralları ### Sıralama Kuralları
İki çerez aynı adı taşıdığında, gönderilmek üzere seçilen çerez: İki çerez aynı isme sahip olduğunda, gönderilmek üzere seçilen çerez:
- İstenen URL'deki en uzun yolu eşleştiren çerez. - İstenen URL'deki en uzun yolu eşleşen çerez.
- Yollar aynıysa en son ayarlanan çerez. - Yollar aynıysa en son ayarlanan çerez.
### SameSite ### SameSite
@ -35,20 +35,20 @@ Bir çerezi alacak ana bilgisayarlar `Domain` niteliği ile belirtilir. Varsayı
Çerezleri yapılandırırken, bu nitelikleri anlamak, farklı senaryolar arasında beklenildiği gibi davranmalarını sağlamaya yardımcı olabilir. Çerezleri yapılandırırken, bu nitelikleri anlamak, farklı senaryolar arasında beklenildiği gibi davranmalarını sağlamaya yardımcı olabilir.
| **İstek Türü** | **Örnek Kod** | **Çerezler Ne Zaman Gönderilir** | | **İstek Türü** | **Örnek Kod** | **Çerezler Ne Zaman Gönderilir** |
| ---------------- | ---------------------------------- | --------------------- | | --------------- | ------------------------------- | --------------------------------- |
| Bağlantı | \<a href="...">\</a> | NotSet\*, Lax, None | | Bağlantı | \<a href="...">\</a> | NotSet\*, Lax, None |
| Önceden Yükleme | \<link rel="prerender" href=".."/> | NotSet\*, Lax, None | | Önceden Yükleme | \<link rel="prerender" href=".."/> | NotSet\*, Lax, None |
| Form GET | \<form method="GET" action="..."> | NotSet\*, Lax, None | | Form GET | \<form method="GET" action="..."> | NotSet\*, Lax, None |
| Form POST | \<form method="POST" action="..."> | NotSet\*, None | | Form POST | \<form method="POST" action="..."> | NotSet\*, None |
| iframe | \<iframe src="...">\</iframe> | NotSet\*, None | | iframe | \<iframe src="...">\</iframe> | NotSet\*, None |
| AJAX | $.get("...") | NotSet\*, None | | AJAX | $.get("...") | NotSet\*, None |
| Resim | \<img src="..."> | NetSet\*, 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 hafifçe 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**_ niteliğine sahip bir çerez, **CSRF saldırılarını azaltacaktır**. _**SameSite**_ niteliğ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** **nitelikleri olmayan bir çerez için 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/)).\ **\*Chrome80 (şub/2019) itibarıyla, bir çerez için varsayılan davranış, çerez samesite** **nitelikleri 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/)).\
Bu değişiklik uygulandıktan sonra, **SameSite** **politikası olmayan çerezler Chrome'da** **ilk 2 dakika boyunca None olarak ve ardından üst düzey çapraz site POST isteği için Lax olarak** **işlenecektir.** Bu değişiklik uygulandıktan sonra, **SameSite** **politikası olmayan çerezler Chrome'da** **ilk 2 dakika boyunca None** olarak **değerlendirilecek ve ardından üst düzey çapraz site POST isteği için Lax** olarak değerlendirilecektir.
## Çerez Bayrakları ## Çerez Bayrakları
@ -62,7 +62,7 @@ Bu, **istemcinin** çereze erişimini engeller (Örneğin **Javascript** ile: `d
- Bu, **TRACE** **HTTP** istekleri ile aşılabilir çünkü sunucudan gelen yanıt, gönderilen çerezleri yansıtacaktır. Bu teknik **Cross-Site Tracking** olarak adlandırılır. - Bu, **TRACE** **HTTP** istekleri ile aşılabilir çünkü sunucudan gelen yanıt, gönderilen çerezleri yansıtacaktır. 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 `TRACE` yerine `\r\nTRACE` göndererek 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. - 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 çerezleri** **aşmak** mümkündür: - Bir Çerez Jar taşma saldırısı gerçekleştirerek **HttpOnly çerezlerini** **aşmak** mümkündür:
{{#ref}} {{#ref}}
cookie-jar-overflow.md cookie-jar-overflow.md
@ -72,7 +72,7 @@ cookie-jar-overflow.md
### Güvenli ### Güvenli
İstek, yalnızca güvenli bir kanal üzerinden (tipik olarak **HTTPS**) iletilirse çerezi bir HTTP isteği ile **sadece** gönderir. İstek, yalnızca güvenli bir kanal üzerinden (tipik olarak **HTTPS**) iletilirse çerezi **sadece** HTTP isteğinde gönderir.
## Çerez Ön Ekleri ## Çerez Ön Ekleri
@ -89,11 +89,11 @@ cookie-jar-overflow.md
### Çerezleri Üzerine Yazma ### Çerezleri Üzerine Yazma
Dolayısıyla, `__Host-` ile başlayan çerezlerin korunmasından biri, alt alanlardan üzerine yazılmalarını engellemektir. Örneğin [**Cookie Tossing saldırılarını**](cookie-tossing.md) önlemek. [**Cookie Crumbles: Unveiling Web Session Integrity Vulnerabilities**](https://www.youtube.com/watch?v=F_wAzF4a7Xg) ([**makale**](https://www.usenix.org/system/files/usenixsecurity23-squarcina.pdf)) konuşmasında, alt alanlardan `__HOST-` ile başlayan çerezlerin ayarlanmasının, örneğin başına veya başına ve sonuna "=" ekleyerek, parser'ı kandırarak mümkün olduğu sunulmuştur: Dolayısıyla, `__Host-` ile başlayan çerezlerin korunmasından biri, alt alanlardan üzerine yazılmalarını engellemektir. Örneğin [**Cookie Tossing saldırılarını**](cookie-tossing.md) önlemek. [**Cookie Crumbles: Unveiling Web Session Integrity Vulnerabilities**](https://www.youtube.com/watch?v=F_wAzF4a7Xg) ([**makale**](https://www.usenix.org/system/files/usenixsecurity23-squarcina.pdf)) konuşmasında, alt alanlardan `__HOST-` ile başlayan çerezlerin ayarlanmasının, örneğin başına veya sonuna "=" ekleyerek, ayrıştırıcıyı kandırarak mümkün olduğu sunulmuştur:
<figure><img src="../../images/image (6) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <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 **başka karakterler ekleyerek**, bunların **alt çizgi** karakterleri ile **değiştirileceği** gösterilmiştir, bu da `__HOST-` çerezlerini üzerine yazmaya olanak tanır: Ya da PHP'de çerez adının başına **başka karakterler ekleyerek**, bunların **alt çizgi** karakterleri ile **değiştirileceği** mümkün olmuştur, bu da `__HOST-` çerezlerini üzerine yazmaya olanak tanır:
<figure><img src="../../images/image (7) (1) (1) (1) (1).png" alt="" width="373"><figcaption></figcaption></figure> <figure><img src="../../images/image (7) (1) (1) (1) (1).png" alt="" width="373"><figcaption></figcaption></figure>
@ -107,13 +107,13 @@ Ya da PHP'de çerez adının başına **başka karakterler ekleyerek**, bunları
### Oturum Ele Geçirme ### Oturum Ele Geçirme
Bu saldırı, bir kullanıcının çerezini çalarak uygulama içindeki hesabına yetkisiz erişim sağlamayı içerir. Çalınan çerezi kullanarak, bir saldırgan meşru kullanıcıyı taklit edebilir. Bu saldırı, bir kullanıcının çerezini çalarak uygulama içindeki hesabına yetkisiz erişim sağlamayı içerir. Çalınan çerez kullanılarak, bir saldırgan meşru kullanıcıyı taklit edebilir.
### Oturum Sabitleme ### Oturum Sabitleme
Bu senaryoda, bir saldırgan bir kurbanı belirli bir çerezi kullanarak giriş yapmaya kandırır. Uygulama giriş yapıldığında yeni bir çerez atamıyorsa, saldırgan, orijinal çerezi elinde bulundurarak kurbanı taklit edebilir. Bu teknik, kurbanın saldırgan tarafından sağlanan bir çerezle giriş yapmasına dayanır. Bu senaryoda, bir saldırgan bir kurbanı belirli bir çerezi kullanarak oturum açmaya kandırır. Uygulama oturum açıldığında yeni bir çerez atamazsa, saldırgan, orijinal çerezi elinde bulundurarak kurbanı taklit edebilir. Bu teknik, kurbanın saldırgan tarafından sağlanan bir çerezle oturum açmasına dayanır.
Eğer bir **alt alan** içinde **XSS bulduysanız** veya bir **alt alanı kontrol ediyorsanız**, okuyun: Eğer bir **alt alanında XSS bulduysanız** veya **bir alt alanı kontrol ediyorsanız**, okuyun:
{{#ref}} {{#ref}}
cookie-tossing.md cookie-tossing.md
@ -123,7 +123,7 @@ cookie-tossing.md
Burada, saldırgan kurbanı saldırganın oturum çerezini kullanmaya ikna eder. Kurban, kendi hesabında oturum açtığını düşünerek, istemeden saldırganın hesabı bağlamında eylemler gerçekleştirir. Burada, saldırgan kurbanı saldırganın oturum çerezini kullanmaya ikna eder. Kurban, kendi hesabında oturum açtığını düşünerek, istemeden saldırganın hesabı bağlamında eylemler gerçekleştirir.
Eğer bir **alt alan** içinde **XSS bulduysanız** veya bir **alt alanı kontrol ediyorsanız**, okuyun: Eğer bir **alt alanında XSS bulduysanız** veya **bir alt alanı kontrol ediyorsanız**, okuyun:
{{#ref}} {{#ref}}
cookie-tossing.md cookie-tossing.md
@ -141,7 +141,7 @@ Bu saldırı, oturum açmış bir kullanıcının, şu anda kimlik doğrulaması
### Boş Çerezler ### Boş Çerezler
(Başka ayrıntılar için [orijinal araştırmaya](https://blog.ankursundara.com/cookie-bugs/) bakın) Tarayıcılar, isim olmadan çerez oluşturulmasına izin verir, bu da JavaScript ile şu şekilde gösterilebilir: (Başka detaylar için [orijinal araştırmaya](https://blog.ankursundara.com/cookie-bugs/) bakın) Tarayıcılar, isim olmadan çerez oluşturulmasına izin verir, bu da JavaScript ile şu şekilde gösterilebilir:
```js ```js
document.cookie = "a=v1" document.cookie = "a=v1"
document.cookie = "=test value;" // Setting an empty named cookie document.cookie = "=test value;" // Setting an empty named cookie
@ -167,38 +167,63 @@ Bu, `document.cookie`'nin boş bir dize döndürmesiyle sonuçlanır ve kalıcı
#### Ayrıştırma Sorunlarından Kaynaklanan Cookie Smuggling #### Ayrıştırma Sorunlarından Kaynaklanan Cookie Smuggling
(Daha fazla ayrıntı için [orijinal araştırmaya](https://blog.ankursundara.com/cookie-bugs/) bakın) Java (Jetty, TomCat, Undertow) ve Python (Zope, cherrypy, web.py, aiohttp, bottle, webob) gibi birkaç web sunucusu, eski RFC2965 desteği nedeniyle çerez dizelerini yanlış işler. Bir çerez değeri çift tırnak içinde olsa bile, normalde anahtar-değer çiftlerini ayıran noktalı virgüller içerse bile, bunu tek bir değer olarak okurlar: (Daha fazla ayrıntı için [orijinal araştırmaya](https://blog.ankursundara.com/cookie-bugs/) bakın) Java (Jetty, TomCat, Undertow) ve Python (Zope, cherrypy, web.py, aiohttp, bottle, webob) gibi birkaç web sunucusu, eski RFC2965 desteği nedeniyle çerez dizelerini yanlış işler. Çift tırnak içinde bir çerez değeri, normalde anahtar-değer çiftlerini ayırması gereken noktalı virgüller içerse bile, tek bir değer olarak okunur:
``` ```
RENDER_TEXT="hello world; JSESSIONID=13371337; ASDF=end"; RENDER_TEXT="hello world; JSESSIONID=13371337; ASDF=end";
``` ```
#### Cookie Injection Vulnerabilities #### Cookie Injection Vulnerabilities
(Check further details in the[original research](https://blog.ankursundara.com/cookie-bugs/)) Sunucuların çerezleri yanlış analiz etmesi, özellikle Undertow, Zope ve Python'un `http.cookie.SimpleCookie` ve `http.cookie.BaseCookie` kullananlar, çerez enjeksiyon saldırıları için fırsatlar yaratır. Bu sunucular, yeni çerezlerin başlangıcını düzgün bir şekilde ayıramaz, bu da saldırganların çerezleri taklit etmesine olanak tanır: (Check further details in the[original research](https://blog.ankursundara.com/cookie-bugs/)) Sunucuların çerezleri yanlış analiz etmesi, özellikle Undertow, Zope ve Python'un `http.cookie.SimpleCookie` ve `http.cookie.BaseCookie` kullananlar, çerez enjeksiyon saldırıları için fırsatlar yaratır. Bu sunucular, yeni çerezlerin başlangıcını düzgün bir şekilde ayırt edemez, bu da saldırganların çerezleri taklit etmesine olanak tanır:
- Undertow, alıntılanmış bir değerden hemen sonra bir yeni çerez bekler, noktalı virgül olmadan. - Undertow, alıntılanmış bir değerden hemen sonra bir yeni çerez bekler, noktalı virgül olmadan.
- Zope, bir sonraki çerezi analiz etmeye başlamak için bir virgül arar. - 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. - 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 çerezleri enjekte etmesine olanak tanır ve bu da güvenlik önlemlerinin aşılmasına neden olabilir. 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, `__Secure-` ve `__Host-` çerezleri için güvensiz bağlamlarda endişeleri artırır ve çerezlerin taklit edilme olasılığına karşı arka uç sunucularına 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 ç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, `__Secure-` ve `__Host-` çerezleri için güvensiz bağlamlarda 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 and WAF bypasses ### Cookies $version
According to [**this blogpost**](https://portswigger.net/research/bypassing-wafs-with-the-phantom-version-cookie), it might be possible to use the cookie attribute **`$Version=1`** to make the backend use an old logic to parse the cookie due to the **RFC2109**. Moreover, other values just as **`$Domain`** and **`$Path`** can be used to modify the behaviour of the backend with the cookie. #### WAF Bypass
#### Bypassing value analysis with quoted-string encoding 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ığı 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, çerezi kullanarak arka ucun davranışını değiştirmek için kullanılabilir.
This parsing indicate to unescape escaped values inside the cookies, so "\a" becomes "a". This can be useful to bypass WAFS as: #### Cookie Sandwich Attack
- `eval('test') => forbidden` According to [**this blogpost**](https://portswigger.net/research/stealing-httponly-cookies-with-the-cookie-sandwich-technique) çerez sandviçi tekniğini kullanarak HttpOnly çerezlerini çalmak mümkündür. İşte gereksinimler ve adımlar:
- `"\e\v\a\l\(\'\t\e\s\t\'\)" => allowed`
#### Bypassing cookie-name blocklists - Görünüşte gereksiz 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) 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 konumlanmasını sağlayın
- Sonra, meşru çerez sırada bir sonraki olacaktır
- **Değeri içinde çift tırnağı kapatan bir sahte çerez oluşturun**
In the RFC2109 it's indicated that a **comma can be used as a separator between cookie values**. And also it's possible to add **spaces and tabs before an after the equal sign**. Therefore a cookie like `$Version=1; foo=bar, abc = qux` doesn't generate the cookie `"foo":"bar, admin = qux"` but the cookies `foo":"bar"` and `"admin":"qux"`. Notice how 2 cookies are generated and how admin got removed the space before and after the equal sign. Bu şekilde, kurban çerezi yeni çerez versiyon 1 içinde sıkışır ve her yansıtıldığında yansıtılır.
```javascript
document.cookie = `$Version=1;`;
document.cookie = `param1="start`;
// any cookies inside the sandwich will be placed into param1 value server-side
document.cookie = `param2=end";`;
```
### WAF bypasses
#### Bypassing value analysis with cookie splitting #### Cookies $version
Finally different backdoors would join in a string different cookies passed in different cookie headers like in: Önceki bölüme bakın.
#### 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ı atlamak için yararlı olabilir:
- `eval('test') => yasak`
- `"\e\v\a\l\(\'\t\e\s\t\'\)" => izin verildi`
#### Ç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.
#### Ç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:
``` ```
GET / HTTP/1.1 GET / HTTP/1.1
Host: example.com Host: example.com
@ -219,8 +244,8 @@ Resulting cookie: name=eval('test//, comment') => allowed
- **Çerez** her seferinde **giriş yaptığınızda** **aynıdır**. - **Çerez** her seferinde **giriş yaptığınızda** **aynıdır**.
- Çıkış yapın ve aynı çerezi kullanmaya çalışın. - Çıkış yapın ve aynı çerezi kullanmaya çalışın.
- Aynı çerezi kullanarak 2 cihazda (veya tarayıcıda) aynı hesaba giriş yapmayı deneyin. - Aynı çerezi kullanarak 2 cihazda (veya tarayıcıda) aynı hesaba giriş yapmayı deneyin.
- Çerezin içinde herhangi bir bilgi olup olmadığını kontrol edin ve değiştirmeyi deneyin. - Çerezde herhangi bir bilgi olup olmadığını kontrol edin ve bunu değiştirmeye çalışın.
- Neredeyse aynı kullanıcı adıyla birkaç hesap oluşturmaya çalışın ve benzerlikleri görebiliyor musunuz kontrol edin. - Neredeyse aynı kullanıcı adıyla birkaç hesap oluşturmaya çalışın 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 hassas olabileceğini düşünüyorsanız, her zaman başka bir çerez olmadan **beni hatırla** çerezini kullanın. - 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. - Önceki çerezin, şifreyi değiştirdikten sonra bile çalışıp çalışmadığını kontrol edin.
@ -242,7 +267,7 @@ padbuster http://web.com/index.php u7bvLewln6PJPSAbMb5pFfnCHSEd6olf 8 -cookies a
padBuster http://web.com/home.jsp?UID=7B216A634951170FF851D6CC68FC9537858795A28ED4AAC6 padBuster http://web.com/home.jsp?UID=7B216A634951170FF851D6CC68FC9537858795A28ED4AAC6
7B216A634951170FF851D6CC68FC9537858795A28ED4AAC6 8 -encoding 2 7B216A634951170FF851D6CC68FC9537858795A28ED4AAC6 8 -encoding 2
``` ```
Padbuster birkaç deneme yapacak ve size hangi koşulun hata koşulu olduğunu soracaktır (geçersiz olan). Padbuster birkaç deneme yapacak ve size hangi durumun hata durumu olduğunu soracaktır (geçersiz olan).
Ardından çerezi şifrelemeye başlayacaktır (bu birkaç dakika sürebilir). Ardından çerezi şifrelemeye başlayacaktır (bu birkaç dakika sürebilir).
@ -269,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:** **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 bir desen keşfetmeye çalışın. Neredeyse aynı verilere sahip 2 kullanıcı oluşturun (kullanıcı adı, şifre, e-posta vb.) 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ı anahtar ile şifrelediğinden, kullanıcı adı şifrelendiğinde aynı şifrelenmiş baytlar görünebilir). Ö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ı anahtar ile ş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"\*(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. 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 ## Referanslar