Unicode Normalization

Sıfırdan kahraman olmaya kadar AWS hacklemeyi öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)!

HackTricks'ı desteklemenin diğer yolları:

WhiteIntel, karanlık ağ destekli bir arama motorudur ve şirketin veya müşterilerinin hırsız kötü amaçlı yazılımlar tarafından kompromize edilip edilmediğini kontrol etmek için ücretsiz işlevler sunar.

WhiteIntel'in başlıca amacı, bilgi çalan kötü amaçlı yazılımlardan kaynaklanan hesap ele geçirmeleri ve fidye yazılımı saldırılarıyla mücadele etmektir.

Websitesini ziyaret edebilir ve motorlarını ücretsiz deneyebilirsiniz:


Bu, şunun özeti: https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/. Daha fazla detay için bakın (resimler oradan alınmıştır).

Unicode ve Normalizasyonun Anlaşılması

Unicode normalizasyonu, karakterlerin farklı ikili temsillerinin aynı ikili değere standart hale getirildiği bir süreçtir. Bu süreç, programlama ve veri işleme süreçlerinde dizelerle uğraşırken hayati öneme sahiptir. Unicode standardı iki tür karakter eşdeğerliği tanımlar:

  1. Kanonik Eşdeğerlik: Karakterler, yazıldığında veya görüntülendiğinde aynı görünüme ve anlama sahipse kanonik olarak eşdeğer kabul edilir.

  2. Uyumluluk Eşdeğerliği: Karakterler aynı soyut karakteri temsil edebilir ancak farklı şekilde görüntülenebilirler.

Dört Unicode normalizasyon algoritması vardır: NFC, NFD, NFKC ve NFKD. Her algoritma kanonik ve uyumluluk normalizasyon tekniklerini farklı şekilde kullanır. Daha derinlemesine anlamak için bu teknikleri Unicode.org üzerinde keşfedebilirsiniz.

Unicode Kodlaması Hakkında Ana Noktalar

Unicode kodlamasını anlamak, farklı sistemler veya diller arasındaki etkileşim sorunlarıyla uğraşırken özellikle önemlidir. İşte ana noktalar:

  • Kod Noktaları ve Karakterler: Unicode'da, her karakter veya sembol, "kod noktası" olarak bilinen bir sayısal değerle ilişkilendirilir.

  • Bayt Temsili: Kod noktası (veya karakter), bellekte bir veya daha fazla bayt tarafından temsil edilir. Örneğin, İngilizce konuşan ülkelerde yaygın olan LATIN-1 karakterleri bir bayt kullanılarak temsil edilir. Ancak, daha fazla karakter kümesine sahip diller, temsil için daha fazla bayt gerektirir.

  • Kodlama: Bu terim, karakterlerin bir dizi bayta nasıl dönüştürüldüğünü ifade eder. UTF-8, ASCII karakterlerinin bir bayt kullanılarak temsil edildiği yaygın bir kodlama standardıdır ve diğer karakterler için dört bayta kadar kullanılır.

  • Veri İşleme: Veri işleyen sistemler, bayt akışını doğru şekilde karakterlere dönüştürmek için kullanılan kodlamayı bilmelidir.

  • UTF Çeşitleri: UTF-8'in yanı sıra, UTF-16 (en az 2 bayt, en fazla 4 bayt) ve UTF-32 (tüm karakterler için 4 bayt kullanımı) gibi diğer kodlama standartları bulunmaktadır.

Bu kavramları etkili bir şekilde anlamak, Unicode'ın karmaşıklığından ve çeşitli kodlama yöntemlerinden kaynaklanan olası sorunları ele almak ve azaltmak için hayati önem taşır.

İki farklı baytı temsil eden Unicode'ın nasıl normalleştirdiğine dair bir örnek:

unicodedata.normalize("NFKD","chloe\u0301") == unicodedata.normalize("NFKD", "chlo\u00e9")

Unicode eşdeğer karakterlerin bir listesine buradan ulaşabilirsiniz: https://appcheck-ng.com/wp-content/uploads/unicode_normalization.html ve https://0xacb.com/normalization_table

Keşfetme

