64 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Unicode Injection
{{#include ../../banners/hacktricks-training.md}}
## Introduction
Arka uç/ön uç, **garip unicode karakterleri aldığında** nasıl davranıyorsa, bir saldırgan **korumaları atlayabilir ve rastgele karakterler enjekte edebilir**. Bu, XSS veya SQLi gibi **enjeksiyon zafiyetlerini kötüye kullanmak için** kullanılabilir.
## Unicode Normalization
Unicode normalizasyonu, **unicode karakterlerinin ascii karakterlerine normalleştirilmesi** sırasında gerçekleşir.
Bu tür bir zafiyetin yaygın bir senaryosu, sistemin kullanıcının **girişini kontrol ettikten sonra** bir şekilde **değiştirmesi** durumunda ortaya çıkar. Örneğin, bazı dillerde **girişi büyük veya küçük harfe dönüştürmek** için basit bir çağrı, verilen girişi normalleştirebilir ve **unicode ASCII'ye dönüştürülecek** yeni karakterler üretebilir.\
Daha fazla bilgi için kontrol edin:
{{#ref}}
unicode-normalization.md
{{#endref}}
## `\u` to `%`
Unicode karakterleri genellikle **`\u` ön eki** ile temsil edilir. Örneğin, `㱋` karakteri `\u3c4b`dir ([buradan kontrol edin](https://unicode-explorer.com/c/3c4B)). Eğer bir arka uç **`\u` ön ekini `%`'ye dönüştürürse**, ortaya çıkan dize `%3c4b` olacaktır, bu da URL çözüldüğünde: **`<4b`** olur. Ve, görebileceğiniz gibi, bir **`<` karakteri enjekte edilmiştir**.\
Eğer arka uç zayıfsa, bu tekniği **herhangi bir tür karakteri enjekte etmek için** kullanabilirsiniz. Gerekli karakterleri bulmak için [https://unicode-explorer.com/](https://unicode-explorer.com/) adresini kontrol edin.
Bu zafiyet aslında bir araştırmacının bulduğu bir zafiyetten gelmektedir, daha derin bir açıklama için [https://www.youtube.com/watch?v=aUsAHb0E7Cg](https://www.youtube.com/watch?v=aUsAHb0E7Cg) adresine bakın.
## Emoji Injection
Arka uçlar, **emoji aldıklarında** garip davranışlar sergileyebilir. Bu, araştırmacının `💋img src=x onerror=alert(document.domain)//💛` gibi bir yükle XSS elde etmeyi başardığı [**bu yazıda**](https://medium.com/@fpatrik/how-i-found-an-xss-vulnerability-via-using-emojis-7ad72de49209) olan durumdur.
Bu durumda, hata, sunucunun kötü niyetli karakterleri kaldırdıktan sonra **Windows-1252'den UTF-8'e UTF-8 dizesini dönüştürmesiydi** (temelde giriş kodlaması ve dönüştürme kodlaması uyuşmazlığı). Bu, düzgün bir < vermez, sadece garip bir unicode verir: ``\
``Bu çıktıyı alıp **şimdi UTF-8'den ASCII'ye dönüştürdüler**. Bu, ``'yi `<'ye **normalleştirdi**, bu da bu sistemdeki istismarın nasıl çalışabileceğidir.\
İşte olanlar:
```php
<?php
$str = isset($_GET["str"]) ? htmlspecialchars($_GET["str"]) : "";
$str = iconv("Windows-1252", "UTF-8", $str);
$str = iconv("UTF-8", "ASCII//TRANSLIT", $str);
echo "String: " . $str;
```
Emoji listeleri:
- [https://github.com/iorch/jakaton_feminicidios/blob/master/data/emojis.csv](https://github.com/iorch/jakaton_feminicidios/blob/master/data/emojis.csv)
- [https://unicode.org/emoji/charts-14.0/full-emoji-list.html](https://unicode.org/emoji/charts-14.0/full-emoji-list.html)
## Windows En İyi Uyum/Kötü Uyum
**[bu harika yazıda](https://blog.orange.tw/posts/2025-01-worstfit-unveiling-hidden-transformers-in-windows-ansi/)** ıklandığı gibi, Windows'un **En İyi Uyum** adında bir özelliği vardır; bu özellik, ASCII modunda görüntülenemeyen **unicode karakterlerini** benzeri bir karakterle **değiştirir**. Bu, arka **belirli bir karakter** beklerken farklı bir karakter alması durumunda **beklenmedik davranışlara** yol açabilir.
En iyi uyum karakterlerini **[https://worst.fit/mapping/](https://worst.fit/mapping/)** adresinde bulmak mümkündür.
Windows genellikle unicode dizelerini ASCII dizelerine, yürütmenin son aşamalarından biri olarak dönüştürdüğünden (genellikle "W" ile biten bir API'den "A" ile biten bir API'ye geçiş yaparak, örneğin `GetEnvironmentVariableA` ve `GetEnvironmentVariableW`), bu, saldırganların, en son ASCII karakterlerine dönüştürülecek unicode karakterleri göndererek korumaları aşmalarına olanak tanır; bu da beklenmedik eylemler gerçekleştirebilir.
Blog yazısında, **karakterlerin kara listeye alındığı** zafiyetleri aşmak için önerilen yöntemler, [“/“ (0x2F) ile eşlenen karakterleri](https://worst.fit/mapping/#to%3A0x2f) ve [“\“ (0x5C) ile eşlenen karakterleri](https://worst.fit/mapping/#to%3A0x5c) kullanarak **yol geçişlerini** istismar etmek veya PHP'nin `escapeshellarg` veya Python'un `subprocess.run` gibi shell escape korumalarını aşmak için bir liste kullanarak yapılmıştır; bu, örneğin, çift tırnaklar yerine **tam genişlikte çift tırnaklar (U+FF02)** kullanılarak yapılmıştır, böylece sonunda 1 argüman gibi görünen şey 2 argümana dönüştürülmüştür.
**Bir uygulamanın zayıf olması için "W" Windows API'lerini kullanması, ancak bir "A" Windows API'sini çağırması gerekir, böylece unicode dizisinin "En İyi Uyum"u oluşturulur.**
**Birçok keşfedilen zafiyet, bu sorunu kimin çözmesi gerektiği konusunda anlaşmazlık olduğu için düzeltilemeyecek.**
{{#include ../../banners/hacktricks-training.md}}