mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-23 13:13:41 +00:00
128 lines
8.9 KiB
Markdown
128 lines
8.9 KiB
Markdown
# Unicode Normalizasyonu
|
||
|
||
<details>
|
||
|
||
<summary><strong>htARTE (HackTricks AWS Kırmızı Takım Uzmanı)</strong> ile sıfırdan kahramana kadar AWS hackleme öğrenin<strong>!</strong></summary>
|
||
|
||
HackTricks'i desteklemenin diğer yolları:
|
||
|
||
* **Şirketinizi HackTricks'te reklamını görmek** veya **HackTricks'i PDF olarak indirmek** için [**ABONELİK PLANLARI'na**](https://github.com/sponsors/carlospolop) göz atın!
|
||
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
|
||
* [**The PEASS Ailesi'ni**](https://opensea.io/collection/the-peass-family) keşfedin, özel [**NFT'lerimiz**](https://opensea.io/collection/the-peass-family) koleksiyonumuz
|
||
* 💬 [**Discord grubuna**](https://discord.gg/hRep4RUj7f) veya [**telegram grubuna**](https://t.me/peass) **katılın** veya **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**'u takip edin**.
|
||
* **Hacking hilelerinizi** [**HackTricks**](https://github.com/carlospolop/hacktricks) ve [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github depolarına **PR göndererek paylaşın**.
|
||
|
||
</details>
|
||
|
||
**Bu, şuradan bir özet: [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 bir göz atın (resimler oradan alınmıştır).
|
||
|
||
|
||
## Unicode ve Normalizasyonun Anlaşılması
|
||
|
||
Unicode normalizasyonu, karakterlerin farklı ikili temsillerinin aynı ikili değere standartlaştırıldığı bir süreçtir. Bu süreç, programlama ve veri işleme süreçlerinde dizelerle uğraşırken önemlidir. Unicode standardı, iki tür karakter eşdeğerliği tanımlar:
|
||
|
||
1. **Kanonik Eşdeğerlik**: Karakterler, yazdırıldığında veya görüntülendiğinde aynı görünüm ve anlama sahipse kanonik olarak eşdeğer kabul edilir.
|
||
2. **Uyumluluk Eşdeğerliği**: Karakterlerin aynı soyut karakteri temsil edebileceği ancak farklı şekillerde görüntülenebileceği daha zayıf bir eşdeğerlik türüdür.
|
||
|
||
Dört Unicode normalizasyon algoritması vardır: NFC, NFD, NFKC ve NFKD. Her algoritma, kanonik ve uyumluluk normalizasyon tekniklerini farklı şekillerde kullanır. Daha ayrıntılı bir anlayış için [Unicode.org](https://unicode.org/) üzerinde bu teknikleri keşfedebilirsiniz.
|
||
|
||
### Unicode Kodlaması Hakkında Önemli Noktalar
|
||
|
||
Unicode kodlamasını anlamak, özellikle farklı sistemler veya diller arasındaki uyumluluk sorunlarıyla uğraşırken ö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 dillerin temsili için daha fazla bayt gereklidir.
|
||
- **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 bir şekilde karakterlere dönüştürebilmek için kullanılan kodlamayı bilmelidir.
|
||
- **UTF'nin Çeşitleri**: UTF-8'in yanı sıra, UTF-16 (en az 2 bayt, en fazla 4) ve UTF-32 (tüm karakterler için 4 bayt) 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ı başarılı bir şekilde ele almanıza yardımcı olacaktır.
|
||
|
||
|
||
Farklı karakterleri temsil eden iki farklı baytın nasıl Unicode normalizasyonu yapıldığına bir örnek:
|
||
```python
|
||
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](https://appcheck-ng.com/wp-content/uploads/unicode\_normalization.html) ve [https://0xacb.com/normalization\_table](https://0xacb.com/normalization\_table)
|
||
|
||
### Keşfetme
|
||
|
||
Eğer bir web uygulamasında geri yansıtılan bir değer bulabilirseniz, **'KELVIN İŞARETİ' (U+0212A)** gönderebilirsiniz, bu da **"K" olarak normalize edilir** (bu şekilde gönderebilirsiniz `%e2%84%aa`). Eğer geri yansıtılan bir "K" varsa, o zaman 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'dan sonra `Leonishan` olur.
|
||
|
||
## **Zayıf Nokta Örnekleri**
|
||
|
||
### **SQL Injection filtre bypass**
|
||
|
||
Kullanıcı girişiyle SQL sorguları oluşturmak için karakter `'` kullanan bir web sayfasını hayal edin. Bu web, bir güvenlik önlemi olarak, kullanıcı girişinin tüm `'` karakterlerini **siler**, ancak bu silme işleminden sonra ve sorgunun oluşturulmasından **önce**, kullanıcının girişini **Unicode** kullanarak **normalize** eder.
|
||
|
||
Bu durumda, kötü niyetli bir kullanıcı, `' (0x27)` ile eşdeğer farklı bir Unicode karakteri `%ef%bc%87` ekleyebilir, giriş 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 (157) (1).png>)
|
||
|
||
**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
|
||
|
||
{% embed url="https://github.com/carlospolop/sqlmap_to_unicode_template" %}
|
||
|
||
### XSS (Cross Site Scripting)
|
||
|
||
Web uygulamasını kandırmak ve XSS saldırısı gerçekleştirmek için aşağıdaki karakterlerden birini kullanabilirsiniz:
|
||
|
||
![https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/](<../../.gitbook/assets/image (312) (1).png>)
|
||
|
||
Örneğin, önerilen 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).png>)
|
||
|
||
### Regex Fuzzing
|
||
|
||
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** durumlar olabilir. Örneğin, bir Açık Yönlendirme veya SSRF'de regex, gönderilen URL'yi **normalize edebilir** ancak **olduğu gibi erişebilir**.
|
||
|
||
[**recollapse**](https://github.com/0xacb/recollapse) aracı, arka ucu fuzzlemek için girişin varyasyonlarını oluşturmanıza olanak sağlar. Daha fazla bilgi için **github** ve bu [**gönderiye**](https://0xacb.com/2022/11/21/recollapse/) bakın.
|
||
|
||
|
||
## Referanslar
|
||
* [**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)
|
||
|
||
<details>
|
||
|
||
<summary><strong>AWS hackleme konusunda sıfırdan kahramana kadar öğrenin</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
||
|
||
HackTricks'i desteklemenin diğer yolları:
|
||
|
||
* Şirketinizi HackTricks'te **reklamınızı yapmak veya HackTricks'i PDF olarak indirmek** için [**ABONELİK PLANLARINA**](https://github.com/sponsors/carlospolop) göz atın!
|
||
* [**Resmi PEASS & HackTricks ürünlerini**](https://peass.creator-spring.com) edinin
|
||
* Özel [**NFT'lerden**](https://opensea.io/collection/the-peass-family) oluşan koleksiyonumuz olan [**The PEASS Family**](https://opensea.io/collection/the-peass-family)'yi keşfedin
|
||
* 💬 [**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 hilelerinizi HackTricks ve HackTricks Cloud** github depolarına **PR göndererek paylaşın**.
|
||
|
||
</details>
|