Eğer bir web uygulamasında geriye yansıtılan bir değer bulabilirseniz, 'KELVİN İŞARETİ' (U+0212A) gönderebilirsiniz ki bu "K" olarak normalize edilir (bu şekilde gönderebilirsiniz %e2%84%aa). Eğer geriye "K" yansıtılıyorsa, bir tür Unicode normalizasyonu gerçekleştiriliyor demektir.

Başka bir örnek: %F0%9D%95%83%E2%85%87%F0%9D%99%A4%F0%9D%93%83%E2%85%88%F0%9D%94%B0%F0%9D%94%A5%F0%9D%99%96%F0%9D%93%83 unicode'den sonra Leonishan olur.

Zayıf Nokta Örnekleri

SQL Injection filtre bypass

Kullanıcı girdisiyle SQL sorguları oluşturmak için karakter ' kullanan bir web sayfasını hayal edin. Bu web sitesi, güvenlik önlemi olarak kullanıcı girdisindeki tüm karakter ''leri siler, ancak bu silme işleminden sonra ve sorgunun oluşturulmasından önce kullanıcı girdisini Unicode kullanarak normalize eder.

Bu durumda, kötü niyetli bir kullanıcı, ' (0x27)'ye eşdeğer farklı bir Unicode karakteri ekleyebilir, örneğin %ef%bc%87. Girdi normalize edildiğinde, tek tırnak oluşturulur ve bir SQLInjection zafiyeti ortaya çıkar:

Bazı ilginç Unicode karakterler

  • o -- %e1%b4%bc

  • r -- %e1%b4%bf

  • 1 -- %c2%b9

  • = -- %e2%81%bc

  • / -- %ef%bc%8f

  • --- %ef%b9%a3

  • #-- %ef%b9%9f

  • *-- %ef%b9%a1

  • ' -- %ef%bc%87

  • " -- %ef%bc%82

  • | -- %ef%bd%9c

' or 1=1-- -
%ef%bc%87+%e1%b4%bc%e1%b4%bf+%c2%b9%e2%81%bc%c2%b9%ef%b9%a3%ef%b9%a3+%ef%b9%a3

" or 1=1-- -
%ef%bc%82+%e1%b4%bc%e1%b4%bf+%c2%b9%e2%81%bc%c2%b9%ef%b9%a3%ef%b9%a3+%ef%b9%a3

' || 1==1//
%ef%bc%87+%ef%bd%9c%ef%bd%9c+%c2%b9%e2%81%bc%e2%81%bc%c2%b9%ef%bc%8f%ef%bc%8f

" || 1==1//
%ef%bc%82+%ef%bd%9c%ef%bd%9c+%c2%b9%e2%81%bc%e2%81%bc%c2%b9%ef%bc%8f%ef%bc%8f

sqlmap şablonu

XSS (Cross Site Scripting)

Web uygulamasını kandırabilir ve XSS'yi sömürebilirsiniz için aşağıdaki karakterlerden birini kullanabilirsiniz:

Örneğin, ilk Unicode karakteri %e2%89%ae veya %u226e olarak gönderilebilir.

Regex Fuzzing

Arka uç, bir regex ile kullanıcı girişini kontrol ettiğinde, girişin regex için normalize edildiği ancak kullanıldığı yer için değil olabileceği mümkündür. Örneğin, Açık Yönlendirme veya SSRF'de regex, gönderilen URL'yi normalize edebilir ancak olduğu gibi erişebilir.

recollapse aracı, arka ucu test etmek için girişin varyasyonlarını oluşturmanıza olanak tanır. Daha fazla bilgi için github ve bu gönderiye bakın.

Referanslar

WhiteIntel, karanlık ağ destekli bir arama motorudur ve şirketin veya müşterilerinin hırsız kötü amaçlı yazılımlar tarafından kompromize edilip edilmediğini kontrol etmek için ücretsiz işlevsellikler sunar.

WhiteIntel'in asıl amacı, bilgi çalan kötü amaçlı yazılımlardan kaynaklanan hesap ele geçirmeleri ve fidye yazılımı saldırılarıyla mücadele etmektir.

Websitesini ziyaret edebilir ve motorlarını ücretsiz deneyebilirsiniz:

Sıfırdan kahraman olmak için AWS hackleme öğrenin htARTE (HackTricks AWS Red Team Expert)!

HackTricks'i desteklemenin diğer yolları:

Last updated