Unicode Injection

Reading time: 4 minutes

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking'i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin

Introduction

Arka uç/ön uç nasıl davranıyorsa, garip unicode karakterleri aldığında 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 yapılan 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:

Unicode Normalization

\u to %

Unicode karakterleri genellikle \u ön eki ile temsil edilir. Örneğin, karakteri \u3c4bdir (buradan kontrol edin). Eğer bir arka uç \u ön ekini %'ye dönüştürürse, ortaya çıkan dize %3c4b olacaktır ki, 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 karakteri enjekte etmek için kullanabilirsiniz.
Gerekli karakterleri bulmak için 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 adresine bakın.

Emoji Injection

Arka uçlar, emoji aldıklarında tuhaf bir şekilde davranır. Bu, araştırmacının 💋img src=x onerror=alert(document.domain)//💛 gibi bir yük ile XSS elde etmeyi başardığı bu yazıda 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 tuhaf bir unicode verir:
``Bu çıktıyı alıp şimdi UTF-8'den ASCII'ye dönüştürdüler. Bu, 'yi `<'ye normalleştirdi ve bu, 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:

Windows En İyi Uyum/Kötü Uyum

bu harika yazıda açı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 ile değiştirir. Bu, arka uç belirli bir karakter beklerken farklı bir karakter alması durumunda beklenmedik davranışlara yol açabilir.

En iyi uyum karakterlerini 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 durum 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ınması ile düzeltilebilecek zafiyetleri aşmak için önerilen yöntemler, “/“ (0x2F) ile eşlenen karakterler ve “\“ (0x5C) ile eşlenen karakterler 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, sonunda 1 argüman gibi görünen şeyin 2 argümana dönüştüğü şekilde gerçekleştirilmiştir.

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 düzelteceği konusunda anlaşmazlık olduğu için düzeltilemeyecektir.

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE) Azure Hacking'i öğrenin ve pratik yapın: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks'i Destekleyin